<?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>195722</bug_id>
          
          <creation_ts>2019-03-13 18:13:15 -0700</creation_ts>
          <short_desc>Remove the SVG property tear off objects for SVGAnimatedInteger</short_desc>
          <delta_ts>2019-03-16 00:44:07 -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>SVG</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>
          <dependson>195762</dependson>
    
    <dependson>195767</dependson>
          <blocked>191237</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jonlee</cc>
    
    <cc>krit</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1516310</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-13 18:13:15 -0700</bug_when>
    <thetext>The SVG properties tear-off objects have been troublesome and difficult area to maintain in WebKit. The patches in https://bugs.webkit.org/show_bug.cgi?id=191237 tried to remove all them and replace them in one giant patch. To make reviewing this work easier, I am going to do it incrementally. This patch will remove the SVG property tear off objects for SVGAnimatedInteger only. Once this patch lands, doing the same thing for the other types will be straightforward and reviewing the patches should be mechanical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516313</commentid>
    <comment_count>1</comment_count>
      <attachid>364603</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-13 18:25:32 -0700</bug_when>
    <thetext>Created attachment 364603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516331</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-13 18:56:00 -0700</bug_when>
    <thetext>Attachment 364603 did not pass style-queue:


ERROR: Source/WebCore/svg/SVGAnimationElement.h:137:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 1 in 69 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516552</commentid>
    <comment_count>3</comment_count>
      <attachid>364603</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-14 11:38:25 -0700</bug_when>
    <thetext>Comment on attachment 364603
Patch

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

Looks good, but my suggestions:
1. Do the enum class change first.
2. Do a file rename to put &quot;legacy&quot; in existing files/classnames that will go away when you&apos;re done.
3. The rest of this patch.

&gt; Source/WebCore/ChangeLog:11
&gt; +        integer as Ref&lt;SVGAnimatedInteger&gt; in SVGElement. This will make the 
&gt; +        representation of the property in IDL file matches the C++ header file.

...will make the representation ... match (not matches)

&gt; Source/WebCore/ChangeLog:13
&gt; +        When the DOM requesting the SVGAnimatedInteger, we get return a reference

requests ... we return

&gt; Source/WebCore/ChangeLog:16
&gt; +        baseVal() which will depend on whether the property is animating or not.

which will depend on -&gt; depending on

&gt; Source/WebCore/ChangeLog:50
&gt; +        -- SVGNewProperty.h will replace SVGProperty.h 
&gt; +
&gt; +        -- SVGNewAnimatedProperty.h will replace SVGAnimatedProperty.h

I think the way to do this is to rename the old ones to SVGLegacyFoo first, so we never have files with &quot;new&quot; in their names in the tree.

&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:31
&gt; +#include &quot;SVGNewAnimationController.h&quot;

We don&apos;t have SVGAnimationController.h so why does this new &quot;new&quot; I the name?

&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:46
&gt; +SVGAnimationControllerBase&amp; SVGAnimateElementBase::ensureController()

This should just be called animationController() (see the guidelines at https://webkit.org/code-style-guidelines/, search for &quot;ifexists&quot;)

&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:55
&gt; +            m_controller = std::make_unique&lt;SVGNewAnimationController&gt;(*this, *targetElement());
&gt; +        else
&gt; +            m_controller = std::make_unique&lt;SVGAnimationController&gt;(*this, *targetElement());

Presumably everything will use SVGNewAnimationController eventually? More reasons to rename SVGAnimationController to SVGLegacyAnimationController first.

&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:74
&gt; +    return SVGAnimationControllerBase::determineAnimatedPropertyType(*this, targetElement, attributeName());

Is there a reason this calls determineAnimatedPropertyType on SVGAnimationControllerBase explicitly, rather than just SVGAnimationController?

&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:135
&gt; +    if (animationMode() == AnimationMode::By || animationMode() == AnimationMode::FromBy) {

You could do these num class changes in a different patch.

&gt; Source/WebCore/svg/SVGAnimateMotionElement.h:40
&gt; +    bool hasValidAttributeType() const override;
&gt; +    bool hasValidAttributeName() const override;

These could be a separate patch, no?

&gt; Source/WebCore/svg/SVGAnimationController.cpp:46
&gt; +SVGAnimatedTypeAnimator* SVGAnimationController::ensureAnimator()

animatedTypeAnimator() or maybe just animator(). It should return a reference.

&gt; Source/WebCore/svg/SVGAnimationController.cpp:161
&gt; +        m_animatedProperties = animator-&gt;findAnimatedPropertiesForAttributeName(m_targetElement, attributeName);
&gt; +        if (m_animatedProperties.isEmpty())
&gt; +            return;
&gt; +
&gt; +        ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties));
&gt; +        if (!m_animatedType)
&gt; +            m_animatedType = animator-&gt;startAnimValAnimation(m_animatedProperties);
&gt; +        else {
&gt; +            animator-&gt;resetAnimValToBaseVal(m_animatedProperties, *m_animatedType);
&gt; +            animator-&gt;animValDidChange(m_animatedProperties);
&gt; +        }

If you moved this into a separate function you wouldn&apos;t need the comment

&gt; Source/WebCore/svg/SVGAnimationController.cpp:177
&gt; +    ASSERT(m_animatedProperties.isEmpty());
&gt; +    String baseValue;
&gt; +
&gt; +    if (shouldApply == SVGAnimationElement::ApplyCSSAnimation) {
&gt; +        ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(&amp;m_targetElement, attributeName));
&gt; +        m_animationElement.computeCSSPropertyValue(&amp;m_targetElement, cssPropertyID(attributeName.localName()), baseValue);
&gt; +    }
&gt; +
&gt; +    if (!m_animatedType)
&gt; +        m_animatedType = animator-&gt;constructFromString(baseValue);
&gt; +    else
&gt; +        m_animatedType-&gt;setValueAsString(attributeName, baseValue);

Ditto

&gt; Source/WebCore/svg/SVGAnimationController.cpp:185
&gt; +    SVGAnimationElement::ShouldApplyAnimation shouldApply =  m_animationElement.shouldApplyAnimation(&amp;m_targetElement, attributeName);

two spaces after ==

&gt; Source/WebCore/svg/SVGAnimationController.cpp:225
&gt; +    // Be sure to detach list wrappers before we modfiy their underlying value. If we&apos;d do
&gt; +    // if after calculateAnimatedValue() ran the cached pointers in the list propery tear
&gt; +    // offs would point nowhere, and we couldn&apos;t create copies of those values anymore,
&gt; +    // while detaching. This is covered by assertions, moving this down would fire them.

Comment is hard to parse.

&gt; Source/WebCore/svg/SVGAnimationController.cpp:234
&gt; +static inline void applyCSSPropertyToTarget(SVGElement&amp; targetElement, CSSPropertyID id, const String&amp; value)

id -&gt; propertyID

&gt; Source/WebCore/svg/SVGAnimationController.cpp:244
&gt; +static inline void removeCSSPropertyFromTarget(SVGElement&amp; targetElement, CSSPropertyID id)

ditto. avoiding &quot;id&quot; in general is good because it&apos;s a reserved word in Objective-C

&gt; Source/WebCore/svg/SVGAnimationController.cpp:257
&gt; +    CSSPropertyID id = cssPropertyID(attributeName.localName());

here too

&gt; Source/WebCore/svg/SVGAnimationController.cpp:259
&gt; +    SVGElement::InstanceUpdateBlocker blocker(targetElement);

At some point we should rename InstanceUpdateBlocker to SomethingScope

&gt; Source/WebCore/svg/SVGAnimationController.cpp:273
&gt; +    CSSPropertyID id = cssPropertyID(attributeName.localName());

id

&gt; Source/WebCore/svg/SVGAnimationController.cpp:321
&gt; +    // We do update the style and the animation property independent of each other.

remove &quot;do&quot;

&gt; Source/WebCore/svg/SVGAnimationController.h:38
&gt; +class SVGAnimationController : public SVGAnimationControllerBase {

I think this might need a better name. We already have CSSAnimationController which handles ALL CSS animations for a document. This is handling animations for a single property on a single SVG element I think, so maybe it&apos;s SVGElementPropertyAnimationController or SVGElementPropertyAnimation or SVGElementPropertyAnimator?

&gt; Source/WebCore/svg/SVGAnimationController.h:60
&gt; +    AnimatedPropertyType m_animatedPropertyType;

can this be const?

&gt; Source/WebCore/svg/SVGAnimationControllerBase.h:34
&gt; +class SVGAnimationControllerBase {

Same comment about naming.

&gt; Source/WebCore/svg/SVGAnimationElement.h:137
&gt; +    enum class AttributeType { CSS, XML, Auto };

: uint8_t

&gt; Source/WebCore/svg/SVGElement.cpp:731
&gt; +void SVGElement::commitPropertyChange(SVGNewAnimatedProperty* animatedProperty)

Can animatedProperty be a reference?

&gt; Source/WebCore/svg/SVGElement.h:221
&gt; +    PropertyRegistry m_propertyRegistry { *this };

This pattern is a bit odd. I would expect to see these initialized in the constructor.

&gt; Source/WebCore/svg/SVGFEConvolveMatrixElement.h:84
&gt; +    Ref&lt;SVGAnimatedInteger&gt;&amp; orderXAnimated() { return m_orderX; }

Why not just return SVGAnimatedInteger&amp; ?

&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:42
&gt; +RefPtr&lt;SVGAnimator&gt; SVGNewAnimationController::createAnimator() const

Should be called animator()

&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:45
&gt; +        m_animator = m_targetElement.createAnimator(m_animationElement.attributeName(), m_animationElement.animationMode(), m_animationElement.calcMode(), m_animationElement.isAccumulated(), m_animationElement.isAdditive());

The fact that you ask m_animationElement for all the arguments suggests that m_animationElement should create this thing.

&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:47
&gt; +    return m_animator;

Can m_targetElement.createAnimator() ever return null?

&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:70
&gt; +    if (!createAnimator())
&gt; +        return false;
&gt; +
&gt; +    m_animator-&gt;setFromAndToValues(&amp;m_targetElement, from, to);

if (auto* animator = createAnimator()) { animator-&gt;set...; return true; } return false;

&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:77
&gt; +    if (!createAnimator())
&gt; +        return false;

I don&apos;t like this pattern where you rely on the side-effect of createAnimator(). Reads better if you use the return value from createAnimator().

&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:137
&gt; +    if (!m_animator)
&gt; +        return;
&gt; +    m_animator-&gt;stop(targetElement);

This would be an animatorIfExists()

&gt; Source/WebCore/svg/SVGNewAnimationController.h:41
&gt; +    RefPtr&lt;SVGAnimator&gt; createAnimator() const;

Why not return SVGAnimator*?. But I really wonder if you should just call this makeAnimator() and have it return void, since all the use cases are internal to the class.

&gt; Source/WebCore/svg/properties/SVGAccessor.h:37
&gt; +class SVGAccessor {

This name is a bit generic. What is being accessed?

&gt; Source/WebCore/svg/properties/SVGAnimatedPrimitiveProperty.h:137
&gt; +    mutable Optional&lt;PropertyType&gt; m_animVal;

Can we use Marked here instead?

&gt; Source/WebCore/svg/properties/SVGAnimator.h:40
&gt; +class SVGAnimator : public RefCounted&lt;SVGAnimator&gt; {

Name is a bit generic. Is it a property animator?

&gt; Source/WebCore/svg/properties/SVGNewAnimatedProperty.cpp:35
&gt; +    // Casting from SVGElement to SVGPropertyOwner requires SVGElement.h.

Seem like that comment explains the #include above? Maybe remove it.

&gt; Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h:56
&gt; +    // Enumrate all the SVGAccessors recursively. The functor will be called and will

&quot;Enumrate&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517228</commentid>
    <comment_count>4</comment_count>
      <attachid>364603</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-15 15:59:45 -0700</bug_when>
    <thetext>Comment on attachment 364603
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        representation of the property in IDL file matches the C++ header file.
&gt; 
&gt; ...will make the representation ... match (not matches)

Fixed

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        When the DOM requesting the SVGAnimatedInteger, we get return a reference
&gt; 
&gt; requests ... we return

Fixed

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +        baseVal() which will depend on whether the property is animating or not.
&gt; 
&gt; which will depend on -&gt; depending on

Fixed

&gt;&gt; Source/WebCore/ChangeLog:50
&gt;&gt; +        -- SVGNewAnimatedProperty.h will replace SVGAnimatedProperty.h
&gt; 
&gt; I think the way to do this is to rename the old ones to SVGLegacyFoo first, so we never have files with &quot;new&quot; in their names in the tree.

Done in &lt;https://trac.webkit.org/changeset/242978&gt;.

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:31
&gt;&gt; +#include &quot;SVGNewAnimationController.h&quot;
&gt; 
&gt; We don&apos;t have SVGAnimationController.h so why does this new &quot;new&quot; I the name?

Three classes will be added:
    SVGAnimationControllerBase
    SVGLegacyAnimationController
    SVGAnimationController

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:46
&gt;&gt; +SVGAnimationControllerBase&amp; SVGAnimateElementBase::ensureController()
&gt; 
&gt; This should just be called animationController() (see the guidelines at https://webkit.org/code-style-guidelines/, search for &quot;ifexists&quot;)

Fixed.

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:55
&gt;&gt; +            m_controller = std::make_unique&lt;SVGAnimationController&gt;(*this, *targetElement());
&gt; 
&gt; Presumably everything will use SVGNewAnimationController eventually? More reasons to rename SVGAnimationController to SVGLegacyAnimationController first.

Fixed. And I think eventually there will no need for any SVGAnimationController. All the code in SVGAnimationController will be moved to SVGAnimateElementBase. The functions in SVGAnimationController are just wrappers around the function in the SVGAnimator.

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:74
&gt;&gt; +    return SVGAnimationControllerBase::determineAnimatedPropertyType(*this, targetElement, attributeName());
&gt; 
&gt; Is there a reason this calls determineAnimatedPropertyType on SVGAnimationControllerBase explicitly, rather than just SVGAnimationController?

It is just convenient. The static method SVGAnimationControllerBase::determineAnimatedPropertyType() takes more argument than the one here. Also everything about the AnimatedPropertyType will be removed eventually.

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:135
&gt;&gt; +    if (animationMode() == AnimationMode::By || animationMode() == AnimationMode::FromBy) {
&gt; 
&gt; You could do these num class changes in a different patch.

Done in &lt;https://trac.webkit.org/changeset/242970&gt;.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.cpp:46
&gt;&gt; +SVGAnimatedTypeAnimator* SVGAnimationController::ensureAnimator()
&gt; 
&gt; animatedTypeAnimator() or maybe just animator(). It should return a reference.

Fixed.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.cpp:161
&gt;&gt; +        }
&gt; 
&gt; If you moved this into a separate function you wouldn&apos;t need the comment

I just moved this code from SVGAnimateElementBase::resetAnimatedType(). I do not want to change it since it is going to be removed eventually.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.cpp:185
&gt;&gt; +    SVGAnimationElement::ShouldApplyAnimation shouldApply =  m_animationElement.shouldApplyAnimation(&amp;m_targetElement, attributeName);
&gt; 
&gt; two spaces after ==

Fixed.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.cpp:225
&gt;&gt; +    // while detaching. This is covered by assertions, moving this down would fire them.
&gt; 
&gt; Comment is hard to parse.

This is the legacy tear off object code. It will be removed eventually.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.cpp:234
&gt;&gt; +static inline void applyCSSPropertyToTarget(SVGElement&amp; targetElement, CSSPropertyID id, const String&amp; value)
&gt; 
&gt; id -&gt; propertyID

Ditto.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.h:38
&gt;&gt; +class SVGAnimationController : public SVGAnimationControllerBase {
&gt; 
&gt; I think this might need a better name. We already have CSSAnimationController which handles ALL CSS animations for a document. This is handling animations for a single property on a single SVG element I think, so maybe it&apos;s SVGElementPropertyAnimationController or SVGElementPropertyAnimation or SVGElementPropertyAnimator?

I renamed it SVGAttributeAnimationController. I do not want to use SVGPropertyAnimationController because the SVGAnimateElementBase can animate animated property like SVGAnimatedLength &apos;x&apos; of the &lt;rect&gt; element or none animated property like float &apos;opacity&apos; of the &lt;rect&gt; element. Eventually these controllers will be deleted.

&gt;&gt; Source/WebCore/svg/SVGAnimationController.h:60
&gt;&gt; +    AnimatedPropertyType m_animatedPropertyType;
&gt; 
&gt; can this be const?

Done.

&gt;&gt; Source/WebCore/svg/SVGAnimationElement.h:137
&gt;&gt; +    enum class AttributeType { CSS, XML, Auto };
&gt; 
&gt; : uint8_t

Fixed.

&gt;&gt; Source/WebCore/svg/SVGElement.cpp:731
&gt;&gt; +void SVGElement::commitPropertyChange(SVGNewAnimatedProperty* animatedProperty)
&gt; 
&gt; Can animatedProperty be a reference?

Done.

&gt;&gt; Source/WebCore/svg/SVGElement.h:221
&gt;&gt; +    PropertyRegistry m_propertyRegistry { *this };
&gt; 
&gt; This pattern is a bit odd. I would expect to see these initialized in the constructor.

I think this pattern is okay if the initializer list includes *this&quot; or constant values. The initialization of all the properties are done the same way. For example, the SVGFETurbulenceElement.h have the following definition. 

Ref&lt;SVGAnimatedInteger&gt; m_numOctaves { SVGAnimatedInteger::create(this, 1) };

This makes the constructor look simpler. If we add the initialization of all the members to the constructor we will have to add six lines SVGFETurbulenceElement.cpp in the just for the initialization.

&gt;&gt; Source/WebCore/svg/SVGFEConvolveMatrixElement.h:84
&gt;&gt; +    Ref&lt;SVGAnimatedInteger&gt;&amp; orderXAnimated() { return m_orderX; }
&gt; 
&gt; Why not just return SVGAnimatedInteger&amp; ?

Done.

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:42
&gt;&gt; +RefPtr&lt;SVGAnimator&gt; SVGNewAnimationController::createAnimator() const
&gt; 
&gt; Should be called animator()

Fixed.

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:45
&gt;&gt; +        m_animator = m_targetElement.createAnimator(m_animationElement.attributeName(), m_animationElement.animationMode(), m_animationElement.calcMode(), m_animationElement.isAccumulated(), m_animationElement.isAdditive());
&gt; 
&gt; The fact that you ask m_animationElement for all the arguments suggests that m_animationElement should create this thing.

The plan is to move all the code of this class to the SVGAnimateElementBase which is derived form SVGAnimationElement. So this function eventually will look like this:

RefPtr&lt;SVGAnimator&gt; SVGAnimateElementBase::createAnimator() const
{
    if (!m_animator)
        m_animator = targetElement()-&gt;createAnimator(attributeName(), animationMode(), calcMode(), isAccumulated(), isAdditive());
}

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:47
&gt;&gt; +    return m_animator;
&gt; 
&gt; Can m_targetElement.createAnimator() ever return null?

Yes if the attribute is not animatable.

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:70
&gt;&gt; +    m_animator-&gt;setFromAndToValues(&amp;m_targetElement, from, to);
&gt; 
&gt; if (auto* animator = createAnimator()) { animator-&gt;set...; return true; } return false;

Fixed.

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:77
&gt;&gt; +        return false;
&gt; 
&gt; I don&apos;t like this pattern where you rely on the side-effect of createAnimator(). Reads better if you use the return value from createAnimator().

Fixed.

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.cpp:137
&gt;&gt; +    m_animator-&gt;stop(targetElement);
&gt; 
&gt; This would be an animatorIfExists()

Fixed.

&gt;&gt; Source/WebCore/svg/SVGNewAnimationController.h:41
&gt;&gt; +    RefPtr&lt;SVGAnimator&gt; createAnimator() const;
&gt; 
&gt; Why not return SVGAnimator*?. But I really wonder if you should just call this makeAnimator() and have it return void, since all the use cases are internal to the class.

I changed the type of m_animator to be std::unique_ptr instead of RefPtr. And I changed this function to return SVGAnimator*.

&gt;&gt; Source/WebCore/svg/properties/SVGAccessor.h:37
&gt;&gt; +class SVGAccessor {
&gt; 
&gt; This name is a bit generic. What is being accessed?

I named it SVGMemberAccessor. The plan is to have derived classes from it: SVGAnimatedPropertyAccessor and SVGPropertyAccessor. The first one will manage the animated properties the SVGAnimatedLength &apos;x&apos; of the &lt;rect&gt; element. The second one will manage the non animated properties like SVGStringList &apos;requiredFeatures&apos; of the SVGTests class.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedPrimitiveProperty.h:137
&gt;&gt; +    mutable Optional&lt;PropertyType&gt; m_animVal;
&gt; 
&gt; Can we use Marked here instead?

I could not relate PropertyType to MarkableTraits. Maybe I am confused about the use of Markable.

&gt;&gt; Source/WebCore/svg/properties/SVGAnimator.h:40
&gt;&gt; +class SVGAnimator : public RefCounted&lt;SVGAnimator&gt; {
&gt; 
&gt; Name is a bit generic. Is it a property animator?

I remained it SVGAttributeAnimator. The plan is to have two types of animators SVGAnimatedPropertyAnimator and SVGPropertyAnimator. The first will animate properties like SVGAnimatedLength &apos;x&apos; of the &lt;rect&gt; element. The second will animate properties like the float &apos;opacity&apos; of the &lt;rect&gt; element.

&gt;&gt; Source/WebCore/svg/properties/SVGNewAnimatedProperty.cpp:35
&gt;&gt; +    // Casting from SVGElement to SVGPropertyOwner requires SVGElement.h.
&gt; 
&gt; Seem like that comment explains the #include above? Maybe remove it.

Fixed. I was explaining why I had to put this function in the source file instead of the header file. SVGElement.h can&apos;t be added to the header file because will add cyclic header file inclusion.

&gt;&gt; Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h:56
&gt;&gt; +    // Enumrate all the SVGAccessors recursively. The functor will be called and will
&gt; 
&gt; &quot;Enumrate&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517235</commentid>
    <comment_count>5</comment_count>
      <attachid>364870</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-15 16:02:17 -0700</bug_when>
    <thetext>Created attachment 364870
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517244</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 16:09:12 -0700</bug_when>
    <thetext>Attachment 364870 did not pass style-queue:


ERROR: Source/WebCore/svg/SVGAnimationElement.h:137:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 1 in 54 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517306</commentid>
    <comment_count>7</comment_count>
      <attachid>364870</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-15 17:37:40 -0700</bug_when>
    <thetext>Comment on attachment 364870
Patch

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

&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:114
&gt; +    if (!targetElement || !m_controller)

This would be a good use of animationControllerIfExists()

&gt; Source/WebCore/svg/SVGAnimateElementBase.h:38
&gt; +    SVGAttributeAnimationControllerBase&amp; animationController();

Would prefer it be called attributeAnimationController

&gt; Source/WebCore/svg/SVGFEConvolveMatrixElement.h:122
&gt; +    Ref&lt;SVGAnimatedInteger&gt; m_orderX { SVGAnimatedInteger::create(this) };
&gt; +    Ref&lt;SVGAnimatedInteger&gt; m_orderY { SVGAnimatedInteger::create(this) };

Feedback on webkit-dev was to only use this kind of initialization if the input data is known at compile time.

&gt; Source/WebCore/svg/properties/SVGAnimatedPrimitiveProperty.h:115
&gt; +    void stopAnimation() override

Add blank line above.

&gt; Source/WebCore/svg/properties/SVGAttributeAnimator.h:38
&gt; +enum class AnimationMode : uint8_t { None, FromTo, FromBy, To, By, Values, Path };
&gt; +enum class CalcMode : uint8_t { Discrete, Linear, Paced, Spline };

I prefer enums like this to be one value per line.

&gt; Source/WebCore/svg/properties/SVGMemberAccessorPtr.h:33
&gt; +class SVGMemberAccessorPtr : public SVGMemberAccessor&lt;OwnerType&gt; {

Is this a member accessor for pointer types, or a pointer to a member accessor? If the former, maybe SVGPointerMemberAccessor, or SVGMemberPointerAccessor?

&gt; Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h:122
&gt; +    // This is a virtual function because SVGElement will access it through the base class.

Odd to see this comment here and not no the base class where it&apos;s declared virtual.

&gt; Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h:135
&gt; +    // Creates an SVGAttributeAnimator for a given attributeName.

Comment doesn&apos;t add anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517321</commentid>
    <comment_count>8</comment_count>
      <attachid>364870</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-15 18:21:46 -0700</bug_when>
    <thetext>Comment on attachment 364870
Patch

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

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.cpp:114
&gt;&gt; +    if (!targetElement || !m_controller)
&gt; 
&gt; This would be a good use of animationControllerIfExists()

Fixed.

&gt;&gt; Source/WebCore/svg/SVGAnimateElementBase.h:38
&gt;&gt; +    SVGAttributeAnimationControllerBase&amp; animationController();
&gt; 
&gt; Would prefer it be called attributeAnimationController

Done.

&gt;&gt; Source/WebCore/svg/SVGFEConvolveMatrixElement.h:122
&gt;&gt; +    Ref&lt;SVGAnimatedInteger&gt; m_orderY { SVGAnimatedInteger::create(this) };
&gt; 
&gt; Feedback on webkit-dev was to only use this kind of initialization if the input data is known at compile time.

*this* for SVGElements are almost known at compile time since all of them are created with the same state. Can we address this issue once the tear off objects are removed completely, please?

&gt;&gt; Source/WebCore/svg/properties/SVGAnimatedPrimitiveProperty.h:115
&gt;&gt; +    void stopAnimation() override
&gt; 
&gt; Add blank line above.

Fixed.

&gt;&gt; Source/WebCore/svg/properties/SVGAttributeAnimator.h:38
&gt;&gt; +enum class CalcMode : uint8_t { Discrete, Linear, Paced, Spline };
&gt; 
&gt; I prefer enums like this to be one value per line.

Fixed.

&gt;&gt; Source/WebCore/svg/properties/SVGMemberAccessorPtr.h:33
&gt;&gt; +class SVGMemberAccessorPtr : public SVGMemberAccessor&lt;OwnerType&gt; {
&gt; 
&gt; Is this a member accessor for pointer types, or a pointer to a member accessor? If the former, maybe SVGPointerMemberAccessor, or SVGMemberPointerAccessor?

Class is renamed to SVGPointerMemberAccessor.

&gt;&gt; Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h:122
&gt;&gt; +    // This is a virtual function because SVGElement will access it through the base class.
&gt; 
&gt; Odd to see this comment here and not no the base class where it&apos;s declared virtual.

Comment was removed.

&gt;&gt; Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h:135
&gt;&gt; +    // Creates an SVGAttributeAnimator for a given attributeName.
&gt; 
&gt; Comment doesn&apos;t add anything.

Comment was removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517322</commentid>
    <comment_count>9</comment_count>
      <attachid>364897</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-03-15 18:22:11 -0700</bug_when>
    <thetext>Created attachment 364897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517324</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 18:25:08 -0700</bug_when>
    <thetext>Attachment 364897 did not pass style-queue:


ERROR: Source/WebCore/svg/SVGAnimationElement.h:137:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 1 in 54 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517326</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-15 18:53:08 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/svg/SVGFEConvolveMatrixElement.h:122
&gt; &gt;&gt; +    Ref&lt;SVGAnimatedInteger&gt; m_orderY { SVGAnimatedInteger::create(this) };
&gt; &gt; 
&gt; &gt; Feedback on webkit-dev was to only use this kind of initialization if the input data is known at compile time.
&gt; 
&gt; *this* for SVGElements are almost known at compile time since all of them
&gt; are created with the same state. Can we address this issue once the tear off
&gt; objects are removed completely, please?

Sure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517390</commentid>
    <comment_count>12</comment_count>
      <attachid>364897</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-16 00:42:48 -0700</bug_when>
    <thetext>Comment on attachment 364897
Patch

Clearing flags on attachment: 364897

Committed r243036: &lt;https://trac.webkit.org/changeset/243036&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517391</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-16 00:42:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517392</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-16 00:44:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/48950939&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364603</attachid>
            <date>2019-03-13 18:25:32 -0700</date>
            <delta_ts>2019-03-15 16:02:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195722-20190313182530.patch</filename>
            <type>text/plain</type>
            <size>252314</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyODM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTEyZWExNzJmYTc2NDBh
YzFjZGJiNzk4MjIyZGE1NzA1MTg5MzVhMy4uZjE5ZGU5NzdhM2JjMWQ2MzJjNThkYjhlYTRjODlj
NGYyMDc2NWI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzMyBAQAorMjAxOS0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIFNW
RyBwcm9wZXJ0eSB0ZWFyIG9mZiBvYmplY3RzIGZvciBTVkdBbmltYXRlZEludGVnZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTcyMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2Ygc2F2
aW5nIGEgcmF3IGludGVnZXIgdmFsdWUgaW4gdGhlIFNWR0VsZW1lbnQgYW5kIHRoZW4gd3JhcHBp
bmcKKyAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhpcyByYXcgZGF0YSBpbiBhIHRlYXIgb2ZmIG9i
amVjdCwgd2Ugd2lsbCByZXByZXNlbnQgdGhlCisgICAgICAgIGludGVnZXIgYXMgUmVmPFNWR0Fu
aW1hdGVkSW50ZWdlcj4gaW4gU1ZHRWxlbWVudC4gVGhpcyB3aWxsIG1ha2UgdGhlIAorICAgICAg
ICByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvcGVydHkgaW4gSURMIGZpbGUgbWF0Y2hlcyB0aGUg
QysrIGhlYWRlciBmaWxlLgorCisgICAgICAgIFdoZW4gdGhlIERPTSByZXF1ZXN0aW5nIHRoZSBT
VkdBbmltYXRlZEludGVnZXIsIHdlIGdldCByZXR1cm4gYSByZWZlcmVuY2UKKyAgICAgICAgdG8g
dGhlIG5ldyBhbmltYXRlZCBwcm9wZXJ0eS4gV2hlbiB0aGUgcmVuZGVyaW5nIGNvZGUgYXNrcyBm
b3IgdGhlIGN1cnJlbnQKKyAgICAgICAgdmFsdWUgb2YgdGhlIHRoaXMgYW5pbWF0ZWQgcHJvcGVy
dHksIHdlIHJldHVybiB0aGUgYW5pbVZhbCgpIG9yIHRoZQorICAgICAgICBiYXNlVmFsKCkgd2hp
Y2ggd2lsbCBkZXBlbmQgb24gd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYW5pbWF0aW5nIG9yIG5v
dC4KKworICAgICAgICBBIHBvaW50ZXIgdG8gYSBtZW1iZXIgaW4gdGhlIFNWR0VsZW1lbnQgd2ls
bCBiZSByZWdpc3RlcmVkIGFsb25nIHdpdGggdGhlCisgICAgICAgIGFzc29jaWF0ZWQgYXR0cmli
dXRlIG5hbWUgaW4gU1ZHUHJvcGVydHlSZWdpc3RyeS4gUmVnaXN0ZXJpbmcgdGhlIHByb3BlcnR5
CisgICAgICAgIGNyZWF0ZXMgYW4gU1ZHQWNjZXNzb3IgYW5kIGxpbmtzIHRvIHRoZSBhc3NvY2lh
dGVkIGF0dHJpYnV0ZS4gVGhlIGZ1bmN0aW9uCisgICAgICAgIG9mIHRoZSBTVkdBY2Nlc3NvciBp
cyB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGdpdmVuIGEgcG9pbnRlcgor
ICAgICAgICB0byBhbiBTVkdFbGVtZW50LgorCisgICAgICAgIFNWR1Byb3BlcnR5UmVnaXN0cnkg
bWFuYWdlcyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgU1ZHRWxlbWVudC4gSXQgdGFrZXMKKyAgICAg
ICAgaW50byBhY2NvdW50IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBhcyB3ZWxsLgorCisgICAg
ICAgIFNWR0VsZW1lbnQgd2lsbCBoYXZlIGEgdmlydHVhbCBtZXRob2QgY2FsbGVkIHByb3BlcnR5
UmVnaXN0cnkoKS4gRXZlcnkKKyAgICAgICAgc3VwZXJjbGFzcyB3aWxsIG92ZXJyaWRlIHRoaXMg
bWV0aG9kIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byBpdHMgcmVnaXN0cnkKKyAgICAgICAgd2hp
Y2ggaW5jbHVkZXMgYWxsIHRoZSByZWdpc3RlcmVkIHByb3BlcnRpZXMgb2YgdGhpcyBjbGFzcyBh
bmQgaXRzIGJhc2VzLgorCisgICAgICAgIE9uZSBpbXBvcnRhbnQgZnVuY3Rpb24gb2YgdGhlIFNW
R1Byb3BlcnR5UmVnaXN0cnkgYW5kIFNWR0FjY2Vzc29yIGlzIHRoZXkKKyAgICAgICAgY3JlYXRl
IHRoZSBhcHByb3ByaWF0ZSBTVkdBbmltYXRvciBmb3IgdGhpcyBwcm9wZXJ0eS4KKworICAgICAg
ICBTVkdBbmltYXRvciBpcyBqdXN0IGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBhbmltYXRlZCBw
cm9wZXJ0eSBhbmQKKyAgICAgICAgU1ZHQW5pbWF0aW9uRnVuY3Rpb24uIFNWR0FuaW1hdGlvbkZ1
bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHZhbHVlcyBvZiB0aGUKKyAgICAgICAgYW5pbWF0ZWQgcHJv
cGVydHkgd2l0aGluIGEgdGltZSBpbnRlcnZhbC4gU1ZHQW5pbWF0b3IgdXBkYXRlcyBhbmltVmFs
CisgICAgICAgIG9mIHRoZSBhbmltYXRlZCBwcm9wZXJ0eSBhbmQgaW52YWxpZGF0ZXMgdGhlIGFz
c29jaWF0ZWQgU1ZHRWxlbWVudCBhbmQgCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIHRoYXQg
cmVmZXJlbmNlcyB0aGlzIGVsZW1lbnQuCisKKyAgICAgICAgVGhlIHBsYW4gaXMgdG8gcmVtb3Zl
IGFsbCB0aGUgU1ZHIHRlYXIgb2ZmIG9iamVjdHMgbGlrZSB3aGF0IHRoaXMgcGF0Y2gKKyAgICAg
ICAgZG9lcyBmb3IgU1ZHQW5pbWF0ZWRJbnRlZ2VyLiBTbyBmb3IgYSBwZXJpb2Qgb2YgdGltZSB0
aGUgb2xkIGNvZGUgYW5kIHRoZQorICAgICAgICBuZXcgY29kZSB3aWxsIGNvLWV4aXN0IHRvZ2V0
aGVyLiBUbyBnZXQgdGhlIGNvZGUgY29tcGxpZWQgYW5kIGxpbmtlZCwgCisgICAgICAgIHNvbWUg
Y29kZSBoYXMgdG8gYmUgbW92ZWQgYXJvdW5kIGFuZCBuZXcgY2xhc3NlcyBoYXZlIHRvIGhhdmUg
YXdrd2FyZAorICAgICAgICBuYW1lcyB0aWxsIHRoZSB0ZWFyIG9mZiBwcm9wZXJ0aWVzIGNvZGUg
aXMgY29tcGxldGVseSBkZWxldGVkLgorCisgICAgICAgIFRoaW5ncyB0byBjb25zaWRlciB3aGVu
IHJldmlld2luZyB0aGlzIHBhdGNoOgorCisgICAgICAgIC0tIFNWR05ld1Byb3BlcnR5Lmggd2ls
bCByZXBsYWNlIFNWR1Byb3BlcnR5LmggCisKKyAgICAgICAgLS0gU1ZHTmV3QW5pbWF0ZWRQcm9w
ZXJ0eS5oIHdpbGwgcmVwbGFjZSBTVkdBbmltYXRlZFByb3BlcnR5LmgKKworICAgICAgICAtLSBT
VkdBbmltYXRlZEVsZW1lbnRCYXNlIHdhcyByZS1mYWN0b3JlZCB0byB1c2UgU1ZHQW5pbWF0aW9u
Q29udHJvbGxlckJhc2UKKyAgICAgICAgd2hpY2ggaXMgaW5oZXJpdGVkIGJ5IFNWR0FuaW1hdGlv
bkNvbnRyb2xsZXIgYW5kIFNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXIuCisgICAgICAgIFRoZSB0
ZWFyLW9mZiBwcm9wZXJ0aWVzIGNvZGUgd2hpY2ggdXNlcyBTVkdBbmltYXRlZFR5cGUgbm93IGxp
dmVzIGluCisgICAgICAgIFNWR0FuaW1hdGlvbkNvbnRyb2xsZXIuIFRoZSBuZXcgY29kZSB3YXMg
YWRkZWQgdG8gU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlci4KKyAgICAgICAgVGhlIHBsYW4gaXMg
dG8gcmVtb3ZlIHRoZSB0aHJlZSBhbmltYXRpb24gY29udHJvbGxlcnMgYW5kIHRvIG1vdmUgdGhl
IGNvZGUKKyAgICAgICAgb2YgU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlciB0byBTVkdBbmltYXRl
ZEVsZW1lbnRCYXNlIHdoZW4gYWxsIHRoZSB0ZWFyCisgICAgICAgIG9mZiBjb2RlIGlzIHJlbW92
ZWQuCisKKyAgICAgICAgLS0gU1ZHRWxlbWVudCBub3cga2VlcHMgdHdvIHJlZ2lzdHJpZXMgb25l
IGZvciB0aGUgdGVhci1vZmYgd29ybGQgYW5kIHRoZQorICAgICAgICBvdGhlciBmb3IgdGhlIG5l
dyB3b3JsZC4gRXZlbnR1YWxseSB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdGVhci1vZmYgcmVnaXN0
cnkuCisKKyAgICAgICAgLS0gU1ZHRWxlbWVudCB3aWxsIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0
aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgYnkgdGhlCisgICAgICAgIHRoZSBtZXRob2QgaXNBbmlt
YXRlZEF0dHJpYnV0ZSgpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjpTVkdBbmltYXRlRWxlbWVudEJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjplbnN1cmVDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6ZGV0ZXJtaW5l
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZUZyb21B
bmRUb1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNh
bGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxl
bWVudEJhc2U6OnJlc2V0QW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6Y2xlYXJBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmlzQWRkaXRpdmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OnNldFRhcmdldEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpzZXRBdHRyaWJ1dGVOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxl
bWVudEJhc2U6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpwcm9wZXJ0eVR5cGVzQXJlQ29uc2lzdGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjphcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fi
b3V0QW5pbVZhbENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
RWxlbWVudEJhc2U6OmFuaW1hdGVkUHJvcGVydHlUeXBlU3VwcG9ydHNBZGRpdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OnJlc2V0
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZUVsZW1lbnRCYXNlOjplbnN1cmVBbmltYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
aGFzVmFsaWRBdHRyaWJ1dGVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
QW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDo6dXBkYXRlQW5pbWF0aW9uTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxp
ZEF0dHJpYnV0ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkQW5nbGVBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZEJvb2xlYW5BbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1
ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkTGVuZ3RoQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0QW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRlZE51bWJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVk
TnVtYmVyTGlzdEFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1h
dGVkVmFsdWUpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFBhdGguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRQYXRoQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFBvaW50TGlzdEFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVl
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuaDoKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZh
bHVlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZh
bHVlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6U1ZHQW5pbWF0aW9uQ29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db250cm9sbGVyOjplbnN1cmVBbmlt
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db250cm9sbGVyOjppc0FkZGl0
aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNvbnRyb2xsZXI6Omhh
c1ZhbGlkQXR0cmlidXRlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRp
b25Db250cm9sbGVyOjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZVRvQXRFbmRP
ZkR1cmF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cHJvcGVydHlUeXBlc0FyZUNvbnNp
c3RlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzZXRB
bmltYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBseUNTU1Byb3Bl
cnR5VG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFy
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3Rh
bmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJ
bnN0YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5p
bVZhbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db250cm9sbGVyOjph
cHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db250
cm9sbGVyOjpjbGVhckFuaW1hdGVkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRp
b25Db250cm9sbGVyOjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkNvbnRy
b2xsZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db250
cm9sbGVyQmFzZTo6U1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJvcGVydHlU
eXBlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94
eS5oLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojppc0FkZGl0aXZlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWNjdW11bGF0ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlS2V5VGlt
ZXNGb3JDYWxjTW9kZVBhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1l
bnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRp
b25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
aW9uRWxlbWVudDo6cmVzZXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
aW9uRWxlbWVudDo6cmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNoZWNrSW52YWxpZENT
U0F0dHJpYnV0ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjphZGp1c3RGcm9t
VG9MaXN0VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmFu
aW1hdGVEaXNjcmV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6YW5pbWF0ZUFkZGl0aXZlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmF0dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uRWxlbWVudDo6aGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRvckZhY3RvcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdG9yRmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpzeW5jaHJvbml6ZUFsbEFuaW1hdGVk
U1ZHQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
QW5pbWF0ZWRTVkdBdHRyaWJ1dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVu
dDo6Y29tbWl0UHJvcGVydHlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6
aXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsZW1lbnQ6OmlzQW5pbWF0ZWRBdHRyaWJ1dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxlbWVudDo6Y3JlYXRlQW5pbWF0b3IpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpwcm9wZXJ0eVJlZ2lzdHJ5IGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OlNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpy
ZWdpc3RlckF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50OjpzZXRPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6b3JkZXJYSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6b3JkZXJZSWRlbnRpZmllcik6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpyZWdpc3RlckF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUp
OgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0ZpbHRlckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHTmV3QW5pbWF0aW9uQ29udHJv
bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0aW9uQ29udHJv
bGxlcjo6U1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdO
ZXdBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGVBbmltYXRvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdOZXdBbmltYXRpb25Db250cm9sbGVyOjppc0Rpc2NyZXRlQW5pbWF0b3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBZGRp
dGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdOZXdBbmltYXRpb25Db250cm9sbGVy
OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUZyb21BbmRCeVZh
bHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdOZXdBbmltYXRpb25Db250cm9sbGVyOjpjYWxj
dWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR05ld0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OnJlc2V0QW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6YXBwbHlSZXN1bHRzVG9U
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2xl
YXJBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0aW9uQ29udHJv
bGxlcjo6Y2FsY3VsYXRlRGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdOZXdBbmltYXRpb25D
b250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0F0dHJpYnV0ZU93bmVyUHJveHkuaC4KKyAgICAgICAgKiBzdmcvU1ZHU2V0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVtZW50OjpTVkdTZXRFbGVtZW50KToKKyAgICAg
ICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NNSUxFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSk6IERlbGV0ZWQu
CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FjY2Vzc29yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuaC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FjY2Vzc29yOjpkZXRhY2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQWNjZXNz
b3I6OmlzQW5pbWF0ZWRQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBY2Nl
c3Nvcjo6aXNBbmltYXRlZExlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBY2Nl
c3Nvcjo6bWF0Y2hlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBY2Nlc3Nvcjo6c3lu
Y2hyb25pemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQWNjZXNzb3I6OmNyZWF0ZUFu
aW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FjY2Vzc29yOjphcHBlbmRBbmlt
YXRlZEluc3RhbmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBY2Nlc3Nv
clB0ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRy
aWJ1dGVPd25lclByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpTVkdBY2Nlc3NvclB0cjo6U1ZH
QWNjZXNzb3JQdHIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQWNjZXNzb3JQdHI6OnByb3BlcnR5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FjY2Vzc29yUHRyOjpzaW5nbGV0b24pOgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eTo6
c2V0QmFzZVZhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3Bl
cnR5OjpzZXRCYXNlVmFsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQ
cmltaXRpdmVQcm9wZXJ0eTo6YmFzZVZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZFByaW1pdGl2ZVByb3BlcnR5OjpzZXRBbmltVmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6OmFuaW1WYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eTo6YW5pbVZhbCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5OjpjdXJyZW50VmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eTo6U1ZH
QW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwLgorICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3NvckltcGwuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5oLgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjo6YXBw
ZW5kQW5pbWF0ZWRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3Bl
cnR5QW5pbWF0b3I6OlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvcik6CisgICAgICAgICogc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVPd25lclByb3h5Lmgu
CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQ
cm94eS5jcHAuCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBh
aXJBY2Nlc3Nvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQWNjZXNzb3I6OlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvcjo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3I6OnByb3Bl
cnR5MSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5UGFpckFj
Y2Vzc29yOjpwcm9wZXJ0eTIgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3JJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yOjphcHBlbmRBbmlt
YXRlZEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHlQYWly
QW5pbWF0b3I6OlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3JJbXBsLmg6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9u
OjpTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGlvbkFkZGl0aXZlRnVuY3Rpb246OnByb2dyZXNzKToKKyAgICAgICAgKiBzdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb24uaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb246OnRvQXRF
bmRPZkR1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRp
b25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuaC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkludGVnZXJGdW5jdGlvbjo6cHJvZ3Jlc3MpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkZ1bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRnVuY3Rpb246OmlzRGlzY3JldGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRnVuY3Rpb246OmNhbGN1bGF0ZURpc3RhbmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkZ1bmN0aW9uOjpTVkdBbmltYXRp
b25GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25GdW5jdGlvbjo6YWRk
RnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRvci5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0
ZU93bmVyUHJveHkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0b3I6OmFwcGx5QW5p
bWF0ZWRQcm9wZXJ0eUNoYW5nZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRvcjo6U1ZHQW5pbWF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0b3I6OmlzRGlzY3JldGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0b3I6OnNldEZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRvcjo6c2V0RnJvbUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdG9yOjpzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdG9yOjpjYWxjdWxhdGVEaXN0YW5jZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRvcjo6Y3JlYXRlU2libGluZyk6CisgICAgICAgICogc3ZnL3By
b3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHA6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVz
L1NWR0F0dHJpYnV0ZVJlZ2lzdHJ5Lmg6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHTmV3
QW5pbWF0ZWRQcm9wZXJ0eS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TmV3QW5pbWF0ZWRQcm9wZXJ0eTo6b3duZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TmV3QW5pbWF0ZWRQcm9wZXJ0eTo6Y29tbWl0UHJvcGVydHlDaGFuZ2UpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR05ld0FuaW1hdGVkUHJvcGVydHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdOZXdBbmltYXRlZFByb3BlcnR5Ojppc0F0dGFjaGVkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR05ld0FuaW1hdGVkUHJvcGVydHk6OmRldGFjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdOZXdBbmltYXRlZFByb3BlcnR5Ojpjb250ZXh0RWxlbWVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdOZXdBbmltYXRlZFByb3BlcnR5OjpiYXNlVmFsQXNTdHJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eTo6YW5pbVZh
bEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR05ld0FuaW1hdGVkUHJvcGVy
dHk6OmlzRGlydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0ZWRQcm9w
ZXJ0eTo6c2V0RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0
eTo6c3luY2hyb25pemUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0
eTo6aXNBbmltYXRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0ZWRQ
cm9wZXJ0eTo6c3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTmV3QW5pbWF0
ZWRQcm9wZXJ0eTo6c3RvcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdOZXdBbmlt
YXRlZFByb3BlcnR5OjppbnN0YW5jZVN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR05ld0FuaW1hdGVkUHJvcGVydHk6Omluc3RhbmNlU3RvcEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdOZXdBbmltYXRlZFByb3BlcnR5OjpTVkdOZXdBbmltYXRlZFByb3BlcnR5
KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdOZXdQcm9wZXJ0eS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlPd25lcjo6b3duZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlPd25lcjo6YXR0cmlidXRlQ29udGV4dEVsZW1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlPd25lcjo6Y29tbWl0UHJvcGVydHlD
aGFuZ2UpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5T3duZXJSZWdpc3Ry
eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTo6
U1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5
T3duZXJSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnk6OmVudW1lcmF0ZVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk6OmVudW1lcmF0ZVJlY3Vyc2l2
ZWx5QmFzZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3Ry
eTo6ZmluZEFjY2Vzc29yKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVJl
Z2lzdHJ5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZU93bmVyUHJveHkuY3BwLgorCiAyMDE5LTAzLTEyICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnRDaGFuZ2VPYnNlcnZlcl0gUmVzZXQgc3Rh
dGUgd2hlbiB0b3VjaFN0YXJ0IGRvZXMgbm90IHR1cm4gaW50byBjbGljay4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
aW5kZXggMTJiNjkzYjJlZjFhOWMzOGZkNGIxN2JmYmRmZTI3MmQ5Mjc4MTFlMS4uNTkzNWY2OTA2
Yjg5ZGZkMWQ4MzUzZWEzMDk0M2UyOTdhNTgzNjRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyNjks
OCArMjI2OSw2IEBAIHN2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAogc3ZnL1NWR0FuaW1hdGVkQm9v
bGVhbi5jcHAKIHN2Zy9TVkdBbmltYXRlZENvbG9yLmNwcAogc3ZnL1NWR0FuaW1hdGVkRW51bWVy
YXRpb24uY3BwCi1zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAotc3ZnL1NWR0FuaW1hdGVkSW50
ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAKIHN2Zy9TVkdBbmltYXRlZExlbmd0aC5jcHAKIHN2Zy9T
VkdBbmltYXRlZExlbmd0aExpc3QuY3BwCiBzdmcvU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCkBAIC0y
Mjg0LDYgKzIyODIsOCBAQCBzdmcvU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCiBzdmcvU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0LmNwcAogc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmNwcAogc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCitzdmcvU1ZHQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
K3N2Zy9TVkdBbmltYXRpb25Db250cm9sbGVyQmFzZS5jcHAKIHN2Zy9TVkdDaXJjbGVFbGVtZW50
LmNwcAogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKIHN2Zy9TVkdDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uRWxlbWVudC5jcHAKQEAgLTIzNTIsNiArMjM1Miw3IEBAIHN2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50LmNwcAogc3ZnL1NWR01ldGFkYXRhRWxlbWVu
dC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAorc3ZnL1NWR05ld0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCiBzdmcvU1ZHTnVtYmVyTGlzdFZhbHVlcy5jcHAKIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwCiBzdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCkBAIC0yNDIxLDcgKzI0MjIs
OSBAQCBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAogCiBzdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAogc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAKK3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dG9yLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHAKK3N2Zy9w
cm9wZXJ0aWVzL1NWR05ld0FuaW1hdGVkUHJvcGVydHkuY3BwCiAKIHdvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuY3BwCiB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDEy
NDIzNDViN2VmNTNhMWY2Y2JjZGI5ZTc1ZDg0YWYwYjQ4MWYyMzMuLmY4NGM0NjBmMmVhZTNjYzRk
ZTJkNmM2N2U1NGZhMGIyNDMxMzBjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0Miw3ICsyNDIsNiBAQAogCQkwODE2NjhE
QTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURF
IC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFC
MDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRS
YXJlRGF0YS5oICovOyB9OwogCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKLQkJ
MDgyM0QxNTkxMjdBRDZBQzAwMEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyM0QxNTgxMjdBRDZBQzAw
MEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oICovOyB9OwogCQkwODI1MDkzOTEyOEJENEQ4
MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODI1MDkzODEyOEJENEQ4MDBFMkVEOEUgLyog
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmggKi87IH07CiAJCTA4MkRFNDJEMTI5MjYyMTYwMEQ5
MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MkRFNDJDMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRo
U2VnV2l0aENvbnRleHQuaCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKQEAgLTIxMzQsNyArMjEzMyw2IEBACiAJCTcxRENCNzAy
MTU2ODE5NzYwMDg2MjI3MSAvKiBKU1NWR1pvb21BbmRQYW4uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRENCNzAwMTU2ODE5NzYwMDg2MjI3MSAvKiBK
U1NWR1pvb21BbmRQYW4uaCAqLzsgfTsKIAkJNzFFMjE4M0ExNzM1OUZCODAwNkU2RTREIC8qIFBs
dWdJbnNSZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcxRTIxODM4MTczNTlGQjgwMDZFNkU0RCAvKiBQbHVnSW5zUmVzb3VyY2VzLmggKi87
IH07CiAJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFMkM0MjQy
MUM5MzUxRDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzFFNjIzRDExNTFGNzJBNjAwMzZF
MkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFNjIzQ0YxNTFGNzJBNjAwMzZFMkY0
IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oICovOyB9OwogCQk3MUVBRENE
ODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYgLyogUG9pbnRl
cklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdD
NDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcxRkI5NjdCMTM4M0Q2NDYwMEFDOEE0QyAvKiBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCOTY3QTEzODNENjQ2MDBBQzhBNEMgLyogU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oICovOyB9OwpAQCAtNTU5Nyw3ICs1NTk1LDYg
QEAKIAkJMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdFbGVtZW50UmFyZURhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxRUJGMzgwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHRmlsdGVyQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUVC
RjM5MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMDgyM0QxNTgxMjdBRDZBQzAwMEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZEludGVnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyNTA5MzgxMjhCRDREODAwRTJFRDhF
IC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDgyREU0MkMxMjkyNjIxNjAwRDkyM0RGIC8qIFNWR1BhdGhTZWdXaXRoQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU2VnV2l0aENvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTIwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2ODIsNyArNzY3OSw2IEBACiAJCTQzRDI1OTc2MTND
ODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzRURENjdDMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNB
bHBoYWJldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdEMUI0ODVE
QkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0M0Y2RkQ5NTEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJ
bnRlZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0FuaW1h
dGVkSW50ZWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJDMEUx
QUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
Mjk1NkNBMjE4QTZEMzAwMDgwREI1NCAvKiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTk0NjYsOCArOTQ2Miw2IEBACiAJCTcxRTIxODM4MTczNTlGQjgw
MDZFNkU0RCAvKiBQbHVnSW5zUmVzb3VyY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBmaWxlRW5jb2RpbmcgPSA0OyBu
YW1lID0gUGx1Z0luc1Jlc291cmNlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Q
bHVnSW5zUmVzb3VyY2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CTcxRTIxODM5MTczNTlGQjgwMDZFNkU0RCAvKiBQbHVnSW5zUmVzb3VyY2VzRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgZmlsZUVuY29kaW5nID0gNDsgbmFtZSA9IFBsdWdJbnNSZXNvdXJjZXNEYXRhLmNw
cDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUGx1Z0luc1Jlc291cmNlc0RhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3MUUyQzQyNDIxQzkzNTFE
MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNzFFNjIzQ0UxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9w
dGlvbmFsSW50ZWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3MUU2MjNDRjE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5pbWF0ZWRJbnRlZ2Vy
T3B0aW9uYWxJbnRlZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYgLyogUG9pbnRlcklELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUVGQ0VENjIwMkIzODhDMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBBbmltYXRpb25FZmZlY3QuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZm
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkVmZmVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ3NSw2ICs5NDY5LDM2IEBACiAJCTcx
RUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDky
MkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcxRkI5NjdBMTM4M0Q2NDYwMEFDOEE0QyAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJv
cGVydHlUZWFyT2ZmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1h
dGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIzRjk3QTEyMjM4OThEQjAwN0YwNzlDIC8qIFNWR05ld1Byb3BlcnR5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR05ld1Byb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyM0Y5N0E0MjIzODlBNzgwMDdGMDc5QyAvKiBTVkdQcm9wZXJ0eVJlZ2lzdHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR1Byb3BlcnR5UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIzRjk3QTUyMjM4OUFGODAwN0YwNzlDIC8qIFNWR1Byb3BlcnR5T3duZXJSZWdpc3Ry
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QTYyMjM4OUM4NjAwN0YwNzlDIC8qIFNWR0FuaW1h
dGVkUHJvcGVydHlBY2Nlc3NvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eUFjY2Vzc29ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdB
NzIyMzg5Q0E1MDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjNGOTdBODIyMzg5RUIxMDA3RjA3OUMgLyogU1ZHTmV3QW5pbWF0ZWRQ
cm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdOZXdBbmltYXRlZFByb3BlcnR5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0E5MjIzODlFRTgwMDdGMDc5QyAvKiBTVkdB
bmltYXRlZFByb3BlcnR5SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdBQTIyMzhBNjM2MDA3
RjA3OUMgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGVkUHJvcGVydHlBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjNGOTdBQjIyMzhBNzMyMDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3JJbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0FDMjIzOEE3RDEwMDdGMDc5QyAv
KiBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIzRjk3QUQyMjM4QTg2MzAwN0YwNzlDIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNj
ZXNzb3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNz
b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0FFMjIzOEE4QzAw
MDdGMDc5QyAvKiBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIzRjk3QUYyMjM4Qjk4MzAwN0YwNzlDIC8qIFNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQW5pbWF0b3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQ
YWlyQW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0Iw
MjIzOEM5NTgwMDdGMDc5QyAvKiBTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QjEyMjM4Q0E1OTAwN0YwNzlDIC8qIFNWR1Byb3BlcnR5T3du
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlPd25lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjNGOTdCMjIyMzhEMDQ4MDA3RjA3OUMgLyogU1ZHQWNjZXNzb3JQdHIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQWNjZXNzb3JQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIzRjk3QjMyMjM4RDBBQzAwN0YwNzlDIC8qIFNWR0FjY2Vzc29yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0FjY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
M0Y5N0I0MjIzOEQxMTYwMDdGMDc5QyAvKiBTVkdBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdCNTIyMzhE
MUE2MDA3RjA3OUMgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0I2MjIzOEQyOTMwMDdGMDc5QyAvKiBT
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyM0Y5N0I3MjIzOEQzNDAwMDdGMDc5QyAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QjgyMjM4RDM5NzAwN0YwNzlDIC8qIFNW
R0FuaW1hdGlvbkZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGlvbkZ1bmN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0I5MjIzOEU4MDEwMDdGMDc5
QyAvKiBTVkdBbmltYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdBbmltYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0JCMjIzOEVBMDgwMDdGMDc5QyAv
KiBTVkdOZXdBbmltYXRlZFByb3BlcnR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR05ld0Fu
aW1hdGVkUHJvcGVydHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdC
QzIyMzhFRTA4MDA3RjA3OUMgLyogU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdOZXdBbmltYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QkQyMjM4RUUwODAwN0YwNzlDIC8qIFNWR05ld0FuaW1h
dGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdCRTIyMzk1MTJEMDA3RjA3
OUMgLyogU1ZHQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdB
bmltYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
Rjk3QkYyMjM5NTEyRDAwN0YwNzlDIC8qIFNWR0FuaW1hdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjNGOTdDMDIyMzk2Qjg4MDA3RjA3OUMgLyogU1ZHQW5pbWF0aW9uQ29udHJvbGxl
ckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QzEyMjM5NzcyNTAwN0YwNzlDIC8qIFNW
R0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0FuaW1h
dGlvbkNvbnRyb2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWlu
TWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5N
YXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxNjUsMTcgKzE2MTg5LDM1
IEBACiAJCTA4MUNERkJEMTI2RUNGRTgwMEQyMTVDQSAvKiBwcm9wZXJ0aWVzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjNGOTdCMzIyMzhEMEFDMDA3
RjA3OUMgLyogU1ZHQWNjZXNzb3IuaCAqLywKKwkJCQk3MjNGOTdCMjIyMzhEMDQ4MDA3RjA3OUMg
LyogU1ZHQWNjZXNzb3JQdHIuaCAqLywKIAkJCQk3MUZCOTY3QTEzODNENjQ2MDBBQzhBNEMgLyog
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oICovLAogCQkJCTA4OEEwREZC
MTI2RUYxREIwMDk3OEY3QSAvKiBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLywK
IAkJCQk1NUZBN0ZGQzIxMTBGODEzMDA1QUVGRTcgLyogU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFBy
b3BlcnR5VGVhck9mZi5jcHAgKi8sCiAJCQkJMDg5QThFMDYxMjhEOEIzRDAwRTdBNTM0IC8qIFNW
R0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLywKKwkJCQk3MjNGOTdCMDIy
MzhDOTU4MDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eS5oICovLAogCQkJ
CTgzNkZCQ0VCMTc4QzExN0YwMEIyMUExNSAvKiBTVkdBbmltYXRlZFByb3BlcnR5LmNwcCAqLywK
IAkJCQkwODhBMERGQzEyNkVGMURCMDA5NzhGN0EgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oICov
LAorCQkJCTcyM0Y5N0E3MjIzODlDQTUwMDdGMDc5QyAvKiBTVkdBbmltYXRlZFByb3BlcnR5QWNj
ZXNzb3IuaCAqLywKKwkJCQk3MjNGOTdBNjIyMzg5Qzg2MDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eUFjY2Vzc29ySW1wbC5oICovLAorCQkJCTcyM0Y5N0FBMjIzOEE2MzYwMDdGMDc5QyAv
KiBTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3IuaCAqLywKKwkJCQk3MjNGOTdBQjIyMzhBNzMy
MDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovLAogCQkJCTA4
OEEwREZEMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5RGVzY3JpcHRpb24u
aCAqLywKKwkJCQk3MjNGOTdBOTIyMzg5RUU4MDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0
eUltcGwuaCAqLywKKwkJCQk3MjNGOTdBQzIyMzhBN0QxMDA3RjA3OUMgLyogU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVBhaXJBY2Nlc3Nvci5oICovLAorCQkJCTcyM0Y5N0FEMjIzOEE4NjMwMDdGMDc5QyAv
KiBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29ySW1wbC5oICovLAorCQkJCTcyM0Y5N0FF
MjIzOEE4QzAwMDdGMDc5QyAvKiBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yLmggKi8s
CisJCQkJNzIzRjk3QUYyMjM4Qjk4MzAwN0YwNzlDIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWly
QW5pbWF0b3JJbXBsLmggKi8sCiAJCQkJMDg4QTBERkYxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR0Fu
aW1hdGVkUHJvcGVydHlUZWFyT2ZmLmggKi8sCiAJCQkJNTVGQTdGRkUyMTExMEU2RTAwNUFFRkU3
IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlUeXBlLmggKi8sCiAJCQkJMDg1MjVFNjIxMjc4QzAwMTAw
QTg0Nzc4IC8qIFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmLmggKi8sCiAJCQkJMDg1
QTE1OTIxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5
VGVhck9mZi5oICovLAorCQkJCTcyM0Y5N0I3MjIzOEQzNDAwMDdGMDc5QyAvKiBTVkdBbmltYXRp
b25BZGRpdGl2ZUZ1bmN0aW9uLmggKi8sCisJCQkJNzIzRjk3QjYyMjM4RDI5MzAwN0YwNzlDIC8q
IFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbi5oICovLAorCQkJCTcyM0Y5N0I1MjIz
OEQxQTYwMDdGMDc5QyAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgg
Ki8sCisJCQkJNzIzRjk3QjgyMjM4RDM5NzAwN0YwNzlDIC8qIFNWR0FuaW1hdGlvbkZ1bmN0aW9u
LmggKi8sCisJCQkJNzIzRjk3QjkyMjM4RTgwMTAwN0YwNzlDIC8qIFNWR0FuaW1hdG9yLmNwcCAq
LywKKwkJCQk3MjNGOTdCNDIyMzhEMTE2MDA3RjA3OUMgLyogU1ZHQW5pbWF0b3IuaCAqLywKIAkJ
CQk1NUZBN0ZFRjIxMEZBMzg2MDA1QUVGRTcgLyogU1ZHQXR0cmlidXRlLmggKi8sCiAJCQkJNTVG
QTdGRjQyMTBGQjY4ODAwNUFFRkU3IC8qIFNWR0F0dHJpYnV0ZUFjY2Vzc29yLmggKi8sCiAJCQkJ
N0EzRUJFQUMyMUJGMDkyMTAwMEQwNDNEIC8qIFNWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwICov
LApAQCAtMTYxODUsNyArMTYyMjcsMTMgQEAKIAkJCQkwODEwNzY0MzEyODI4NTU2MDA3QzYzQkEg
LyogU1ZHTGlzdFByb3BlcnR5LmggKi8sCiAJCQkJMDg4QTBFMDAxMjZFRjFEQjAwOTc4RjdBIC8q
IFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLywKIAkJCQkwOENBM0Q0MzEyODk0QTM4MDBGRkYy
NjAgLyogU1ZHTWF0cml4VGVhck9mZi5oICovLAorCQkJCTcyM0Y5N0JCMjIzOEVBMDgwMDdGMDc5
QyAvKiBTVkdOZXdBbmltYXRlZFByb3BlcnR5LmNwcCAqLywKKwkJCQk3MjNGOTdBODIyMzg5RUIx
MDA3RjA3OUMgLyogU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eS5oICovLAorCQkJCTcyM0Y5N0ExMjIz
ODk4REIwMDdGMDc5QyAvKiBTVkdOZXdQcm9wZXJ0eS5oICovLAogCQkJCTA4OEEwRTAxMTI2RUYx
REIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eS5oICovLAorCQkJCTcyM0Y5N0IxMjIzOENBNTkwMDdG
MDc5QyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi8sCisJCQkJNzIzRjk3QTUyMjM4OUFGODAwN0Yw
NzlDIC8qIFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeS5oICovLAorCQkJCTcyM0Y5N0E0MjIzODlB
NzgwMDdGMDc5QyAvKiBTVkdQcm9wZXJ0eVJlZ2lzdHJ5LmggKi8sCiAJCQkJMDg4QTBFMDIxMjZF
RjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVhck9mZi5oICovLAogCQkJCTA4OEEwRTAzMTI2
RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eVRyYWl0cy5oICovLAogCQkJCTA4ODBGNzBEMTI4
MkI0NkQwMDk0ODUwNSAvKiBTVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLmggKi8sCkBAIC0y
NDA0NSwxMSArMjQwOTMsNyBAQAogCQkJCTcxQ0M3QTFGMTUyQTBCRkUwMDlFRUFGOSAvKiBTVkdB
bmltYXRlZEVudW1lcmF0aW9uLmNwcCAqLywKIAkJCQkwOEQ0NkNFMjEyN0FENUZDMDA4OTY5NEIg
LyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oICovLAogCQkJCUIyMjI3N0U4MEQwMEJGMUYwMDcx
Qjc4MiAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmlkbCAqLywKLQkJCQk0M0Y2RkQ5NTEzQkNE
MEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCAqLywKLQkJCQkwODIzRDE1ODEy
N0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggKi8sCiAJCQkJQjIyMjc3RTkw
RDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVkSW50ZWdlci5pZGwgKi8sCi0JCQkJNzFFNjIz
Q0UxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5j
cHAgKi8sCi0JCQkJNzFFNjIzQ0YxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlci5oICovLAogCQkJCTQzODE3NjNBMTNBNjk3RDQwMDdEMTE4NyAvKiBT
VkdBbmltYXRlZExlbmd0aC5jcHAgKi8sCiAJCQkJMDg5MDIxQTgxMjZFRjVERTAwOTJENUVBIC8q
IFNWR0FuaW1hdGVkTGVuZ3RoLmggKi8sCiAJCQkJQjIyMjc3RUEwRDAwQkYxRjAwNzFCNzgyIC8q
IFNWR0FuaW1hdGVkTGVuZ3RoLmlkbCAqLywKQEAgLTI0MDk0LDYgKzI0MTM4LDEwIEBACiAJCQkJ
QjIyMjc3RkUwRDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNw
cCAqLywKIAkJCQlCMjIyNzdGRjBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzgwMDBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuaWRsICovLAorCQkJCTcyM0Y5N0JFMjIzOTUxMkQwMDdGMDc5QyAv
KiBTVkdBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKKwkJCQk3MjNGOTdCRjIyMzk1MTJEMDA3
RjA3OUMgLyogU1ZHQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAorCQkJCTcyM0Y5N0MxMjIzOTc3
MjUwMDdGMDc5QyAvKiBTVkdBbmltYXRpb25Db250cm9sbGVyQmFzZS5jcHAgKi8sCisJCQkJNzIz
Rjk3QzAyMjM5NkI4ODAwN0YwNzlDIC8qIFNWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmggKi8s
CiAJCQkJQjIyMjc4MDEwRDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuY3Bw
ICovLAogCQkJCUIyMjI3ODAyMEQwMEJGMUYwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50
LmggKi8sCiAJCQkJQjIyMjc4MDMwRDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1l
bnQuaWRsICovLApAQCAtMjQzMDQsNiArMjQzNTIsOCBAQAogCQkJCUIyMjI3OEI3MEQwMEJGMjAw
MDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQuY3BwICovLAogCQkJCUIyMjI3OEI4MEQwMEJGMjAw
MDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQuaCAqLywKIAkJCQk0NEQ4REE5ODEzOTU0NUJFMDAz
MzdCNzUgLyogU1ZHTVBhdGhFbGVtZW50LmlkbCAqLywKKwkJCQk3MjNGOTdCQzIyMzhFRTA4MDA3
RjA3OUMgLyogU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJNzIzRjk3QkQy
MjM4RUUwODAwN0YwNzlDIC8qIFNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk3
Q0U1OEQ0RjFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggKi8sCiAJCQkJQjIyMjc4Qjkw
RDAwQkYyMDAwNzFCNzgyIC8qIFNWR051bWJlci5pZGwgKi8sCiAJCQkJQjIyMjc4QkIwRDAwQkYy
MDAwNzFCNzgyIC8qIFNWR051bWJlckxpc3QuaCAqLywKQEAgLTMxODMwLDggKzMxODgwLDYgQEAK
IAkJCQk0M0E2MjVGODEzQjMzMDQwMDBBQzk0QjggLyogU1ZHQW5pbWF0ZWRDb2xvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDhENDZDRTMxMjdBRDVGQzAwODk2OTRCIC8qIFNWR0FuaW1hdGVkRW51
bWVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRkI5NjdCMTM4M0Q2NDYwMEFDOEE0QyAv
KiBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwODIzRDE1OTEyN0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3MUU2MjNEMTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5pbWF0ZWRJ
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODkwMjFBOTEyNkVG
NURFMDA5MkQ1RUEgLyogU1ZHQW5pbWF0ZWRMZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
OTAyMUFEMTI2RUY1RTkwMDkyRDVFQSAvKiBTVkdBbmltYXRlZExlbmd0aExpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4OEEwRTA0MTI2RUYxREIwMDk3OEY3QSAvKiBTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA1YzkyY2IyOGE5NmZlMzc2
ZTA5OTQwNjc5OTdhZDg0MjkzMTE2ZTIzLi5jZDZhNzY5NjhkOTIwOGY4MDljY2U5YTJiYTNiYzBk
YTNjMjJjNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQpAQCAtMjQ5OSw4ICsyNDk5LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1l
LmgifSA9IDEgaWYgJGhhc1BhcmVudCAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3R9OwotCiAgICAgJGhlYWRlckluY2x1ZGVzeyJTVkdF
bGVtZW50LmgifSA9IDEgaWYgJGNsYXNzTmFtZSA9fiAvXkpTU1ZHLzsKIAogICAgIG15ICRpbXBs
VHlwZSA9IEdldEltcGxDbGFzc05hbWUoJGludGVyZmFjZSk7CkBAIC0yNTEyLDggKzI1MTAsOSBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3Bh
Y2UgV2ViQ29yZSB7XG5cbiIpOwogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1h
dGVkVHlwZSgkaW50ZXJmYWNlLT50eXBlKSkgewotICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRp
bnRlcmZhY2VOYW1lLmgifSA9IDE7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUltcGwuaCJ9ID0gMTsKICAgICB9IGVsc2UgeworICAgICAgICAkaGVhZGVySW5j
bHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDEgaWYgJGhhc1BhcmVudCAmJiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3R9OwogICAgICAg
ICAjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvcndhcmQgZGVjbGFyYXRpb24KICAgICAgICAgaWYg
KElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBBZGRDbGFzc0Zv
cndhcmRJZk5lZWRlZCgkaW50ZXJmYWNlLT50eXBlKTsKQEAgLTI1NjMsNyArMjU2Miw5IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gcHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4i
KTsgIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFkZEluY2x1ZGVzRm9ySW1wbGVtZW50YXRpb25U
eXBlSW5IZWFkZXIoJGltcGxUeXBlKTsKKyAgICAgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+SXNT
VkdBbmltYXRlZFR5cGUoJGludGVyZmFjZS0+dHlwZSkpIHsKKyAgICAgICAgICAgIEFkZEluY2x1
ZGVzRm9ySW1wbGVtZW50YXRpb25UeXBlSW5IZWFkZXIoJGltcGxUeXBlKTsKKyAgICAgICAgfQog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVh
dGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPCRpbXBsVHlwZT4mJiBpbXBsKVxuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAge1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAg
ICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNz
TmFtZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSAkY2xhc3NOYW1lKHN0cnVjdHVyZSwgKmds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7XG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKaW5kZXggNmZkMWJjMTA5NzA0NGNiNzhlOWE3ZDBlMGZj
NTdlOGM0NThjM2E5Mi4uY2ZiNTgwMTA1YTAzMGYxM2JlYjE1NGUzYzNlMDU5YzVmYjczOWJlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKQEAgLTI0
LDE0ICsyNCwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVF
bGVtZW50QmFzZS5oIgogCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUg
IkNTU1Byb3BlcnR5UGFyc2VyLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgotI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdG9yRmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIlNWR0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNp
bmNsdWRlICJTVkdOZXdBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMzgwICszNywxMDMg
QEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFNWR0FuaW1hdGVFbGVtZW50QmFzZSk7CiAK
IFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IFNWR0FuaW1hdGlv
bkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2FuaW1hdGVkUHJvcGVydHlUeXBl
KEFuaW1hdGVkU3RyaW5nKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjphbmlt
YXRlVGFnKSB8fCBoYXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpIHx8IGhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmFuaW1hdGVDb2xvclRhZykgfHwgaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRy
YW5zZm9ybVRhZykpOwogfQogCiBTVkdBbmltYXRlRWxlbWVudEJhc2U6On5TVkdBbmltYXRlRWxl
bWVudEJhc2UoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNW
YWxpZEF0dHJpYnV0ZVR5cGUoKQorU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UmIFNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6ZW5zdXJlQ29udHJvbGxlcigpCiB7Ci0gICAgaWYgKCF0aGlzLT50YXJn
ZXRFbGVtZW50KCkpCisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQoKSk7CisgICAgQVNTRVJUKCFo
YXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpKTsKKyAgICAKKyAgICBpZiAoIW1fY29udHJvbGxl
cikgeworICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc0FuaW1hdGVkUHJvcGVydHlBdHRy
aWJ1dGUoYXR0cmlidXRlTmFtZSgpKSkKKyAgICAgICAgICAgIG1fY29udHJvbGxlciA9IHN0ZDo6
bWFrZV91bmlxdWU8U1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMsICp0YXJnZXRFbGVt
ZW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRyb2xsZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNWR0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzLCAqdGFyZ2V0RWxlbWVudCgp
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICptX2NvbnRyb2xsZXI7Cit9CisKK2Jvb2wgU1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAoreworICAg
IGlmICghdGFyZ2V0RWxlbWVudCgpIHx8IGhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2FuaW1hdGVkUHJvcGVydHlUeXBl
ICE9IEFuaW1hdGVkVW5rbm93biAmJiAhaGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoKTsKKyAg
ICBpZiAoZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKnRhcmdldEVsZW1lbnQoKSkgIT0g
QW5pbWF0ZWRVbmtub3duKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiB0YXJn
ZXRFbGVtZW50KCktPmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKCkp
OwogfQogCiBBbmltYXRlZFByb3BlcnR5VHlwZSBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmRldGVy
bWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQpIGNvbnN0
CiB7Ci0gICAgYXV0byBwcm9wZXJ0eVR5cGVzID0gdGFyZ2V0RWxlbWVudC5hbmltYXRlZFByb3Bl
cnR5VHlwZXNGb3JBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSgpKTsKLSAgICBpZiAocHJvcGVydHlU
eXBlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBBbmltYXRlZFVua25vd247Ci0KLSAgICBB
U1NFUlQocHJvcGVydHlUeXBlcy5zaXplKCkgPD0gMik7Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eVR5
cGUgdHlwZSA9IHByb3BlcnR5VHlwZXNbMF07Ci0gICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmFuaW1hdGVDb2xvclRhZykgJiYgdHlwZSAhPSBBbmltYXRlZENvbG9yKQotICAgICAgICByZXR1
cm4gQW5pbWF0ZWRVbmtub3duOwotCi0gICAgLy8gQW5pbWF0aW9ucyBvZiB0cmFuc2Zvcm0gbGlz
dHMgYXJlIG5vdCBhbGxvd2VkIGZvciA8YW5pbWF0ZT4gb3IgPHNldD4KLSAgICAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcvYW5pbWF0ZS5odG1sI0FuaW1hdGlvbkF0dHJpYnV0ZXNBbmRQcm9w
ZXJ0aWVzCi0gICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICYmICFoYXNUYWdO
YW1lKFNWR05hbWVzOjphbmltYXRlVHJhbnNmb3JtVGFnKSkKLSAgICAgICAgcmV0dXJuIEFuaW1h
dGVkVW5rbm93bjsKLQotICAgIC8vIEZvcnR1bmF0ZWx5IHRoZXJlJ3MganVzdCBvbmUgc3BlY2lh
bCBjYXNlIG5lZWRlZCBoZXJlOiBTVkdNYXJrZXJFbGVtZW50cyBvcmllbnRBdHRyLCB3aGljaAot
ICAgIC8vIGNvcnJlc3BvbmRzIHRvIFNWR0FuaW1hdGVkQW5nbGUgb3JpZW50QW5nbGUgYW5kIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gb3JpZW50VHlwZS4gV2UgaGF2ZSB0bwotICAgIC8vIGZpZ3Vy
ZSBvdXQgd2hvc2UgdmFsdWUgdG8gY2hhbmdlIGhlcmUuCi0gICAgaWYgKHRhcmdldEVsZW1lbnQu
aGFzVGFnTmFtZShTVkdOYW1lczo6bWFya2VyVGFnKSAmJiB0eXBlID09IEFuaW1hdGVkQW5nbGUp
IHsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5VHlwZXMuc2l6ZSgpID09IDIpOwotICAgICAgICBB
U1NFUlQocHJvcGVydHlUeXBlc1swXSA9PSBBbmltYXRlZEFuZ2xlKTsKLSAgICAgICAgQVNTRVJU
KHByb3BlcnR5VHlwZXNbMV0gPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbik7Ci0gICAgfSBlbHNlIGlm
IChwcm9wZXJ0eVR5cGVzLnNpemUoKSA9PSAyKQotICAgICAgICBBU1NFUlQocHJvcGVydHlUeXBl
c1swXSA9PSBwcm9wZXJ0eVR5cGVzWzFdKTsKLQotICAgIHJldHVybiB0eXBlOworICAgIHJldHVy
biBTVkdBbmltYXRpb25Db250cm9sbGVyQmFzZTo6ZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5
cGUoKnRoaXMsIHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSk7CiB9CiAKIHZvaWQgU1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRh
Z2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkK
IHsKLSAgICBBU1NFUlQocmVzdWx0RWxlbWVudCk7Ci0gICAgYXV0byB0YXJnZXRFbGVtZW50ID0g
bWFrZVJlZlB0cih0aGlzLT50YXJnZXRFbGVtZW50KCkpOwotICAgIGlmICghdGFyZ2V0RWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBz
aG91bGRBcHBseSA9IHNob3VsZEFwcGx5QW5pbWF0aW9uKHRhcmdldEVsZW1lbnQuZ2V0KCksIGF0
dHJpYnV0ZU5hbWUpOwotICAgIAotICAgIGlmIChzaG91bGRBcHBseSA9PSBEb250QXBwbHlBbmlt
YXRpb24pCisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IGRldGVybWluZUFuaW1hdGVkUHJvcGVy
dHlUeXBlKCp0YXJnZXRFbGVtZW50KSk7Ci0KLSAgICBBU1NFUlQocGVyY2VudGFnZSA+PSAwICYm
IHBlcmNlbnRhZ2UgPD0gMSk7Ci0gICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0g
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0IHx8IGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFu
c2Zvcm1UYWcpKTsKLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSAhPSBBbmltYXRl
ZFVua25vd24pOwotICAgIEFTU0VSVChtX2FuaW1hdG9yKTsKLSAgICBBU1NFUlQobV9hbmltYXRv
ci0+dHlwZSgpID09IG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOwotICAgIEFTU0VSVChtX2Zyb21U
eXBlKTsKLSAgICBBU1NFUlQobV9mcm9tVHlwZS0+dHlwZSgpID09IG1fYW5pbWF0ZWRQcm9wZXJ0
eVR5cGUpOwotICAgIEFTU0VSVChtX3RvVHlwZSk7Ci0KLSAgICBpZiAoc2hvdWxkQXBwbHkgPT0g
QXBwbHlYTUxBbmltYXRpb24gfHwgc2hvdWxkQXBwbHkgPT0gQXBwbHlYTUxhbmRDU1NBbmltYXRp
b24pIHsKLSAgICAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCi0g
ICAgICAgIGlmIChtX2FuaW1hdG9yLT5maW5kQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yQXR0cmlidXRl
TmFtZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNWR0FuaW1hdGVFbGVtZW50QmFzZSYgcmVzdWx0QW5p
bWF0aW9uRWxlbWVudCA9IGRvd25jYXN0PFNWR0FuaW1hdGVFbGVtZW50QmFzZT4oKnJlc3VsdEVs
ZW1lbnQpOwotICAgIEFTU0VSVChyZXN1bHRBbmltYXRpb25FbGVtZW50Lm1fYW5pbWF0ZWRUeXBl
KTsKLSAgICBBU1NFUlQocmVzdWx0QW5pbWF0aW9uRWxlbWVudC5tX2FuaW1hdGVkUHJvcGVydHlU
eXBlID09IG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOwotCi0gICAgaWYgKGhhc1RhZ05hbWUoU1ZH
TmFtZXM6OnNldFRhZykpCi0gICAgICAgIHBlcmNlbnRhZ2UgPSAxOwotCi0gICAgaWYgKGNhbGNN
b2RlKCkgPT0gQ2FsY01vZGU6OkRpc2NyZXRlKQotICAgICAgICBwZXJjZW50YWdlID0gcGVyY2Vu
dGFnZSA8IDAuNSA/IDAgOiAxOwotCi0gICAgLy8gVGFyZ2V0IGVsZW1lbnQgbWlnaHQgaGF2ZSBj
aGFuZ2VkLgotICAgIG1fYW5pbWF0b3ItPnNldENvbnRleHRFbGVtZW50KHRhcmdldEVsZW1lbnQu
Z2V0KCkpOwotCi0gICAgLy8gQmUgc3VyZSB0byBkZXRhY2ggbGlzdCB3cmFwcGVycyBiZWZvcmUg
d2UgbW9kZml5IHRoZWlyIHVuZGVybHlpbmcgdmFsdWUuIElmIHdlJ2QgZG8KLSAgICAvLyBpZiBh
ZnRlciBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKCkgcmFuIHRoZSBjYWNoZWQgcG9pbnRlcnMgaW4g
dGhlIGxpc3QgcHJvcGVyeSB0ZWFyCi0gICAgLy8gb2ZmcyB3b3VsZCBwb2ludCBub3doZXJlLCBh
bmQgd2UgY291bGRuJ3QgY3JlYXRlIGNvcGllcyBvZiB0aG9zZSB2YWx1ZXMgYW55bW9yZSwKLSAg
ICAvLyB3aGlsZSBkZXRhY2hpbmcuIFRoaXMgaXMgY292ZXJlZCBieSBhc3NlcnRpb25zLCBtb3Zp
bmcgdGhpcyBkb3duIHdvdWxkIGZpcmUgdGhlbS4KLSAgICBpZiAoIW1fYW5pbWF0ZWRQcm9wZXJ0
aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9hbmltYXRvci0+YW5pbVZhbFdpbGxDaGFuZ2UobV9h
bmltYXRlZFByb3BlcnRpZXMpOwotCi0gICAgLy8gVmFsdWVzLWFuaW1hdGlvbiBhY2N1bXVsYXRl
cyB1c2luZyB0aGUgbGFzdCB2YWx1ZXMgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgZW5kIG9m
IGR1cmF0aW9uIHRpbWUuCi0gICAgU1ZHQW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlvblR5
cGUgPSBtX3RvQXRFbmRPZkR1cmF0aW9uVHlwZSA/IG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlLmdl
dCgpIDogbV90b1R5cGUuZ2V0KCk7Ci0gICAgbV9hbmltYXRvci0+Y2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZShwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgbV9mcm9tVHlwZS5nZXQoKSwgbV90b1R5cGUu
Z2V0KCksIHRvQXRFbmRPZkR1cmF0aW9uVHlwZSwgcmVzdWx0QW5pbWF0aW9uRWxlbWVudC5tX2Fu
aW1hdGVkVHlwZS5nZXQoKSk7CisgICAgZW5zdXJlQ29udHJvbGxlcigpLmNhbGN1bGF0ZUFuaW1h
dGVkVmFsdWUocGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIHJlc3VsdEVsZW1lbnQpOwogfQogCiBi
b29sIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1
ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIGlmICh0b0F0
RW5kT2ZEdXJhdGlvblN0cmluZy5pc0VtcHR5KCkpCisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3RvQXRFbmRPZkR1cmF0aW9uVHlwZSA9IGVu
c3VyZUFuaW1hdG9yKCktPmNvbnN0cnVjdEZyb21TdHJpbmcodG9BdEVuZE9mRHVyYXRpb25TdHJp
bmcpOwotICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGVuc3VyZUNvbnRyb2xsZXIoKS5j
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKTsK
IH0KIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVl
cyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCiB7Ci0g
ICAgaWYgKCF0aGlzLT50YXJnZXRFbGVtZW50KCkpCisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGRldGVybWluZVByb3BlcnR5VmFsdWVUeXBl
cyhmcm9tU3RyaW5nLCB0b1N0cmluZyk7Ci0gICAgZW5zdXJlQW5pbWF0b3IoKS0+Y2FsY3VsYXRl
RnJvbUFuZFRvVmFsdWVzKG1fZnJvbVR5cGUsIG1fdG9UeXBlLCBmcm9tU3RyaW5nLCB0b1N0cmlu
Zyk7Ci0gICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gbV9hbmltYXRvci0+dHlw
ZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZW5zdXJlQ29udHJvbGxlcigpLmNh
bGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhmcm9tU3RyaW5nLCB0b1N0cmluZyk7CiB9CiAKIGJvb2wg
U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQogewotICAgIGlmICghdGhp
cy0+dGFyZ2V0RWxlbWVudCgpKQorICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEJ5QW5pbWF0aW9uICYm
ICFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIGZyb20tYnkg
YW5pbWF0aW9uIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhdHRyaWJ1dGVzIHRoYXQgc3VwcG9ydCBh
ZGRpdGlvbiAoZS5nLiBtb3N0IG51bWVyaWMgYXR0cmlidXRlcykuCi0gICAgaWYgKGFuaW1hdGlv
bk1vZGUoKSA9PSBGcm9tQnlBbmltYXRpb24gJiYgIWFuaW1hdGVkUHJvcGVydHlUeXBlU3VwcG9y
dHNBZGRpdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoIWhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnNldFRhZykpOwotCi0gICAgZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5
cGVzKGZyb21TdHJpbmcsIGJ5U3RyaW5nKTsKLSAgICBlbnN1cmVBbmltYXRvcigpLT5jYWxjdWxh
dGVGcm9tQW5kQnlWYWx1ZXMobV9mcm9tVHlwZSwgbV90b1R5cGUsIGZyb21TdHJpbmcsIGJ5U3Ry
aW5nKTsKLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBtX2FuaW1hdG9yLT50
eXBlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBlbnN1cmVDb250cm9sbGVyKCku
Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGZyb21TdHJpbmcsIGJ5U3RyaW5nKTsKIH0KIAotI2lm
bmRlZiBOREVCVUcKLXN0YXRpYyBpbmxpbmUgYm9vbCBwcm9wZXJ0eVR5cGVzQXJlQ29uc2lzdGVu
dChBbmltYXRlZFByb3BlcnR5VHlwZSBleHBlY3RlZFByb3BlcnR5VHlwZSwgY29uc3QgU1ZHRWxl
bWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQotewotICAgIGZvciAoYXV0
byYgdHlwZSA6IGFuaW1hdGVkVHlwZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6
IHR5cGUucHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKGV4cGVjdGVkUHJvcGVydHlUeXBl
ICE9IHByb3BlcnR5LT5hbmltYXRlZFByb3BlcnR5VHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgb25seSBhbGxvd2VkIGluY29uc2lzdGVuY3kuIFNWR0FuaW1hdGVkQW5n
bGVBbmltYXRvciBoYW5kbGVzIGJvdGggU1ZHQW5pbWF0ZWRBbmdsZSAmIFNWR0FuaW1hdGVkRW51
bWVyYXRpb24gZm9yIG1hcmtlcnMgb3JpZW50IGF0dHJpYnV0ZS4KLSAgICAgICAgICAgICAgICBp
ZiAoZXhwZWN0ZWRQcm9wZXJ0eVR5cGUgPT0gQW5pbWF0ZWRBbmdsZSAmJiBwcm9wZXJ0eS0+YW5p
bWF0ZWRQcm9wZXJ0eVR5cGUoKSA9PSBBbmltYXRlZEVudW1lcmF0aW9uKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRp
ZgotCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRlZFR5cGUoKQogewot
ICAgIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBhbmltYXRvciA9IGVuc3VyZUFuaW1hdG9yKCk7
Ci0gICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gYW5pbWF0b3ItPnR5cGUoKSk7
Ci0KLSAgICBhdXRvIHRhcmdldEVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPnRhcmdldEVsZW1l
bnQoKSk7Ci0gICAgaWYgKCF0YXJnZXRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgp
OwotICAgIFNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gc2hvdWxkQXBwbHlBbmlt
YXRpb24odGFyZ2V0RWxlbWVudC5nZXQoKSwgYXR0cmlidXRlTmFtZSk7Ci0KLSAgICBpZiAoc2hv
dWxkQXBwbHkgPT0gRG9udEFwcGx5QW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlYTUxBbmltYXRpb24gfHwgc2hvdWxkQXBwbHkgPT0gQXBw
bHlYTUxhbmRDU1NBbmltYXRpb24pIHsKLSAgICAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1h
dGlvbiBjb2RlLXBhdGguCi0gICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0aWVzID0gYW5pbWF0b3It
PmZpbmRBbmltYXRlZFByb3BlcnRpZXNGb3JBdHRyaWJ1dGVOYW1lKCp0YXJnZXRFbGVtZW50LCBh
dHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQocHJvcGVydHlUeXBlc0Fy
ZUNvbnNpc3RlbnQobV9hbmltYXRlZFByb3BlcnR5VHlwZSwgbV9hbmltYXRlZFByb3BlcnRpZXMp
KTsKLSAgICAgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKLSAgICAgICAgICAgIG1fYW5pbWF0ZWRU
eXBlID0gYW5pbWF0b3ItPnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihtX2FuaW1hdGVkUHJvcGVydGll
cyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYW5pbWF0b3ItPnJlc2V0QW5pbVZhbFRv
QmFzZVZhbChtX2FuaW1hdGVkUHJvcGVydGllcywgKm1fYW5pbWF0ZWRUeXBlKTsKLSAgICAgICAg
ICAgIGFuaW1hdG9yLT5hbmltVmFsRGlkQ2hhbmdlKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ1NTIHByb3BlcnRpZXMg
YW5pbWF0aW9uIGNvZGUtcGF0aC4KLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnRpZXMuaXNF
bXB0eSgpKTsKLSAgICBTdHJpbmcgYmFzZVZhbHVlOwotCi0gICAgaWYgKHNob3VsZEFwcGx5ID09
IEFwcGx5Q1NTQW5pbWF0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChTVkdBbmltYXRpb25FbGVtZW50
Ojppc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQuZ2V0KCksIGF0dHJp
YnV0ZU5hbWUpKTsKLSAgICAgICAgY29tcHV0ZUNTU1Byb3BlcnR5VmFsdWUodGFyZ2V0RWxlbWVu
dC5nZXQoKSwgY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKSwgYmFzZVZh
bHVlKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fYW5pbWF0ZWRUeXBlKQotICAgICAgICBtX2FuaW1h
dGVkVHlwZSA9IGFuaW1hdG9yLT5jb25zdHJ1Y3RGcm9tU3RyaW5nKGJhc2VWYWx1ZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2FuaW1hdGVkVHlwZS0+c2V0VmFsdWVBc1N0cmluZyhhdHRyaWJ1dGVO
YW1lLCBiYXNlVmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0
eVRvVGFyZ2V0KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIENTU1Byb3BlcnR5SUQgaWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRp
b25IYXNCZWd1bik7Ci0KLSAgICBpZiAoIXRhcmdldEVsZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlM
U3R5bGVQcm9wZXJ0aWVzKCkuc2V0UHJvcGVydHkoaWQsIHZhbHVlLCBmYWxzZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHRhcmdldEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQoU1ZHRWxlbWVudCYg
dGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBBU1NFUlQoIXRhcmdldEVs
ZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKLSAgICB0YXJnZXRFbGVtZW50LmVuc3VyZUFuaW1h
dGVkU01JTFN0eWxlUHJvcGVydGllcygpLnJlbW92ZVByb3BlcnR5KGlkKTsKLSAgICB0YXJnZXRF
bGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlD
U1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWVB
c1N0cmluZykKLXsKLSAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90
aCBpc0Nvbm5lY3RlZCBhbmQgIXBhcmVudE5vZGU/Ci0gICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
YW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5pc0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVt
ZW50LnBhcmVudE5vZGUoKSkKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQ1NTUHJvcGVydHlJRCBpZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFt
ZS5sb2NhbE5hbWUoKSk7Ci0KLSAgICBTVkdFbGVtZW50OjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIg
YmxvY2tlcih0YXJnZXRFbGVtZW50KTsKLSAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQodGFy
Z2V0RWxlbWVudCwgaWQsIHZhbHVlQXNTdHJpbmcpOwotCi0gICAgLy8gSWYgdGhlIHRhcmdldCBl
bGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJpbmcg
dGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KLSAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDog
dGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKLSAgICAgICAgYXBwbHlDU1NQcm9wZXJ0eVRvVGFy
Z2V0KCppbnN0YW5jZSwgaWQsIHZhbHVlQXNTdHJpbmcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRh
cmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAg
Ly8gRklYTUU6IERvIHdlIHJlYWxseSBuZWVkIHRvIGNoZWNrIGJvdGggaXNDb25uZWN0ZWQgYW5k
ICFwYXJlbnROb2RlPwotICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwgIXRh
cmdldEVsZW1lbnQuaXNDb25uZWN0ZWQoKSB8fCAhdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENTU1Byb3BlcnR5SUQgaWQgPSBjc3NQcm9wZXJ0eUlE
KGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpOwotCi0gICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VV
cGRhdGVCbG9ja2VyIGJsb2NrZXIodGFyZ2V0RWxlbWVudCk7Ci0gICAgcmVtb3ZlQ1NTUHJvcGVy
dHlGcm9tVGFyZ2V0KHRhcmdldEVsZW1lbnQsIGlkKTsKLQotICAgIC8vIElmIHRoZSB0YXJnZXQg
ZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5n
IHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCi0gICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6
IHRhcmdldEVsZW1lbnQuaW5zdGFuY2VzKCkpCi0gICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJv
bVRhcmdldCgqaW5zdGFuY2UsIGlkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRh
cmdldEFib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQotewotICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVu
dC5tX2RlbGV0aW9uSGFzQmVndW4pOwotICAgIHRhcmdldEVsZW1lbnQuc3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyaWJ1dGVOYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdl
dEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQotewotICAgIGlmIChhdHRyaWJ1
dGVOYW1lID09IGFueVFOYW1lKCkgfHwgIXRhcmdldEVsZW1lbnQuaXNDb25uZWN0ZWQoKSB8fCAh
dGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNWR0Vs
ZW1lbnQ6Okluc3RhbmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKHRhcmdldEVsZW1lbnQpOwotICAg
IG5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lKTsKLQotICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRh
dGUgdGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVp
bHQuCi0gICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRhcmdldEVsZW1lbnQuaW5zdGFuY2VzKCkp
Ci0gICAgICAgIG5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSgqaW5zdGFuY2UsIGF0dHJp
YnV0ZU5hbWUpOworICAgIGVuc3VyZUNvbnRyb2xsZXIoKS5yZXNldEFuaW1hdGVkVHlwZSgpOwog
fQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCkKIHsKLSAgICBpZiAoIW1fYW5pbWF0ZWRUeXBlKQorICAgIGlm
ICghdGFyZ2V0RWxlbWVudCB8fCAhbV9jb250cm9sbGVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICAvLyBJZiB0aGUgU1ZHQW5pbWF0ZWRUeXBlIGlzIGEgbGlzdCB0eXBlLCBlLmcuIFNWR0xlbmd0
aExpc3RWYWx1ZXMsIHRoZSB3cmFwcGVycyBvZiB0aGUKLSAgICAvLyBhbmltYXRlZCBwcm9wZXJ0
aWVzIGhhdmUgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgYmVmb3Jl
IGl0J3MgZGVsZXRlZC4KLSAgICBpZiAoIW1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9hbmltYXRvci0+YW5pbVZhbFdpbGxDaGFuZ2UobV9hbmltYXRlZFByb3BlcnRp
ZXMpOwotCi0gICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7Ci0gICAgICAgIG1fYW5pbWF0ZWRUeXBl
ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2FuaW1hdGVk
UHJvcGVydGllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQ1NTIHByb3BlcnRpZXMgYW5pbWF0
aW9uIGNvZGUtcGF0aC4KLSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5z
dGFuY2VzKCp0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpOwotICAgICAgICBtX2FuaW1h
dGVkVHlwZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTaG91bGRB
cHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IHNob3VsZEFwcGx5QW5pbWF0aW9uKHRhcmdldEVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5WE1M
YW5kQ1NTQW5pbWF0aW9uKQotICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJ
bnN0YW5jZXMoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICAvLyBTVkcg
RE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0aC4KLSAgICBpZiAobV9hbmltYXRvcikgewot
ICAgICAgICBtX2FuaW1hdG9yLT5zdG9wQW5pbVZhbEFuaW1hdGlvbihtX2FuaW1hdGVkUHJvcGVy
dGllcyk7Ci0gICAgICAgIG5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENoYW5n
ZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpKTsKLSAgICB9Ci0KLSAgICBtX2FuaW1h
dGVkUHJvcGVydGllcy5jbGVhcigpOwotICAgIG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAg
ICBtX2NvbnRyb2xsZXItPmNsZWFyQW5pbWF0ZWRUeXBlKHRhcmdldEVsZW1lbnQpOwogfQogCiB2
b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogewotICAg
IEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlICE9IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCB8
fCBoYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlVHJhbnNmb3JtVGFnKSk7Ci0gICAgQVNTRVJU
KG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duKTsKLSAgICBBU1NFUlQo
bV9hbmltYXRvcik7Ci0KLSAgICAvLyBFYXJseSBleGl0IGlmIG91ciBhbmltYXRlZCB0eXBlIGdv
dCBkZXN0cm95ZWQgYnkgYSBwcmV2aW91cyBlbmRlZEFjdGl2ZUludGVydmFsKCkuCi0gICAgaWYg
KCFtX2FuaW1hdGVkVHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRFbGVt
ZW50ID0gbWFrZVJlZlB0cih0aGlzLT50YXJnZXRFbGVtZW50KCkpOwotICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7Ci0KLSAgICBB
U1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0KLSAgICBpZiAobV9hbmltYXRlZFByb3BlcnRpZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIENTUyBwcm9wZXJ0aWVzIGFuaW1hdGlvbiBjb2RlLXBhdGgu
Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIHJlc3VsdCBvZiB0aGUgYW5pbWF0aW9uIHRvIGEgU3Ry
aW5nIGFuZCBhcHBseSBpdCBhcyBDU1MgcHJvcGVydHkgb24gdGhlIHRhcmdldCAmIGFsbCBpbnN0
YW5jZXMuCi0gICAgICAgIGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcygqdGFy
Z2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgbV9hbmltYXRlZFR5cGUtPnZhbHVlQXNTdHJpbmco
KSk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBXZSBkbyB1cGRhdGUgdGhlIHN0eWxlIGFuZCB0aGUgYW5pbWF0aW9uIHByb3BlcnR5
IGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuCi0gICAgU2hvdWxkQXBwbHlBbmltYXRpb24gc2hv
dWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LmdldCgpLCBhdHRy
aWJ1dGVOYW1lKTsKLSAgICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlYTUxhbmRDU1NBbmltYXRp
b24pCi0gICAgICAgIGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcygqdGFyZ2V0
RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgbV9hbmltYXRlZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7
Ci0KLSAgICAvLyBTVkcgRE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0aC4KLSAgICAvLyBB
dCB0aGlzIHBvaW50IHRoZSBTVkcgRE9NIHZhbHVlcyBhcmUgYWxyZWFkeSBjaGFuZ2VkLCB1bmxp
a2UgZm9yIENTUy4KLSAgICAvLyBXZSBvbmx5IGhhdmUgdG8gdHJpZ2dlciB1cGRhdGUgbm90aWZp
Y2F0aW9ucyBoZXJlLgotICAgIG1fYW5pbWF0b3ItPmFuaW1WYWxEaWRDaGFuZ2UobV9hbmltYXRl
ZFByb3BlcnRpZXMpOwotICAgIG5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENo
YW5nZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7Ci19CiAKLWJvb2wgU1ZHQW5pbWF0
ZUVsZW1lbnRCYXNlOjphbmltYXRlZFByb3BlcnR5VHlwZVN1cHBvcnRzQWRkaXRpb24oKSBjb25z
dAotewotICAgIC8vIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9hbmltYXRlLmh0bWwj
QW5pbWF0aW9uQXR0cmlidXRlc0FuZFByb3BlcnRpZXMuCi0gICAgc3dpdGNoIChtX2FuaW1hdGVk
UHJvcGVydHlUeXBlKSB7Ci0gICAgY2FzZSBBbmltYXRlZEJvb2xlYW46Ci0gICAgY2FzZSBBbmlt
YXRlZEVudW1lcmF0aW9uOgotICAgIGNhc2UgQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgot
ICAgIGNhc2UgQW5pbWF0ZWRTdHJpbmc6Ci0gICAgY2FzZSBBbmltYXRlZFVua25vd246Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEFuaW1hdGVkQW5nbGU6Ci0gICAgY2FzZSBBbmlt
YXRlZENvbG9yOgotICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyOgotICAgIGNhc2UgQW5pbWF0ZWRJ
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOgotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6Ci0gICAgY2Fz
ZSBBbmltYXRlZExlbmd0aExpc3Q6Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlcjoKLSAgICBjYXNl
IEFuaW1hdGVkTnVtYmVyTGlzdDoKLSAgICBjYXNlIEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1i
ZXI6Ci0gICAgY2FzZSBBbmltYXRlZFBhdGg6Ci0gICAgY2FzZSBBbmltYXRlZFBvaW50czoKLSAg
ICBjYXNlIEFuaW1hdGVkUmVjdDoKLSAgICBjYXNlIEFuaW1hdGVkVHJhbnNmb3JtTGlzdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGVuc3VyZUNv
bnRyb2xsZXIoKS5hcHBseVJlc3VsdHNUb1RhcmdldCgpOwogfQogCiBib29sIFNWR0FuaW1hdGVF
bGVtZW50QmFzZTo6aXNBZGRpdGl2ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGFuaW1hdGlvbk1vZGUo
KSA9PSBCeUFuaW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlKCkgPT0gRnJvbUJ5QW5pbWF0aW9uKSB7
Ci0gICAgICAgIGlmICghYW5pbWF0ZWRQcm9wZXJ0eVR5cGVTdXBwb3J0c0FkZGl0aW9uKCkpCisg
ICAgaWYgKGFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpCeSB8fCBhbmltYXRpb25N
b2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6RnJvbUJ5KSB7CisgICAgICAgIGlmICh0YXJnZXRFbGVt
ZW50KCkgJiYgbV9jb250cm9sbGVyICYmICFtX2NvbnRyb2xsZXItPmlzQWRkaXRpdmUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQyMyw0MiArMTQzLDQwIEBAIGJv
b2wgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjppc0FkZGl0aXZlKCkgY29uc3QKIGZsb2F0IFNWR0Fu
aW1hdGVFbGVtZW50QmFzZTo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIC8vIEZJWE1FOiBBIHJldHVybiB2
YWx1ZSBvZiBmbG9hdCBpcyBub3QgZW5vdWdoIHRvIHN1cHBvcnQgcGFjZWQgYW5pbWF0aW9ucyBv
biBsaXN0cy4KLSAgICBpZiAoIXRoaXMtPnRhcmdldEVsZW1lbnQoKSkKKyAgICBpZiAoIXRhcmdl
dEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0dXJuIGVuc3VyZUFuaW1h
dG9yKCktPmNhbGN1bGF0ZURpc3RhbmNlKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKKyAgICByZXR1
cm4gZW5zdXJlQ29udHJvbGxlcigpLmNhbGN1bGF0ZURpc3RhbmNlKGZyb21TdHJpbmcsIHRvU3Ry
aW5nKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OnNldFRhcmdldEVsZW1lbnQo
U1ZHRWxlbWVudCogdGFyZ2V0KQogewogICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdl
dEVsZW1lbnQodGFyZ2V0KTsKLSAgICByZXNldEFuaW1hdGVkUHJvcGVydHlUeXBlKCk7CisgICAg
cmVzZXRBbmltYXRpb24oKTsKIH0KIAogdm9pZCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OnNldEF0
dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBT
VkdTTUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKTsKLSAgICBjaGVj
a0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoKSk7Ci0gICAgcmVzZXRBbmlt
YXRlZFByb3BlcnR5VHlwZSgpOworICAgIHJlc2V0QW5pbWF0aW9uKCk7CiB9CiAKLXZvaWQgU1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjpyZXNldEFuaW1hdGVkUHJvcGVydHlUeXBlKCkKK3ZvaWQgU1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjpyZXNldEFuaW1hdGlvbigpCiB7Ci0gICAgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6cmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSgpOwotICAgIEFTU0VSVCghbV9hbmlt
YXRlZFR5cGUpOwotICAgIG1fZnJvbVR5cGUgPSBudWxscHRyOwotICAgIG1fdG9UeXBlID0gbnVs
bHB0cjsKLSAgICBtX3RvQXRFbmRPZkR1cmF0aW9uVHlwZSA9IG51bGxwdHI7Ci0gICAgbV9hbmlt
YXRvciA9IG51bGxwdHI7Ci0gICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IHRhcmdldEVsZW1l
bnQoKSA/IGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKCp0YXJnZXRFbGVtZW50KCkpIDog
QW5pbWF0ZWRTdHJpbmc7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRBbmltYXRpb24o
KTsKKyAgICBtX2NvbnRyb2xsZXIgPSBudWxscHRyOworICAgIG1faGFzSW52YWxpZENTU0F0dHJp
YnV0ZVR5cGUgPSBXVEY6Om51bGxvcHQ7CiB9CiAKLVNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBT
VkdBbmltYXRlRWxlbWVudEJhc2U6OmVuc3VyZUFuaW1hdG9yKCkKK2Jvb2wgU1ZHQW5pbWF0ZUVs
ZW1lbnRCYXNlOjpoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2FuaW1hdG9yKQotICAgICAgICBtX2FuaW1hdG9yID0gU1ZHQW5pbWF0b3JGYWN0b3J5Ojpj
cmVhdGUodGhpcywgdGFyZ2V0RWxlbWVudCgpLCBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKLSAg
ICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBtX2FuaW1hdG9yLT50eXBlKCkpOwot
ICAgIHJldHVybiBtX2FuaW1hdG9yLmdldCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1faGFzSW52YWxpZENTU0F0dHJpYnV0
ZVR5cGUpCisgICAgICAgIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUgPSBoYXNWYWxpZEF0
dHJpYnV0ZU5hbWUoKSAmJiBhdHRyaWJ1dGVUeXBlKCkgPT0gQXR0cmlidXRlVHlwZTo6Q1NTICYm
ICFpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQoKSwgYXR0cmlidXRl
TmFtZSgpKTsKKworICAgIHJldHVybiBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlLnZhbHVl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlRWxlbWVudEJhc2UuaAppbmRleCBhYTUzNDFkNWVjYTNjNWRiMTFjZmU2NjU4MzE2MWUw
NGVhODllZjJlLi5iYjdhYWUyN2RlZGVhODQ2ODU2M2Q2MzUwM2NmMjc0ZTZjM2Y5MGZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5oCkBAIC0yMywyMyArMjMs
MjcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTVkdBbmltYXRlZFR5cGUuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGlv
bkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIFNWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlOworCiBjbGFzcyBTVkdBbmltYXRl
RWxlbWVudEJhc2UgOiBwdWJsaWMgU1ZHQW5pbWF0aW9uRWxlbWVudCB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChTVkdBbmltYXRlRWxlbWVudEJhc2UpOwogcHVibGljOgogICAgIHZpcnR1
YWwgflNWR0FuaW1hdGVFbGVtZW50QmFzZSgpOwogCisgICAgU1ZHQW5pbWF0aW9uQ29udHJvbGxl
ckJhc2UmIGVuc3VyZUNvbnRyb2xsZXIoKTsKKwogICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIGRl
dGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKFNWR0VsZW1lbnQmKSBjb25zdDsKIAogcHJvdGVj
dGVkOgogICAgIFNWR0FuaW1hdGVFbGVtZW50QmFzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQmKTsKIAorICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKICAgICB2b2lkIHJlc2V0QW5pbWF0ZWRUeXBlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
bGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBvdmVycmlkZTsKIApA
QCAtNTMsMjMgKzU3LDEzIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0VGFyZ2V0RWxlbWVu
dChTVkdFbGVtZW50Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0QW5pbWF0ZWRQcm9wZXJ0
eVR5cGUoKSBvdmVycmlkZTsKLQotICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGU7CisgICAgdm9pZCByZXNldEFuaW1hdGlvbigpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgotICAgIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBlbnN1cmVBbmltYXRvcigpOwotICAg
IGJvb2wgYW5pbWF0ZWRQcm9wZXJ0eVR5cGVTdXBwb3J0c0FkZGl0aW9uKCkgY29uc3Q7Ci0KLSAg
ICBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIG92ZXJyaWRlOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gbV9mcm9tVHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvVHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBtX3RvQXRFbmRPZkR1cmF0aW9uVHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBtX2FuaW1hdGVkVHlwZTsKKyAgICBib29sIGhhc0ludmFsaWRDU1NBdHRy
aWJ1dGVUeXBlKCkgY29uc3Q7CiAKLSAgICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Qg
bV9hbmltYXRlZFByb3BlcnRpZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlw
ZUFuaW1hdG9yPiBtX2FuaW1hdG9yOworICAgIG11dGFibGUgT3B0aW9uYWw8Ym9vbD4gbV9oYXNJ
bnZhbGlkQ1NTQXR0cmlidXRlVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0aW9u
Q29udHJvbGxlckJhc2U+IG1fY29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCmlu
ZGV4IDdhOGM2M2U2NzAzZmUwMmE4NzVkNzZlYmJmYzM5NGJiZGQ1ZGFkZGYuLjFjYjlhZjYxMGRi
YWQ0YWJmMmU5YjQ4Yzc4OTQ5NGI5OGRmZjIwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcApAQCAtNTcsNyArNTcsNyBAQCBSZWY8U1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpCitib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAogewogICAgIGF1dG8gdGFyZ2V0RWxl
bWVudCA9IG1ha2VSZWZQdHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKICAgICBpZiAoIXRhcmdl
dEVsZW1lbnQpCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKQorYm9vbCBTVkdB
bmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QKIHsKICAg
ICAvLyBBbmltYXRlTW90aW9uIGRvZXMgbm90IHVzZSBhdHRyaWJ1dGVOYW1lIHNvIGl0IGlzIGFs
d2F5cyB2YWxpZC4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBi
eVN0cmluZykKIHsKICAgICBtX2hhc1RvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKLSAg
ICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEJ5QW5pbWF0aW9uICYmICFpc0FkZGl0aXZlKCkpCisg
ICAgaWYgKGFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpCeSAmJiAhaXNBZGRpdGl2
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcGFyc2VQb2ludChmcm9tU3RyaW5nLCBt
X2Zyb21Qb2ludCk7CiAgICAgRmxvYXRQb2ludCBieVBvaW50OwpAQCAtMjIyLDcgKzIyMiw3IEBA
IHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxv
YXQgcGVyY2VudGFnZSwgdW5zaWduZWQKICAgICBpZiAoIWlzQWRkaXRpdmUoKSkKICAgICAgICAg
dHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKIAotICAgIGlmIChhbmltYXRpb25Nb2RlKCkgIT0g
UGF0aEFuaW1hdGlvbikgeworICAgIGlmIChhbmltYXRpb25Nb2RlKCkgIT0gQW5pbWF0aW9uTW9k
ZTo6UGF0aCkgewogICAgICAgICBGbG9hdFBvaW50IHRvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBt
X3RvUG9pbnQ7CiAgICAgICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0Q291bnQgJiYg
bV9oYXNUb1BvaW50QXRFbmRPZkR1cmF0aW9uKQogICAgICAgICAgICAgdG9Qb2ludEF0RW5kT2ZE
dXJhdGlvbiA9IG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlvbjsKQEAgLTI4OCw3ICsyODgsNyBAQCBm
bG9hdCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdAogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uTW9kZSgpCiB7CiAgICAgaWYgKCFtX2FuaW1hdGlvblBhdGguaXNFbXB0eSgp
KQotICAgICAgICBzZXRBbmltYXRpb25Nb2RlKFBhdGhBbmltYXRpb24pOworICAgICAgICBzZXRB
bmltYXRpb25Nb2RlKEFuaW1hdGlvbk1vZGU6OlBhdGgpOwogICAgIGVsc2UKICAgICAgICAgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uTW9kZSgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAppbmRleCAyNGRlY2VjZGQ2YjlkNzlk
ODkwNDNiMmEyOWZhZWFjZGJmY2E2NmNkLi5mOTNlNjQzZjNkODM3ODE3NTYwZGRiOTYyMGZlNmUx
YjEzZjFmN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuaApAQCAtMzYsOCArMzYsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgYm9v
bCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBvdmVycmlkZTsKLSAgICBib29sIGhhc1ZhbGlkQXR0
cmlidXRlTmFtZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAppbmRleCAwMTQ5Y2M4OTllOTI2YTQx
NWU2ZmM5OTY0N2UzOGRhNjhhOTI2OTU3Li43NDUzOTJlMzc5MTdhOTAzNzhlNjNlZWJmNGRhYmJj
ZGUwYWZlM2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgUmVmPFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50PiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmkK
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKQorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKIHsKICAgICBpZiAoIXRoaXMtPnRhcmdldEVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTEsNyArNTEsNyBAQCBib29sIFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKQogICAgIGlm
IChhdHRyaWJ1dGVUeXBlKCkgPT0gQXR0cmlidXRlVHlwZTo6Q1NTKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBBbmltYXRlZFRy
YW5zZm9ybUxpc3Q7CisgICAgcmV0dXJuIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aGFzVmFsaWRB
dHRyaWJ1dGVUeXBlKCk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5oCmluZGV4IDYyOTczMDgyZDBkMGJmMGM3Y2IzYjg3MTMyYWI2Zjk5YTI1MzZiNTYuLjIw
MzEwM2FhNmZkNGMyYTdhM2UyNTAzMzJjNzU2NmY4Y2Y4ZDBmZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCkBAIC0zOSw3ICszOSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAgICAgCi0gICAgYm9vbCBoYXNWYWxpZEF0dHJp
YnV0ZVR5cGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
IGZpbmFsOwogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogCiAgICAgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1Ry
YW5zZm9ybVR5cGUgbV90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkQW5nbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3Bw
CmluZGV4IDU0YjcxNDVhMGNkNmIyZDc2NzllZDMwZjRkOTFmMzE2YjIxMDlhMGMuLjU2MjFkNzQ4
YmEzNzQ5NzExOTRlOGRmNThlM2ZlOTUxNzc4MTJhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZEFuZ2xlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRBbmdsZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBTVkdBbmltYXRlZEFuZ2xl
QW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWdu
ZWQKICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0
RWxlbWVudCk7CiAKLSAgICBjb25zdCBhdXRvJiBmcm9tQW5nbGVBbmRFbnVtZXJhdGlvbiA9ICht
X2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1h
dGVkIDogZnJvbSktPmFzPHN0ZDo6cGFpcjxTVkdBbmdsZVZhbHVlLCB1bnNpZ25lZD4+KCk7Cisg
ICAgY29uc3QgYXV0byYgZnJvbUFuZ2xlQW5kRW51bWVyYXRpb24gPSAobV9hbmltYXRpb25FbGVt
ZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IGZy
b20pLT5hczxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+PigpOwogICAgIGF1dG8m
IHRvQW5nbGVBbmRFbnVtZXJhdGlvbiA9IHRvLT5hczxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwg
dW5zaWduZWQ+PigpOwogICAgIGF1dG8mIHRvQXRFbmRPZkR1cmF0aW9uQW5nbGVBbmRFbnVtZXJh
dGlvbiA9IHRvQXRFbmRPZkR1cmF0aW9uLT5hczxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5z
aWduZWQ+PigpOwogICAgIGF1dG8mIGFuaW1hdGVkQW5nbGVBbmRFbnVtZXJhdGlvbiA9IGFuaW1h
dGVkLT5hczxzdGQ6OnBhaXI8U1ZHQW5nbGVWYWx1ZSwgdW5zaWduZWQ+PigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAppbmRleCBjYmYwMmFlZGYxNTM1Mzc2NWE4
NjE1MzUwYTQ5MzUwYzViZTQyNDIzLi5hMzc1MTliZmUzMGZiYWNlNDA3ZmVkOWM2YWQ3MzU4Mjhh
YjQwYThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcApAQCAt
NzAsNyArNzAsNyBAQCB2b2lkIFNWR0FuaW1hdGVkQm9vbGVhbkFuaW1hdG9yOjpjYWxjdWxhdGVB
bmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbgogICAgIEFTU0VSVChtX2FuaW1h
dGlvbkVsZW1lbnQpOwogICAgIEFTU0VSVChtX2NvbnRleHRFbGVtZW50KTsKIAotICAgIGNvbnN0
IGF1dG8gZnJvbUJvb2xlYW4gPSAobV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkg
PT0gVG9BbmltYXRpb24gPyBhbmltYXRlZCA6IGZyb20pLT5hczxib29sPigpOworICAgIGNvbnN0
IGF1dG8gZnJvbUJvb2xlYW4gPSAobV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkg
PT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IGZyb20pLT5hczxib29sPigpOwogICAg
IGNvbnN0IGF1dG8gdG9Cb29sZWFuID0gdG8tPmFzPGJvb2w+KCk7CiAgICAgYXV0byYgYW5pbWF0
ZWRCb29sZWFuID0gYW5pbWF0ZWQtPmFzPGJvb2w+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZENvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZENvbG9yLmNwcAppbmRleCAzM2JkNjkyNDEyZjRlYzE4NTQ2MzY1M2E1ZTNiN2QyZmY0
OTYwOTlhLi5jNDZhNzc1ZTkxNTA5YWE4MTNhYzliMjQwYzdiYWNhNWE0YTE4ZmI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQg
U1ZHQW5pbWF0ZWRDb2xvckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBl
cmNlbnRhZ2UsIHVuc2lnbmVkCiAgICAgQVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVudCk7CiAgICAg
QVNTRVJUKG1fY29udGV4dEVsZW1lbnQpOwogCi0gICAgYXV0byBmcm9tQ29sb3IgPSAobV9hbmlt
YXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBhbmltYXRlZCA6
IGZyb20pLT5hczxDb2xvcj4oKTsKKyAgICBhdXRvIGZyb21Db2xvciA9IChtX2FuaW1hdGlvbkVs
ZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpUbyA/IGFuaW1hdGVkIDog
ZnJvbSktPmFzPENvbG9yPigpOwogICAgIGF1dG8gdG9Db2xvciA9IHRvLT5hczxDb2xvcj4oKTsK
IAogICAgIC8vIEFwcGx5IENTUyBpbmhlcml0YW5jZSBydWxlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAppbmRleCAzNGI0Y2EyOWEzMzBkYjM2MjFl
ZDc4MmVlMDhiNTRiMDhkNWY5NzcyLi44MzY0NDBhMDhkMzcxMWMzOWUwN2RjZTk3ZmIzNDRmNmQ2
YjFjNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkRW51bWVyYXRpb24u
Y3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBTVkdBbmltYXRlZEVudW1lcmF0aW9uQW5pbWF0
b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW4KICAgICBBU1NF
UlQobV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVudCk7CiAK
LSAgICBjb25zdCBhdXRvIGZyb21FbnVtZXJhdGlvbiA9IChtX2FuaW1hdGlvbkVsZW1lbnQtPmFu
aW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkIDogZnJvbSktPmFzPHVuc2ln
bmVkPigpOworICAgIGNvbnN0IGF1dG8gZnJvbUVudW1lcmF0aW9uID0gKG1fYW5pbWF0aW9uRWxl
bWVudC0+YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQgOiBm
cm9tKS0+YXM8dW5zaWduZWQ+KCk7CiAgICAgY29uc3QgYXV0byB0b0VudW1lcmF0aW9uID0gdG8t
PmFzPHVuc2lnbmVkPigpOwogICAgIGF1dG8mIGFuaW1hdGVkRW51bWVyYXRpb24gPSBhbmltYXRl
ZC0+YXM8dW5zaWduZWQ+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZEludGVnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzdhMjFmNTdlMzRlZDI3Y2Vl
YTJmZWNmZjMxNjU5MTVhY2IzOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEludGVnZXIuaCIKLQotI2luY2x1ZGUgIlNW
R0FuaW1hdGVFbGVtZW50QmFzZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TVkdB
bmltYXRlZEludGVnZXJBbmltYXRvcjo6U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3IoU1ZHQW5p
bWF0aW9uRWxlbWVudCogYW5pbWF0aW9uRWxlbWVudCwgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQpCi0gICAgOiBTVkdBbmltYXRlZFR5cGVBbmltYXRvcihBbmltYXRlZEludGVnZXIsIGFuaW1h
dGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KQotewotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICByZXR1cm4gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGUoU1ZHUHJvcGVydHlUcmFpdHM8aW50Pjo6ZnJvbVN0cmluZyhzdHJpbmcpKTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5p
bWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNl
VmFsdWU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQotdm9pZCBTVkdB
bmltYXRlZEludGVnZXJBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxl
bWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQotewotICAgIHN0b3BBbmlt
VmFsQW5pbWF0aW9uRm9yVHlwZTxTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwot
fQotCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpyZXNldEFuaW1WYWxUb0Jhc2VW
YWwoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzLCBT
VkdBbmltYXRlZFR5cGUmIHR5cGUpCi17Ci0gICAgcmVzZXRGcm9tQmFzZVZhbHVlPFNWR0FuaW1h
dGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcywgdHlwZSk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyQW5pbWF0b3I6OmFuaW1WYWxXaWxsQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRl
ZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBhbmltVmFsV2lsbENoYW5nZUZv
clR5cGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQotdm9pZCBTVkdB
bmltYXRlZEludGVnZXJBbmltYXRvcjo6YW5pbVZhbERpZENoYW5nZShjb25zdCBTVkdFbGVtZW50
QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0gICAgYW5pbVZhbERpZENo
YW5nZUZvclR5cGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQotdm9p
ZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRl
ZFR5cGUqIGZyb20sIFNWR0FuaW1hdGVkVHlwZSogdG8pCi17Ci0gICAgQVNTRVJUKGZyb20tPnR5
cGUoKSA9PSBBbmltYXRlZEludGVnZXIpOwotICAgIEFTU0VSVChmcm9tLT50eXBlKCkgPT0gdG8t
PnR5cGUoKSk7Ci0KLSAgICB0by0+YXM8aW50PigpICs9IGZyb20tPmFzPGludD4oKTsKLX0KLQot
dm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2Vy
KFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQsIGZsb2F0IHBlcmNlbnRhZ2Us
IHVuc2lnbmVkIHJlcGVhdENvdW50LCBpbnQgZnJvbUludGVnZXIsIGludCB0b0ludGVnZXIsIGlu
dCB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXIsIGludCYgYW5pbWF0ZWRJbnRlZ2VyKQotewotICAg
IGZsb2F0IGFuaW1hdGVkTnVtYmVyID0gYW5pbWF0ZWRJbnRlZ2VyOwotICAgIGFuaW1hdGlvbkVs
ZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgZnJv
bUludGVnZXIsIHRvSW50ZWdlciwgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyLCBhbmltYXRlZE51
bWJlcik7Ci0gICAgYW5pbWF0ZWRJbnRlZ2VyID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoYW5p
bWF0ZWROdW1iZXIpKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2Fs
Y3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3Vu
dCwgU1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvLCBTVkdBbmltYXRl
ZFR5cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdBbmltYXRlZFR5cGUqIGFuaW1hdGVkKQotewot
ICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwotICAgIEFTU0VSVChtX2NvbnRleHRFbGVt
ZW50KTsKLQotICAgIGNvbnN0IGF1dG8gZnJvbUludGVnZXIgPSAobV9hbmltYXRpb25FbGVtZW50
LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBhbmltYXRlZCA6IGZyb20pLT5hczxp
bnQ+KCk7Ci0gICAgY29uc3QgYXV0byB0b0ludGVnZXIgPSB0by0+YXM8aW50PigpOwotICAgIGNv
bnN0IGF1dG8gdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyID0gdG9BdEVuZE9mRHVyYXRpb24tPmFz
PGludD4oKTsKLSAgICBhdXRvJiBhbmltYXRlZEludGVnZXIgPSBhbmltYXRlZC0+YXM8aW50Pigp
OwotCi0gICAgY2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1fYW5pbWF0aW9uRWxlbWVudCwgcGVy
Y2VudGFnZSwgcmVwZWF0Q291bnQsIGZyb21JbnRlZ2VyLCB0b0ludGVnZXIsIHRvQXRFbmRPZkR1
cmF0aW9uSW50ZWdlciwgYW5pbWF0ZWRJbnRlZ2VyKTsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVu
dCk7Ci0gICAgaW50IGZyb20gPSBmcm9tU3RyaW5nLnRvSW50U3RyaWN0KCk7Ci0gICAgaW50IHRv
ID0gdG9TdHJpbmcudG9JbnRTdHJpY3QoKTsKLSAgICByZXR1cm4gYWJzKHRvIC0gZnJvbSk7Ci19
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWMyMzQ4NzZiZGFjMzA4OTA1MTk1N2ZjZDEzNmYzYzRlY2NiZTAy
ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTVkdBbmlt
YXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZUFu
aW1hdG9yLmgiCi0jaW5jbHVkZSAiU1ZHQXR0cmlidXRlQWNjZXNzb3IuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBTVkdBbmltYXRpb25FbGVtZW50OwotCi11c2luZyBTVkdBbmlt
YXRlZEludGVnZXIgPSBTVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZjxpbnQ+OwotdXNp
bmcgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmlidXRlID0gU1ZHQW5pbWF0ZWRBdHRyaWJ1dGU8U1ZH
QW5pbWF0ZWRJbnRlZ2VyPjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlPgotdXNpbmcg
U1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmlidXRlQWNjZXNzb3IgPSBTVkdBbmltYXRlZEF0dHJpYnV0
ZUFjY2Vzc29yPE93bmVyVHlwZSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmlidXRlLCBBbmltYXRl
ZEludGVnZXI+OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGU+Ci11c2luZyBTVkdBbmlt
YXRlZE9wdGlvbmFsSW50ZWdlckF0dHJpYnV0ZUFjY2Vzc29yID0gU1ZHQW5pbWF0ZWRPcHRpb25h
bEF0dHJpYnV0ZUFjY2Vzc29yPE93bmVyVHlwZSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmlidXRl
LCBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI+OwotCi1jbGFzcyBTVkdBbmltYXRlZElu
dGVnZXJBbmltYXRvciBmaW5hbCA6IHB1YmxpYyBTVkdBbmltYXRlZFR5cGVBbmltYXRvciB7Ci1w
dWJsaWM6Ci0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVu
dCosIFNWR0VsZW1lbnQqKTsKLQotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkSW50
ZWdlcihTVkdBbmltYXRpb25FbGVtZW50KiwgZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVw
ZWF0Q291bnQsIGludCBmcm9tSW50ZWdlciwgaW50IHRvSW50ZWdlciwgaW50IHRvQXRFbmRPZkR1
cmF0aW9uSW50ZWdlciwgaW50JiBhbmltYXRlZEludGVnZXIpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkVHlwZT4gY29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBzdGFydEFuaW1W
YWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0
ZWRQcm9wZXJ0eUxpc3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0QW5pbVZhbFRvQmFzZVZh
bChjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmLCBTVkdBbmltYXRlZFR5cGUm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGFuaW1WYWxXaWxsQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnR5TGlzdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5pbVZhbERpZENoYW5n
ZShjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgYWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5cGUqLCBTVkdBbmltYXRlZFR5cGUq
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2Vu
dGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVk
VHlwZSosIFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVkVHlwZSopIG92ZXJyaWRlOwotICAg
IGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9u
YWxJbnRlZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRp
b25hbEludGVnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDUzZjExMmQ0
ODA2N2JjMzRiNjZlMWMxZWJmZDVmZDY1OGRiNzc3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVn
ZXJPcHRpb25hbEludGVnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlci5oIgotCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZUVsZW1lbnRC
YXNlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCi0jaW5jbHVkZSAiU1ZHUGFy
c2VyVXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZHQW5pbWF0ZWRJbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50
ZWdlckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0Vs
ZW1lbnQqIGNvbnRleHRFbGVtZW50KQotICAgIDogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IoQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLCBhbmltYXRpb25FbGVtZW50LCBjb250ZXh0RWxl
bWVudCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRl
KFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIGludD4+Ojpmcm9tU3RyaW5nKHN0cmlu
ZykpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZElu
dGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6c3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0
IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBy
ZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZXM8U1ZHQW5pbWF0ZWRJbnRlZ2VyLCBTVkdBbmlt
YXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwotfQotCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdF
bGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0gICAgc3RvcEFu
aW1WYWxBbmltYXRpb25Gb3JUeXBlczxTVkdBbmltYXRlZEludGVnZXIsIFNWR0FuaW1hdGVkSW50
ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9u
YWxJbnRlZ2VyQW5pbWF0b3I6OnJlc2V0QW5pbVZhbFRvQmFzZVZhbChjb25zdCBTVkdFbGVtZW50
QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMsIFNWR0FuaW1hdGVkVHlwZSYgdHlw
ZSkKLXsKLSAgICByZXNldEZyb21CYXNlVmFsdWVzPFNWR0FuaW1hdGVkSW50ZWdlciwgU1ZHQW5p
bWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzLCB0eXBlKTsKLX0KLQotdm9pZCBTVkdBbmltYXRl
ZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6YW5pbVZhbFdpbGxDaGFuZ2UoY29uc3Qg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQotewotICAgIGFu
aW1WYWxXaWxsQ2hhbmdlRm9yVHlwZXM8U1ZHQW5pbWF0ZWRJbnRlZ2VyLCBTVkdBbmltYXRlZElu
dGVnZXI+KGFuaW1hdGVkVHlwZXMpOwotfQotCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlv
bmFsSW50ZWdlckFuaW1hdG9yOjphbmltVmFsRGlkQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnRBbmlt
YXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBhbmltVmFsRGlkQ2hhbmdl
Rm9yVHlwZXM8U1ZHQW5pbWF0ZWRJbnRlZ2VyLCBTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVk
VHlwZXMpOwotfQotCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1h
dG9yOjphZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlwZSogZnJvbSwgU1ZHQW5pbWF0ZWRU
eXBlKiB0bykKLXsKLSAgICBBU1NFUlQoZnJvbS0+dHlwZSgpID09IEFuaW1hdGVkSW50ZWdlck9w
dGlvbmFsSW50ZWdlcik7Ci0gICAgQVNTRVJUKGZyb20tPnR5cGUoKSA9PSB0by0+dHlwZSgpKTsK
LQotICAgIGNvbnN0IGF1dG8mIGZyb21JbnRlZ2VyUGFpciA9IGZyb20tPmFzPHN0ZDo6cGFpcjxp
bnQsIGludD4+KCk7Ci0gICAgYXV0byYgdG9JbnRlZ2VyUGFpciA9IHRvLT5hczxzdGQ6OnBhaXI8
aW50LCBpbnQ+PigpOwotCi0gICAgdG9JbnRlZ2VyUGFpci5maXJzdCArPSBmcm9tSW50ZWdlclBh
aXIuZmlyc3Q7Ci0gICAgdG9JbnRlZ2VyUGFpci5zZWNvbmQgKz0gZnJvbUludGVnZXJQYWlyLnNl
Y29uZDsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRv
cjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBl
YXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvLCBTVkdB
bmltYXRlZFR5cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdBbmltYXRlZFR5cGUqIGFuaW1hdGVk
KQotewotICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwotICAgIEFTU0VSVChtX2NvbnRl
eHRFbGVtZW50KTsKLQotICAgIGNvbnN0IGF1dG8mIGZyb21JbnRlZ2VyUGFpciA9IChtX2FuaW1h
dGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkIDog
ZnJvbSktPmFzPHN0ZDo6cGFpcjxpbnQsIGludD4+KCk7Ci0gICAgY29uc3QgYXV0byYgdG9JbnRl
Z2VyUGFpciA9IHRvLT5hczxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpOwotICAgIGNvbnN0IGF1dG8m
IHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlclBhaXIgPSB0b0F0RW5kT2ZEdXJhdGlvbi0+YXM8c3Rk
OjpwYWlyPGludCwgaW50Pj4oKTsKLSAgICBhdXRvJiBhbmltYXRlZEludGVnZXJQYWlyID0gYW5p
bWF0ZWQtPmFzPHN0ZDo6cGFpcjxpbnQsIGludD4+KCk7Ci0KLSAgICBTVkdBbmltYXRlZEludGVn
ZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1fYW5pbWF0aW9uRWxlbWVudCwg
cGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIGZyb21JbnRlZ2VyUGFpci5maXJzdCwgdG9JbnRlZ2Vy
UGFpci5maXJzdCwgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpci5maXJzdCwgYW5pbWF0ZWRJ
bnRlZ2VyUGFpci5maXJzdCk7Ci0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1
bGF0ZUFuaW1hdGVkSW50ZWdlcihtX2FuaW1hdGlvbkVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVh
dENvdW50LCBmcm9tSW50ZWdlclBhaXIuc2Vjb25kLCB0b0ludGVnZXJQYWlyLnNlY29uZCwgdG9B
dEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpci5zZWNvbmQsIGFuaW1hdGVkSW50ZWdlclBhaXIuc2Vj
b25kKTsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0
b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgLy8gRklYTUU6IERpc3RhbmNlIGNhbGN1bGF0aW9uIGlzIG5vdCBwb3NzaWJsZSBmb3IgU1ZH
SW50ZWdlck9wdGlvbmFsSW50ZWdlciByaWdodCBub3cuIFdlIG5lZWQgdGhlIGRpc3RhbmNlIGZv
ciBldmVyeSBzaW5nbGUgdmFsdWUuCi0gICAgcmV0dXJuIC0xOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjFlYTk4YWQ3ODUyNTEwZjBhMDU4MWNi
MDUwYzEyZjk4ZTY4OTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7Ci0KLWNsYXNzIFNW
R0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yIGZpbmFsIDogcHVibGljIFNW
R0FuaW1hdGVkVHlwZUFuaW1hdG9yIHsKLXB1YmxpYzoKLSAgICBTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXJBbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50KiwgU1ZHRWxlbWVudCop
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY29uc3RydWN0RnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5p
bWF0ZWRUeXBlPiBzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVk
UHJvcGVydHlMaXN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wQW5pbVZhbEFuaW1hdGlvbihj
b25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlc2V0QW5pbVZhbFRvQmFzZVZhbChjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxp
c3QmLCBTVkdBbmltYXRlZFR5cGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFuaW1WYWxXaWxsQ2hh
bmdlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgYW5pbVZhbERpZENoYW5nZShjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxp
c3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5
cGUqLCBTVkdBbmltYXRlZFR5cGUqKSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGN1bGF0ZUFuaW1h
dGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1h
dGVkVHlwZSosIFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVk
VHlwZSopIG92ZXJyaWRlOwotICAgIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmlu
ZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3Ro
LmNwcAppbmRleCAwZmFjM2ViMjM4ZTQ1YTA2YWM2ZjdlZjVhN2Q2ZDU2NmRiNTE2MGFmLi5hMmUw
ZjFlMDA4YjU0ZDEzMjlmMmY1NzVlMjNhNWI2MDc1ODU0YmNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZExlbmd0aC5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTVkdBbmltYXRl
ZExlbmd0aEFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2Us
IHVuc2lnbmUKICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBU1NFUlQobV9j
b250ZXh0RWxlbWVudCk7CiAKLSAgICBhdXRvIGZyb21TVkdMZW5ndGggPSAobV9hbmltYXRpb25F
bGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBhbmltYXRlZCA6IGZyb20p
LT5hczxTVkdMZW5ndGhWYWx1ZT4oKTsKKyAgICBhdXRvIGZyb21TVkdMZW5ndGggPSAobV9hbmlt
YXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmlt
YXRlZCA6IGZyb20pLT5hczxTVkdMZW5ndGhWYWx1ZT4oKTsKICAgICBhdXRvIHRvU1ZHTGVuZ3Ro
ID0gdG8tPmFzPFNWR0xlbmd0aFZhbHVlPigpOwogICAgIGNvbnN0IGF1dG8mIHRvQXRFbmRPZkR1
cmF0aW9uU1ZHTGVuZ3RoID0gdG9BdEVuZE9mRHVyYXRpb24tPmFzPFNWR0xlbmd0aFZhbHVlPigp
OwogICAgIGF1dG8mIGFuaW1hdGVkU1ZHTGVuZ3RoID0gYW5pbWF0ZWQtPmFzPFNWR0xlbmd0aFZh
bHVlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTGVuZ3Ro
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcApp
bmRleCBkMTI5NzdkMDM3MzE2NzViNmEzNmRhYzAyNjY5MTMyYzBhZDg4YTU3Li5jNDJjYTNlMTc3
YTk1Mjc5MjM2MGY5OWQ4MmI3ZmZhYmMwN2VmMjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcApAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFNWR0FuaW1h
dGVkTGVuZ3RoTGlzdEFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNl
bnRhZ2UsIHVucwogICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwogICAgIEFTU0VSVCht
X2NvbnRleHRFbGVtZW50KTsKIAotICAgIGF1dG8gZnJvbUxlbmd0aExpc3QgPSAobV9hbmltYXRp
b25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBhbmltYXRlZCA6IGZy
b20pLT5hczxTVkdMZW5ndGhMaXN0VmFsdWVzPigpOworICAgIGF1dG8gZnJvbUxlbmd0aExpc3Qg
PSAobV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6
VG8gPyBhbmltYXRlZCA6IGZyb20pLT5hczxTVkdMZW5ndGhMaXN0VmFsdWVzPigpOwogICAgIGF1
dG8gdG9MZW5ndGhMaXN0ID0gdG8tPmFzPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCk7CiAgICAgY29u
c3QgYXV0byYgdG9BdEVuZE9mRHVyYXRpb25MZW5ndGhMaXN0ID0gdG9BdEVuZE9mRHVyYXRpb24t
PmFzPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCk7CiAgICAgYXV0byYgYW5pbWF0ZWRMZW5ndGhMaXN0
ID0gYW5pbWF0ZWQtPmFzPFNWR0xlbmd0aExpc3RWYWx1ZXM+KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkTnVtYmVyLmNwcAppbmRleCBiNTZhMzM1YmFjZWMxNjhmOGE1ZWU0NjIyZGQw
YjkyOTIyYjI0NmVlLi5hMWNmZmE0ODdiMGUyOTRjODA1NjdhZGI0ODA5NTBmM2U3N2E2NzE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAKQEAgLTc5LDcgKzc5LDcg
QEAgdm9pZCBTVkdBbmltYXRlZE51bWJlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVl
KGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmUKICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50
KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVudCk7CiAKLSAgICBhdXRvIGZyb21OdW1iZXIg
PSAobV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gPyBh
bmltYXRlZCA6IGZyb20pLT5hczxmbG9hdD4oKTsKKyAgICBhdXRvIGZyb21OdW1iZXIgPSAobV9h
bmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBh
bmltYXRlZCA6IGZyb20pLT5hczxmbG9hdD4oKTsKICAgICBhdXRvIHRvTnVtYmVyID0gdG8tPmFz
PGZsb2F0PigpOwogICAgIGNvbnN0IGF1dG8gdG9BdEVuZE9mRHVyYXRpb25OdW1iZXIgPSB0b0F0
RW5kT2ZEdXJhdGlvbi0+YXM8ZmxvYXQ+KCk7CiAgICAgYXV0byYgYW5pbWF0ZWROdW1iZXIgPSBh
bmltYXRlZC0+YXM8ZmxvYXQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWROdW1iZXJMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51
bWJlckxpc3QuY3BwCmluZGV4IGJjYjY4NDg3ZDJkNjE4OGUxMzhjN2FhNjRlNTViNmM2ZjMxZjVi
MTkuLmY1Njk4M2NiZDE5ZGJhZGZmMmMyZTQxNmJhYjRiZjBmYzk0ZjA5YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCkBAIC04MSw3ICs4MSw3IEBA
IHZvaWQgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFs
dWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zCiB7CiAgICAgQVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVu
dCk7CiAKLSAgICBjb25zdCBhdXRvJiBmcm9tTnVtYmVyTGlzdCA9IChtX2FuaW1hdGlvbkVsZW1l
bnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkIDogZnJvbSktPmFz
PFNWR051bWJlckxpc3RWYWx1ZXM+KCk7CisgICAgY29uc3QgYXV0byYgZnJvbU51bWJlckxpc3Qg
PSAobV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6
VG8gPyBhbmltYXRlZCA6IGZyb20pLT5hczxTVkdOdW1iZXJMaXN0VmFsdWVzPigpOwogICAgIGNv
bnN0IGF1dG8mIHRvTnVtYmVyTGlzdCA9IHRvLT5hczxTVkdOdW1iZXJMaXN0VmFsdWVzPigpOwog
ICAgIGNvbnN0IGF1dG8mIHRvQXRFbmRPZkR1cmF0aW9uTnVtYmVyTGlzdCA9IHRvQXRFbmRPZkR1
cmF0aW9uLT5hczxTVkdOdW1iZXJMaXN0VmFsdWVzPigpOwogICAgIGF1dG8mIGFuaW1hdGVkTnVt
YmVyTGlzdCA9IGFuaW1hdGVkLT5hczxTVkdOdW1iZXJMaXN0VmFsdWVzPigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3Bw
CmluZGV4IDE4NDVmMTk2NDY5ZTdhZDc4MTE4OWU0M2U2NDhiNzgwYTA0MzZlOWMuLjQ1MjY2OTRl
OWQxYmMxMzA2OGMzMWU5MWI5Y2E1NTcyZDE3ZmJiODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAKQEAgLTc4LDcg
Kzc4LDcgQEAgdm9pZCBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyQW5pbWF0b3I6OmNh
bGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2UKICAgICBBU1NFUlQobV9hbmltYXRpb25F
bGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVudCk7CiAKLSAgICBjb25zdCBhdXRv
JiBmcm9tTnVtYmVyUGFpciA9IChtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9
PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVkIDogZnJvbSktPmFzPHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+PigpOworICAgIGNvbnN0IGF1dG8mIGZyb21OdW1iZXJQYWlyID0gKG1fYW5pbWF0aW9uRWxl
bWVudC0+YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQgOiBm
cm9tKS0+YXM8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+KCk7CiAgICAgY29uc3QgYXV0byYgdG9O
dW1iZXJQYWlyID0gdG8tPmFzPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PigpOwogICAgIGNvbnN0
IGF1dG8mIHRvQXRFbmRPZkR1cmF0aW9uTnVtYmVyUGFpciA9IHRvQXRFbmRPZkR1cmF0aW9uLT5h
czxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4oKTsKICAgICBhdXRvJiBhbmltYXRlZE51bWJlclBh
aXIgPSBhbmltYXRlZC0+YXM8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwCmluZGV4IDE0NTIwMzAzZWYxNzU1ODBlZjA1MDEzMmQ0
ZWEzZWRiYjg2YTcyNWIuLjIwZjQ5NWYxMjc0NzU1NzgxNTJhZTNmZTVmZDYwMTc2ZWFhMTc3NDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwCkBAIC0xMDgsNyArMTA4LDcg
QEAgdm9pZCBTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShm
bG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZAogICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQp
OwogICAgIEFTU0VSVChtX2NvbnRleHRFbGVtZW50KTsKIAotICAgIGJvb2wgaXNUb0FuaW1hdGlv
biA9IG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uOwor
ICAgIGJvb2wgaXNUb0FuaW1hdGlvbiA9IG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0aW9uTW9k
ZSgpID09IEFuaW1hdGlvbk1vZGU6OlRvOwogICAgIGF1dG8mIGFuaW1hdGVkUGF0aCA9IGFuaW1h
dGVkLT5hczxTVkdQYXRoQnl0ZVN0cmVhbT4oKTsKIAogICAgIFNWR1BhdGhCeXRlU3RyZWFtIHVu
ZGVybHlpbmdQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVk
UG9pbnRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5j
cHAKaW5kZXggOGFhMDM5ZDNmNmUxZDgzMjE4YTBiYzg3ZGJlZTA5YjBlZjcwYzE2OS4uMmZmZTBj
MTA1YzNkYTgxN2JmYzk1M2QzOGJiMGQ5OTJhMmVmOTlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgU1ZHQW5p
bWF0ZWRQb2ludExpc3RBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpCiB7CiAgICAgQVNTRVJUKG1fYW5pbWF0aW9uRWxlbWVudCk7CiAKLSAgICBj
b25zdCBhdXRvJiBmcm9tUG9pbnRMaXN0ID0gKG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0aW9u
TW9kZSgpID09IFRvQW5pbWF0aW9uID8gYW5pbWF0ZWQgOiBmcm9tKS0+YXM8U1ZHUG9pbnRMaXN0
VmFsdWVzPigpOworICAgIGNvbnN0IGF1dG8mIGZyb21Qb2ludExpc3QgPSAobV9hbmltYXRpb25F
bGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6
IGZyb20pLT5hczxTVkdQb2ludExpc3RWYWx1ZXM+KCk7CiAgICAgY29uc3QgYXV0byYgdG9Qb2lu
dExpc3QgPSB0by0+YXM8U1ZHUG9pbnRMaXN0VmFsdWVzPigpOwogICAgIGNvbnN0IGF1dG8mIHRv
QXRFbmRPZkR1cmF0aW9uUG9pbnRMaXN0ID0gdG9BdEVuZE9mRHVyYXRpb24tPmFzPFNWR1BvaW50
TGlzdFZhbHVlcz4oKTsKICAgICBhdXRvJiBhbmltYXRlZFBvaW50TGlzdCA9IGFuaW1hdGVkLT5h
czxTVkdQb2ludExpc3RWYWx1ZXM+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRQb2ludExpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBv
aW50TGlzdC5oCmluZGV4IDFlNzczZTFjOThkNWExNzlhYmEyMzhiOWQxNjNhYWViMjE3NTIwYjAu
LjRmYmQyNWM0MGE1YjhmNjExZDdkNjk3OWJlNmZlZDJhMGUxZWMxMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5oCkBAIC0yMiw2ICsyMiw4IEBACiAKICNpbmNs
dWRlICJTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaCIKICNpbmNsdWRlICJTVkdBbmlt
YXRlZFR5cGVBbmltYXRvci5oIgorI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZS5oIgorI2luY2x1ZGUg
IlNWR0F0dHJpYnV0ZUFjY2Vzc29yLmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKaW5kZXggN2Q3NDI4NTk5ZWYzYzFhZDIxMDlkN2U5
YmVlZWNmZjNkYmJmM2M5ZS4uMDJiOTYwNWQyZGUzZjUzM2EyMmZhNWVmODZhY2E3ZjUzZjk2ZDgz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVB
c3BlY3RSYXRpby5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBTVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW9BbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW4K
ICAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBU1NFUlQobV9jb250ZXh0RWxl
bWVudCk7CiAKLSAgICBjb25zdCBhdXRvJiBmcm9tUHJlc2VydmVBc3BlY3RSYXRpbyA9IChtX2Fu
aW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBUb0FuaW1hdGlvbiA/IGFuaW1hdGVk
IDogZnJvbSktPmFzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKTsKKyAgICBjb25zdCBh
dXRvJiBmcm9tUHJlc2VydmVBc3BlY3RSYXRpbyA9IChtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1h
dGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpUbyA/IGFuaW1hdGVkIDogZnJvbSktPmFzPFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4oKTsKICAgICBjb25zdCBhdXRvJiB0b1ByZXNlcnZl
QXNwZWN0UmF0aW8gPSB0by0+YXM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPigpOwogICAg
IGF1dG8mIGFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyA9IGFuaW1hdGVkLT5hczxTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZFJlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVj
dC5jcHAKaW5kZXggMTVlODMwNjI3NDc1NzhkMDk0OGFjY2U1MWNlZGIwMGJhZjZiMWFkMy4uMzBm
YTE2YzRmYmRjNTNhZGQxMGQwNDc0YjQ3YzZmNDI0YWVhMTNhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkUmVjdC5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBTVkdBbmltYXRlZFJl
Y3RBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNp
Z25lZAogICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwogICAgIEFTU0VSVChtX2NvbnRl
eHRFbGVtZW50KTsKIAotICAgIGNvbnN0IGF1dG8mIGZyb21SZWN0ID0gKG1fYW5pbWF0aW9uRWxl
bWVudC0+YW5pbWF0aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uID8gYW5pbWF0ZWQgOiBmcm9tKS0+
YXM8RmxvYXRSZWN0PigpOworICAgIGNvbnN0IGF1dG8mIGZyb21SZWN0ID0gKG1fYW5pbWF0aW9u
RWxlbWVudC0+YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQg
OiBmcm9tKS0+YXM8RmxvYXRSZWN0PigpOwogICAgIGNvbnN0IGF1dG8mIHRvUmVjdCA9IHRvLT5h
czxGbG9hdFJlY3Q+KCk7CiAgICAgY29uc3QgYXV0byYgdG9BdEVuZE9mRHVyYXRpb25SZWN0ID0g
dG9BdEVuZE9mRHVyYXRpb24tPmFzPEZsb2F0UmVjdD4oKTsKICAgICBhdXRvJiBhbmltYXRlZFJl
Y3QgPSBhbmltYXRlZC0+YXM8RmxvYXRSZWN0PigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAppbmRleCBlNmZjZDBkNmM5MjJhMzM1MGU0OWJk
OGNmZTUyN2M4MTFlOWYwNTg4Li44YzNjMDg3NGMzYzYyMzZmZTAxZjYyMjA4NDFiODRhOWQ0ZTVh
ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0QW5p
bWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gTmV2ZXIgcmVzaXplIHRoZSBhbmltYXRlZFRyYW5zZm9ybUxpc3Qg
dG8gdGhlIHRvVHJhbnNmb3JtTGlzdCBzaXplLCBpbnN0ZWFkIGVpdGhlciBjbGVhciB0aGUgbGlz
dCBvciBhcHBlbmQgdG8gaXQuCi0gICAgaWYgKCFhbmltYXRlZFRyYW5zZm9ybUxpc3QuaXNFbXB0
eSgpICYmICghbV9hbmltYXRpb25FbGVtZW50LT5pc0FkZGl0aXZlKCkgfHwgbV9hbmltYXRpb25F
bGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24pKQorICAgIGlmICghYW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0LmlzRW1wdHkoKSAmJiAoIW1fYW5pbWF0aW9uRWxlbWVudC0+aXNBZGRp
dGl2ZSgpIHx8IG1fYW5pbWF0aW9uRWxlbWVudC0+YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlv
bk1vZGU6OlRvKSkKICAgICAgICAgYW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNsZWFyKCk7CiAKICAg
ICBhdXRvIGZyb21UcmFuc2Zvcm1MaXN0U2l6ZSA9IGZyb21UcmFuc2Zvcm1MaXN0LnNpemUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25Db250cm9sbGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZGM2MjRiZjVjM2VkYTBhMDZjMWEwZDZjMWE1ZTI1Y2FhNmNjZDZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBA
IC0wLDAgKzEsMzc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eVBhcnNlci5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRvckZhY3RvcnkuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR0FuaW1h
dGlvbkNvbnRyb2xsZXI6OlNWR0FuaW1hdGlvbkNvbnRyb2xsZXIoU1ZHQW5pbWF0aW9uRWxlbWVu
dCYgYW5pbWF0aW9uRWxlbWVudCwgU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCkKKyAgICA6IFNW
R0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlKGFuaW1hdGlvbkVsZW1lbnQsIHRhcmdldEVsZW1lbnQp
Cit7CisgICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IGRldGVybWluZUFuaW1hdGVkUHJvcGVy
dHlUeXBlKG1fYW5pbWF0aW9uRWxlbWVudCwgbV90YXJnZXRFbGVtZW50LCBtX2FuaW1hdGlvbkVs
ZW1lbnQuYXR0cmlidXRlTmFtZSgpKTsKK30KKworU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IqIFNW
R0FuaW1hdGlvbkNvbnRyb2xsZXI6OmVuc3VyZUFuaW1hdG9yKCkKK3sKKyAgICBpZiAoIW1fYW5p
bWF0b3IpCisgICAgICAgIG1fYW5pbWF0b3IgPSBTVkdBbmltYXRvckZhY3Rvcnk6OmNyZWF0ZSgm
bV9hbmltYXRpb25FbGVtZW50LCAmbV90YXJnZXRFbGVtZW50LCBtX2FuaW1hdGVkUHJvcGVydHlU
eXBlKTsKKyAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBtX2FuaW1hdG9yLT50
eXBlKCkpOworICAgIHJldHVybiBtX2FuaW1hdG9yLmdldCgpOworfQorCitib29sIFNWR0FuaW1h
dGlvbkNvbnRyb2xsZXI6OmlzQWRkaXRpdmUoKSBjb25zdAoreworICAgIC8vIFNwZWM6IGh0dHA6
Ly93d3cudzMub3JnL1RSL1NWRy9hbmltYXRlLmh0bWwjQW5pbWF0aW9uQXR0cmlidXRlc0FuZFBy
b3BlcnRpZXMuCisgICAgc3dpdGNoIChtX2FuaW1hdGVkUHJvcGVydHlUeXBlKSB7CisgICAgY2Fz
ZSBBbmltYXRlZEJvb2xlYW46CisgICAgY2FzZSBBbmltYXRlZEVudW1lcmF0aW9uOgorICAgIGNh
c2UgQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgorICAgIGNhc2UgQW5pbWF0ZWRTdHJpbmc6
CisgICAgY2FzZSBBbmltYXRlZFVua25vd246CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIEFuaW1hdGVkQW5nbGU6CisgICAgY2FzZSBBbmltYXRlZENvbG9yOgorICAgIGNhc2UgQW5p
bWF0ZWRJbnRlZ2VyOgorICAgIGNhc2UgQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOgor
ICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6CisgICAgY2FzZSBBbmltYXRlZExlbmd0aExpc3Q6Cisg
ICAgY2FzZSBBbmltYXRlZE51bWJlcjoKKyAgICBjYXNlIEFuaW1hdGVkTnVtYmVyTGlzdDoKKyAg
ICBjYXNlIEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXI6CisgICAgY2FzZSBBbmltYXRlZFBh
dGg6CisgICAgY2FzZSBBbmltYXRlZFBvaW50czoKKyAgICBjYXNlIEFuaW1hdGVkUmVjdDoKKyAg
ICBjYXNlIEFuaW1hdGVkVHJhbnNmb3JtTGlzdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29sIFNWR0FuaW1hdGlvbkNvbnRyb2xsZXI6Omhh
c1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duOworfQorCitib29sIFNWR0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcs
IGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCit7CisgICAgbV9hbmltYXRpb25FbGVtZW50LmRldGVy
bWluZVByb3BlcnR5VmFsdWVUeXBlcyhmcm9tU3RyaW5nLCB0b1N0cmluZyk7CisgICAgZW5zdXJl
QW5pbWF0b3IoKS0+Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKG1fZnJvbVR5cGUsIG1fdG9UeXBl
LCBmcm9tU3RyaW5nLCB0b1N0cmluZyk7CisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5
cGUgPT0gbV9hbmltYXRvci0+dHlwZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
VkdBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQoreworICAgIGlmIChtX2Fu
aW1hdGlvbkVsZW1lbnQuYW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OkJ5ICYmICFp
c0FkZGl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGZyb20tYnkgYW5p
bWF0aW9uIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhdHRyaWJ1dGVzIHRoYXQgc3VwcG9ydCBhZGRp
dGlvbiAoZS5nLiBtb3N0IG51bWVyaWMgYXR0cmlidXRlcykuCisgICAgaWYgKG1fYW5pbWF0aW9u
RWxlbWVudC5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6RnJvbUJ5ICYmICFpc0Fk
ZGl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYW5pbWF0aW9uRWxlbWVu
dC5kZXRlcm1pbmVQcm9wZXJ0eVZhbHVlVHlwZXMoZnJvbVN0cmluZywgYnlTdHJpbmcpOworICAg
IGVuc3VyZUFuaW1hdG9yKCktPmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhtX2Zyb21UeXBlLCBt
X3RvVHlwZSwgZnJvbVN0cmluZywgYnlTdHJpbmcpOworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJv
cGVydHlUeXBlID09IG1fYW5pbWF0b3ItPnR5cGUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25W
YWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQoreworICAgIGlmICh0
b0F0RW5kT2ZEdXJhdGlvblN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX3RvQXRFbmRPZkR1cmF0aW9uVHlwZSA9IGVuc3VyZUFuaW1hdG9yKCktPmNvbnN0cnVj
dEZyb21TdHJpbmcodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpOworICAgIHJldHVybiB0cnVlOwor
fQorCisjaWZuZGVmIE5ERUJVRworc3RhdGljIGlubGluZSBib29sIHByb3BlcnR5VHlwZXNBcmVD
b25zaXN0ZW50KEFuaW1hdGVkUHJvcGVydHlUeXBlIGV4cGVjdGVkUHJvcGVydHlUeXBlLCBjb25z
dCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCit7CisgICAg
Zm9yIChhdXRvJiB0eXBlIDogYW5pbWF0ZWRUeXBlcykgeworICAgICAgICBmb3IgKGF1dG8mIHBy
b3BlcnR5IDogdHlwZS5wcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRQcm9w
ZXJ0eVR5cGUgIT0gcHJvcGVydHktPmFuaW1hdGVkUHJvcGVydHlUeXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGFsbG93ZWQgaW5jb25zaXN0ZW5jeS4gU1ZHQW5p
bWF0ZWRBbmdsZUFuaW1hdG9yIGhhbmRsZXMgYm90aCBTVkdBbmltYXRlZEFuZ2xlICYgU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbiBmb3IgbWFya2VycyBvcmllbnQgYXR0cmlidXRlLgorICAgICAgICAg
ICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlwZSA9PSBBbmltYXRlZEFuZ2xlICYmIHByb3Bl
cnR5LT5hbmltYXRlZFByb3BlcnR5VHlwZSgpID09IEFuaW1hdGVkRW51bWVyYXRpb24pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKK3ZvaWQgU1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzZXRBbmltYXRlZFR5
cGUoKQoreworICAgIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBhbmltYXRvciA9IGVuc3VyZUFu
aW1hdG9yKCk7CisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gYW5pbWF0b3It
PnR5cGUoKSk7CisKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gbV9h
bmltYXRpb25FbGVtZW50LmF0dHJpYnV0ZU5hbWUoKTsKKyAgICBTVkdBbmltYXRpb25FbGVtZW50
OjpTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IG1fYW5pbWF0aW9uRWxlbWVudC5z
aG91bGRBcHBseUFuaW1hdGlvbigmbV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKwor
ICAgIGlmIChzaG91bGRBcHBseSA9PSBTVkdBbmltYXRpb25FbGVtZW50OjpEb250QXBwbHlBbmlt
YXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzaG91bGRBcHBseSA9PSBTVkdBbmlt
YXRpb25FbGVtZW50OjpBcHBseVhNTEFuaW1hdGlvbiB8fCBzaG91bGRBcHBseSA9PSBTVkdBbmlt
YXRpb25FbGVtZW50OjpBcHBseVhNTGFuZENTU0FuaW1hdGlvbikgeworICAgICAgICAvLyBTVkcg
RE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICAgICAgbV9hbmltYXRlZFByb3Bl
cnRpZXMgPSBhbmltYXRvci0+ZmluZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUo
bV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgaWYgKG1fYW5pbWF0ZWRQ
cm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQocHJvcGVydHlUeXBlc0FyZUNvbnNpc3RlbnQobV9hbmltYXRlZFByb3BlcnR5VHlwZSwgbV9h
bmltYXRlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKKyAgICAg
ICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gYW5pbWF0b3ItPnN0YXJ0QW5pbVZhbEFuaW1hdGlvbiht
X2FuaW1hdGVkUHJvcGVydGllcyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYW5pbWF0
b3ItPnJlc2V0QW5pbVZhbFRvQmFzZVZhbChtX2FuaW1hdGVkUHJvcGVydGllcywgKm1fYW5pbWF0
ZWRUeXBlKTsKKyAgICAgICAgICAgIGFuaW1hdG9yLT5hbmltVmFsRGlkQ2hhbmdlKG1fYW5pbWF0
ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQ1NTIHByb3BlcnRpZXMgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICBBU1NFUlQobV9hbmlt
YXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKTsKKyAgICBTdHJpbmcgYmFzZVZhbHVlOworCisgICAg
aWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFwcGx5Q1NTQW5pbWF0aW9u
KSB7CisgICAgICAgIEFTU0VSVChTVkdBbmltYXRpb25FbGVtZW50Ojppc1RhcmdldEF0dHJpYnV0
ZUNTU1Byb3BlcnR5KCZtX3RhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKTsKKyAgICAgICAg
bV9hbmltYXRpb25FbGVtZW50LmNvbXB1dGVDU1NQcm9wZXJ0eVZhbHVlKCZtX3RhcmdldEVsZW1l
bnQsIGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSksIGJhc2VWYWx1ZSk7
CisgICAgfQorCisgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKKyAgICAgICAgbV9hbmltYXRlZFR5
cGUgPSBhbmltYXRvci0+Y29uc3RydWN0RnJvbVN0cmluZyhiYXNlVmFsdWUpOworICAgIGVsc2UK
KyAgICAgICAgbV9hbmltYXRlZFR5cGUtPnNldFZhbHVlQXNTdHJpbmcoYXR0cmlidXRlTmFtZSwg
YmFzZVZhbHVlKTsKK30KKwordm9pZCBTVkdBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVB
bmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdT
TUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKK3sKKyAgICBBU1NFUlQocmVzdWx0RWxlbWVudCk7
CisKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gbV9hbmltYXRpb25F
bGVtZW50LmF0dHJpYnV0ZU5hbWUoKTsKKyAgICBTVkdBbmltYXRpb25FbGVtZW50OjpTaG91bGRB
cHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9ICBtX2FuaW1hdGlvbkVsZW1lbnQuc2hvdWxkQXBw
bHlBbmltYXRpb24oJm1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisgICAgCisgICAg
aWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkRvbnRBcHBseUFuaW1hdGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
PT0gZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5cGUobV9hbmltYXRpb25FbGVtZW50LCBtX3Rh
cmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKTsKKworICAgIEFTU0VSVChwZXJjZW50YWdlID49
IDAgJiYgcGVyY2VudGFnZSA8PSAxKTsKKyAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlw
ZSAhPSBBbmltYXRlZFRyYW5zZm9ybUxpc3QgfHwgbV9hbmltYXRpb25FbGVtZW50Lmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKTsKKyAgICBBU1NFUlQobV9hbmltYXRl
ZFByb3BlcnR5VHlwZSAhPSBBbmltYXRlZFVua25vd24pOworICAgIEFTU0VSVChtX2FuaW1hdG9y
KTsKKyAgICBBU1NFUlQobV9hbmltYXRvci0+dHlwZSgpID09IG1fYW5pbWF0ZWRQcm9wZXJ0eVR5
cGUpOworICAgIEFTU0VSVChtX2Zyb21UeXBlKTsKKyAgICBBU1NFUlQobV9mcm9tVHlwZS0+dHlw
ZSgpID09IG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUpOworICAgIEFTU0VSVChtX3RvVHlwZSk7CisK
KyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXBwbHlYTUxBbmlt
YXRpb24gfHwgc2hvdWxkQXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXBwbHlYTUxhbmRD
U1NBbmltYXRpb24pIHsKKyAgICAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2Rl
LXBhdGguCisgICAgICAgIGlmIChtX2FuaW1hdG9yLT5maW5kQW5pbWF0ZWRQcm9wZXJ0aWVzRm9y
QXR0cmlidXRlTmFtZShtX3RhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdBbmltYXRlRWxlbWVudEJhc2Um
IHJlc3VsdEFuaW1hdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxTVkdBbmltYXRlRWxlbWVudEJhc2U+
KCpyZXN1bHRFbGVtZW50KTsKKyAgICBTVkdBbmltYXRpb25Db250cm9sbGVyJiByZXN1bHRBbmlt
YXRpb25Db250cm9sbGVyID0gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0aW9uQ29udHJvbGxlciY+KHJl
c3VsdEFuaW1hdGlvbkVsZW1lbnQuZW5zdXJlQ29udHJvbGxlcigpKTsKKyAgICAKKyAgICBBU1NF
UlQocmVzdWx0QW5pbWF0aW9uQ29udHJvbGxlci5tX2FuaW1hdGVkVHlwZSk7CisgICAgQVNTRVJU
KHJlc3VsdEFuaW1hdGlvbkNvbnRyb2xsZXIubV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBtX2Fu
aW1hdGVkUHJvcGVydHlUeXBlKTsKKworICAgIGlmIChtX2FuaW1hdGlvbkVsZW1lbnQuaGFzVGFn
TmFtZShTVkdOYW1lczo6c2V0VGFnKSkKKyAgICAgICAgcGVyY2VudGFnZSA9IDE7CisKKyAgICBp
ZiAobV9hbmltYXRpb25FbGVtZW50LmNhbGNNb2RlKCkgPT0gQ2FsY01vZGU6OkRpc2NyZXRlKQor
ICAgICAgICBwZXJjZW50YWdlID0gcGVyY2VudGFnZSA8IDAuNSA/IDAgOiAxOworCisgICAgLy8g
VGFyZ2V0IGVsZW1lbnQgbWlnaHQgaGF2ZSBjaGFuZ2VkLgorICAgIG1fYW5pbWF0b3ItPnNldENv
bnRleHRFbGVtZW50KCZtX3RhcmdldEVsZW1lbnQpOworCisgICAgLy8gQmUgc3VyZSB0byBkZXRh
Y2ggbGlzdCB3cmFwcGVycyBiZWZvcmUgd2UgbW9kZml5IHRoZWlyIHVuZGVybHlpbmcgdmFsdWUu
IElmIHdlJ2QgZG8KKyAgICAvLyBpZiBhZnRlciBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKCkgcmFu
IHRoZSBjYWNoZWQgcG9pbnRlcnMgaW4gdGhlIGxpc3QgcHJvcGVyeSB0ZWFyCisgICAgLy8gb2Zm
cyB3b3VsZCBwb2ludCBub3doZXJlLCBhbmQgd2UgY291bGRuJ3QgY3JlYXRlIGNvcGllcyBvZiB0
aG9zZSB2YWx1ZXMgYW55bW9yZSwKKyAgICAvLyB3aGlsZSBkZXRhY2hpbmcuIFRoaXMgaXMgY292
ZXJlZCBieSBhc3NlcnRpb25zLCBtb3ZpbmcgdGhpcyBkb3duIHdvdWxkIGZpcmUgdGhlbS4KKyAg
ICBpZiAoIW1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hbmltYXRv
ci0+YW5pbVZhbFdpbGxDaGFuZ2UobV9hbmltYXRlZFByb3BlcnRpZXMpOworCisgICAgLy8gVmFs
dWVzLWFuaW1hdGlvbiBhY2N1bXVsYXRlcyB1c2luZyB0aGUgbGFzdCB2YWx1ZXMgZW50cnkgY29y
cmVzcG9uZGluZyB0byB0aGUgZW5kIG9mIGR1cmF0aW9uIHRpbWUuCisgICAgU1ZHQW5pbWF0ZWRU
eXBlKiB0b0F0RW5kT2ZEdXJhdGlvblR5cGUgPSBtX3RvQXRFbmRPZkR1cmF0aW9uVHlwZSA/IG1f
dG9BdEVuZE9mRHVyYXRpb25UeXBlLmdldCgpIDogbV90b1R5cGUuZ2V0KCk7CisgICAgbV9hbmlt
YXRvci0+Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgbV9m
cm9tVHlwZS5nZXQoKSwgbV90b1R5cGUuZ2V0KCksIHRvQXRFbmRPZkR1cmF0aW9uVHlwZSwgcmVz
dWx0QW5pbWF0aW9uQ29udHJvbGxlci5tX2FuaW1hdGVkVHlwZS5nZXQoKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQoU1ZHRWxlbWVudCYgdGFyZ2V0
RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQoIXRhcmdldEVsZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKKworICAgIGlmICghdGFy
Z2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5zZXRQcm9wZXJ0
eShpZCwgdmFsdWUsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGFyZ2V0RWxlbWVu
dC5pbnZhbGlkYXRlU3R5bGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUNTU1By
b3BlcnR5RnJvbVRhcmdldChTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBDU1NQcm9wZXJ0eUlE
IGlkKQoreworICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC5tX2RlbGV0aW9uSGFzQmVndW4pOwor
ICAgIHRhcmdldEVsZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkucmVt
b3ZlUHJvcGVydHkoaWQpOworICAgIHRhcmdldEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5j
ZXMoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBE
byB3ZSByZWFsbHkgbmVlZCB0byBjaGVjayBib3RoIGlzQ29ubmVjdGVkIGFuZCAhcGFyZW50Tm9k
ZT8KKyAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8ICF0YXJnZXRFbGVtZW50
LmlzQ29ubmVjdGVkKCkgfHwgIXRhcmdldEVsZW1lbnQucGFyZW50Tm9kZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVO
YW1lLmxvY2FsTmFtZSgpKTsKKworICAgIFNWR0VsZW1lbnQ6Okluc3RhbmNlVXBkYXRlQmxvY2tl
ciBibG9ja2VyKHRhcmdldEVsZW1lbnQpOworICAgIGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldCh0
YXJnZXRFbGVtZW50LCBpZCwgdmFsdWVBc1N0cmluZyk7CisKKyAgICAvLyBJZiB0aGUgdGFyZ2V0
IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBkYXRlIHRoZW0gYXMgd2VsbCwgdy9vIHJlcXVpcmlu
ZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1aWx0LgorICAgIGZvciAoYXV0byogaW5zdGFuY2Ug
OiB0YXJnZXRFbGVtZW50Lmluc3RhbmNlcygpKQorICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9U
YXJnZXQoKmluc3RhbmNlLCBpZCwgdmFsdWVBc1N0cmluZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMoU1ZHRWxlbWVudCYg
dGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3sKKyAg
ICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBpc0Nvbm5lY3RlZCBh
bmQgIXBhcmVudE5vZGU/CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAh
dGFyZ2V0RWxlbWVudC5pc0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTUHJvcGVydHlJRCBpZCA9IGNzc1Byb3BlcnR5
SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSk7CisKKyAgICBTVkdFbGVtZW50OjpJbnN0YW5j
ZVVwZGF0ZUJsb2NrZXIgYmxvY2tlcih0YXJnZXRFbGVtZW50KTsKKyAgICByZW1vdmVDU1NQcm9w
ZXJ0eUZyb21UYXJnZXQodGFyZ2V0RWxlbWVudCwgaWQpOworCisgICAgLy8gSWYgdGhlIHRhcmdl
dCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJp
bmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KKyAgICBmb3IgKGF1dG8qIGluc3RhbmNl
IDogdGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKKyAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHlG
cm9tVGFyZ2V0KCppbnN0YW5jZSwgaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5
VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdlKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgQVNTRVJUKCF0YXJnZXRFbGVt
ZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7CisgICAgdGFyZ2V0RWxlbWVudC5zdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5VGFy
Z2V0QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdlKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1l
bnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgaWYgKGF0dHJp
YnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5pc0Nvbm5lY3RlZCgpIHx8
ICF0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1ZH
RWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIodGFyZ2V0RWxlbWVudCk7Cisg
ICAgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdlKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0
ZU5hbWUpOworCisgICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVw
ZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVi
dWlsdC4KKyAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMo
KSkKKyAgICAgICAgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdlKCppbnN0YW5jZSwgYXR0
cmlidXRlTmFtZSk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uQ29udHJvbGxlcjo6YXBwbHlSZXN1
bHRzVG9UYXJnZXQoKQoreworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlICE9IEFu
aW1hdGVkVHJhbnNmb3JtTGlzdCB8fCBtX2FuaW1hdGlvbkVsZW1lbnQuaGFzVGFnTmFtZShTVkdO
YW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykpOworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVy
dHlUeXBlICE9IEFuaW1hdGVkVW5rbm93bik7CisgICAgQVNTRVJUKG1fYW5pbWF0b3IpOworCisg
ICAgLy8gRWFybHkgZXhpdCBpZiBvdXIgYW5pbWF0ZWQgdHlwZSBnb3QgZGVzdHJveWVkIGJ5IGEg
cHJldmlvdXMgZW5kZWRBY3RpdmVJbnRlcnZhbCgpLgorICAgIGlmICghbV9hbmltYXRlZFR5cGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUgPSBtX2FuaW1hdGlvbkVsZW1lbnQuYXR0cmlidXRlTmFtZSgpOworCisgICAgaWYgKG1fYW5p
bWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBh
bmltYXRpb24gY29kZS1wYXRoLgorICAgICAgICAvLyBDb252ZXJ0IHRoZSByZXN1bHQgb2YgdGhl
IGFuaW1hdGlvbiB0byBhIFN0cmluZyBhbmQgYXBwbHkgaXQgYXMgQ1NTIHByb3BlcnR5IG9uIHRo
ZSB0YXJnZXQgJiBhbGwgaW5zdGFuY2VzLgorICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJn
ZXRBbmRJbnN0YW5jZXMobV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBtX2FuaW1hdGVk
VHlwZS0+dmFsdWVBc1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFdlIGRvIHVwZGF0ZSB0aGUgc3R5bGUgYW5kIHRoZSBhbmltYXRpb24gcHJvcGVydHkgaW5kZXBl
bmRlbnQgb2YgZWFjaCBvdGhlci4KKyAgICBTVkdBbmltYXRpb25FbGVtZW50OjpTaG91bGRBcHBs
eUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IG1fYW5pbWF0aW9uRWxlbWVudC5zaG91bGRBcHBseUFu
aW1hdGlvbigmbV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxk
QXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXBwbHlYTUxhbmRDU1NBbmltYXRpb24pCisg
ICAgICAgIGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcyhtX3RhcmdldEVsZW1l
bnQsIGF0dHJpYnV0ZU5hbWUsIG1fYW5pbWF0ZWRUeXBlLT52YWx1ZUFzU3RyaW5nKCkpOworCisg
ICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCisgICAgLy8gQXQgdGhp
cyBwb2ludCB0aGUgU1ZHIERPTSB2YWx1ZXMgYXJlIGFscmVhZHkgY2hhbmdlZCwgdW5saWtlIGZv
ciBDU1MuCisgICAgLy8gV2Ugb25seSBoYXZlIHRvIHRyaWdnZXIgdXBkYXRlIG5vdGlmaWNhdGlv
bnMgaGVyZS4KKyAgICBtX2FuaW1hdG9yLT5hbmltVmFsRGlkQ2hhbmdlKG1fYW5pbWF0ZWRQcm9w
ZXJ0aWVzKTsKKyAgICBub3RpZnlUYXJnZXRBbmRJbnN0YW5jZXNBYm91dEFuaW1WYWxDaGFuZ2Uo
bV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKK30KKwordm9pZCBTVkdBbmltYXRpb25D
b250cm9sbGVyOjpjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KQor
eworICAgIGlmICghbV9hbmltYXRlZFR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElm
IHRoZSBTVkdBbmltYXRlZFR5cGUgaXMgYSBsaXN0IHR5cGUsIGUuZy4gU1ZHTGVuZ3RoTGlzdFZh
bHVlcywgdGhlIHdyYXBwZXJzIG9mIHRoZQorICAgIC8vIGFuaW1hdGVkIHByb3BlcnRpZXMgaGF2
ZSB0byBiZSBkZXRhY2hlZCBmcm9tIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBiZWZvcmUgaXQncyBk
ZWxldGVkLgorICAgIGlmICghbV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAgICAg
ICBtX2FuaW1hdG9yLT5hbmltVmFsV2lsbENoYW5nZShtX2FuaW1hdGVkUHJvcGVydGllcyk7CisK
KyAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHsKKyAgICAgICAgbV9hbmltYXRlZFR5cGUgPSBudWxs
cHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSA9IG1fYW5pbWF0aW9uRWxlbWVudC5hdHRyaWJ1dGVOYW1lKCk7CisKKyAg
ICBpZiAobV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIENTUyBw
cm9wZXJ0aWVzIGFuaW1hdGlvbiBjb2RlLXBhdGguCisgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5
RnJvbVRhcmdldEFuZEluc3RhbmNlcygqdGFyZ2V0RWxlbWVudCwgbV9hbmltYXRpb25FbGVtZW50
LmF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OlNob3VsZEFw
cGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gbV9hbmltYXRpb25FbGVtZW50LnNob3VsZEFwcGx5
QW5pbWF0aW9uKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzaG91bGRB
cHBseSA9PSBTVkdBbmltYXRpb25FbGVtZW50OjpBcHBseVhNTGFuZENTU0FuaW1hdGlvbikKKyAg
ICAgICAgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKCp0YXJnZXRFbGVt
ZW50LCBhdHRyaWJ1dGVOYW1lKTsKKworICAgIC8vIFNWRyBET00gYW5pbVZhbCBhbmltYXRpb24g
Y29kZS1wYXRoLgorICAgIGlmIChtX2FuaW1hdG9yKSB7CisgICAgICAgIG1fYW5pbWF0b3ItPnN0
b3BBbmltVmFsQW5pbWF0aW9uKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgbm90aWZ5
VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdlKCp0YXJnZXRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lKTsKKyAgICB9CisKKyAgICBtX2FuaW1hdGVkUHJvcGVydGllcy5jbGVhcigpOwor
ICAgIG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKK30KKworZmxvYXQgU1ZHQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHRvU3RyaW5nKQoreworICAgIHJldHVybiBlbnN1cmVBbmltYXRvcigpLT5jYWxj
dWxhdGVEaXN0YW5jZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7Cit9CisKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJlZmRkNmQx
NTYyMTg5MGI0Y2E0MzEyMGI3YTE5MGYxMGU2MTQ1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUeXBlLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRUeXBlQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRpb25Db250cm9sbGVyQmFz
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7
CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZHU01JTEVsZW1lbnQ7CisKK2NsYXNzIFNWR0Fu
aW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2Ugewor
cHVibGljOgorICAgIFNWR0FuaW1hdGlvbkNvbnRyb2xsZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCYs
IFNWR0VsZW1lbnQmKTsKKworcHJpdmF0ZToKKyAgICBTVkdBbmltYXRlZFR5cGVBbmltYXRvciog
ZW5zdXJlQW5pbWF0b3IoKTsKKworICAgIHZvaWQgcmVzZXRBbmltYXRlZFR5cGUoKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQp
IG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKSBvdmVycmlkZTsKKyAgICBib29sIGNhbGN1bGF0ZVRv
QXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmlu
Zykgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVy
Y2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVt
ZW50KSBvdmVycmlkZTsKKworICAgIHZvaWQgYXBwbHlSZXN1bHRzVG9UYXJnZXQoKSBvdmVycmlk
ZTsKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcs
IGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgaXNBZGRp
dGl2ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBBbmltYXRlZFByb3BlcnR5VHlwZSBtX2FuaW1hdGVkUHJv
cGVydHlUeXBlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gbV9mcm9t
VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvVHlwZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvQXRFbmRPZkR1cmF0aW9uVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX2FuaW1hdGVkVHlwZTsK
KworICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCBtX2FuaW1hdGVkUHJvcGVydGll
czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I+IG1fYW5pbWF0
b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzcyYWQ1NzBk
NTdjOTVhNWE5MGJhZTQ4M2QyZjBhZTc3OTMwNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcApAQCAtMCwwICsxLDY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNl
LmgiCisKKyNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR0FuaW1hdGlvbkNvbnRyb2xsZXJC
YXNlOjpTVkdBbmltYXRpb25Db250cm9sbGVyQmFzZShTVkdBbmltYXRpb25FbGVtZW50JiBhbmlt
YXRpb25FbGVtZW50LCBTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50KQorICAgIDogbV9hbmltYXRp
b25FbGVtZW50KGFuaW1hdGlvbkVsZW1lbnQpCisgICAgLCBtX3RhcmdldEVsZW1lbnQodGFyZ2V0
RWxlbWVudCkKK3sKK30KKworQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgU1ZHQW5pbWF0aW9uQ29udHJv
bGxlckJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKGNvbnN0IFNWR0FuaW1hdGlv
bkVsZW1lbnQmIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byBwcm9wZXJ0eVR5
cGVzID0gdGFyZ2V0RWxlbWVudC5hbmltYXRlZFByb3BlcnR5VHlwZXNGb3JBdHRyaWJ1dGUoYXR0
cmlidXRlTmFtZSk7CisgICAgaWYgKHByb3BlcnR5VHlwZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gQW5pbWF0ZWRVbmtub3duOworCisgICAgQVNTRVJUKHByb3BlcnR5VHlwZXMuc2l6ZSgp
IDw9IDIpOworICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUgPSBwcm9wZXJ0eVR5cGVzWzBd
OworICAgIGlmIChhbmltYXRpb25FbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVD
b2xvclRhZykgJiYgdHlwZSAhPSBBbmltYXRlZENvbG9yKQorICAgICAgICByZXR1cm4gQW5pbWF0
ZWRVbmtub3duOworCisgICAgLy8gQW5pbWF0aW9ucyBvZiB0cmFuc2Zvcm0gbGlzdHMgYXJlIG5v
dCBhbGxvd2VkIGZvciA8YW5pbWF0ZT4gb3IgPHNldD4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9TVkcvYW5pbWF0ZS5odG1sI0FuaW1hdGlvbkF0dHJpYnV0ZXNBbmRQcm9wZXJ0aWVzCisg
ICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICYmICFhbmltYXRpb25FbGVtZW50
Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKQorICAgICAgICByZXR1
cm4gQW5pbWF0ZWRVbmtub3duOworCisgICAgLy8gRm9ydHVuYXRlbHkgdGhlcmUncyBqdXN0IG9u
ZSBzcGVjaWFsIGNhc2UgbmVlZGVkIGhlcmU6IFNWR01hcmtlckVsZW1lbnRzIG9yaWVudEF0dHIs
IHdoaWNoCisgICAgLy8gY29ycmVzcG9uZHMgdG8gU1ZHQW5pbWF0ZWRBbmdsZSBvcmllbnRBbmds
ZSBhbmQgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcmllbnRUeXBlLiBXZSBoYXZlIHRvCisgICAg
Ly8gZmlndXJlIG91dCB3aG9zZSB2YWx1ZSB0byBjaGFuZ2UgaGVyZS4KKyAgICBpZiAodGFyZ2V0
RWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjptYXJrZXJUYWcpICYmIHR5cGUgPT0gQW5pbWF0
ZWRBbmdsZSkgeworICAgICAgICBBU1NFUlQocHJvcGVydHlUeXBlcy5zaXplKCkgPT0gMik7Cisg
ICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzWzBdID09IEFuaW1hdGVkQW5nbGUpOworICAgICAg
ICBBU1NFUlQocHJvcGVydHlUeXBlc1sxXSA9PSBBbmltYXRlZEVudW1lcmF0aW9uKTsKKyAgICB9
IGVsc2UgaWYgKHByb3BlcnR5VHlwZXMuc2l6ZSgpID09IDIpCisgICAgICAgIEFTU0VSVChwcm9w
ZXJ0eVR5cGVzWzBdID09IHByb3BlcnR5VHlwZXNbMV0pOworCisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25Db250cm9s
bGVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzIzNGYxOGNiNjZlNzM3ZjdhYWJmMmU2MTUyOTU1Njk2YzAxYzFjZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25Db250cm9s
bGVyQmFzZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50OworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNz
IFNWR1NNSUxFbGVtZW50OworCitjbGFzcyBTVkdBbmltYXRpb25Db250cm9sbGVyQmFzZSB7Citw
dWJsaWM6CisgICAgU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UoU1ZHQW5pbWF0aW9uRWxlbWVu
dCYsIFNWR0VsZW1lbnQmKTsKKyAgICB2aXJ0dWFsIH5TVkdBbmltYXRpb25Db250cm9sbGVyQmFz
ZSgpID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBBbmltYXRlZFByb3BlcnR5VHlwZSBkZXRlcm1p
bmVBbmltYXRlZFByb3BlcnR5VHlwZShjb25zdCBTVkdBbmltYXRpb25FbGVtZW50JiwgU1ZHRWxl
bWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0FkZGl0
aXZlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUo
KSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHJlc2V0QW5pbWF0ZWRUeXBlKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KSA9IDA7CisgICAgCisgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRU
b1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0
cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjYWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0cmluZyYgdG9B
dEVuZE9mRHVyYXRpb25TdHJpbmcpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVB
bmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdT
TUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVJl
c3VsdHNUb1RhcmdldCgpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURp
c3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykg
PSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQmIG1fYW5pbWF0
aW9uRWxlbWVudDsKKyAgICBTVkdFbGVtZW50JiBtX3RhcmdldEVsZW1lbnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAppbmRleCAzZjI1ODA4ZjhjNGIyNTVkYTljN2YxNmRmNTk3Yjg5ZjYxZmMyOWFkLi41
YjZiNTZmYmJiNDgyMmY2NzJjMDNlMTE2MzViOTg4NWI0Njg1NmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCkBAIC0yNjgsMTMgKzI2OCwxMyBAQCB2b2lk
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbk1vZGUoKQogewogICAgIC8vIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXNtaWwtYW5pbWF0aW9uLTIwMDEwOTA0LyNBbmlt
RnVuY1ZhbHVlcwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpKQot
ICAgICAgICBzZXRBbmltYXRpb25Nb2RlKFZhbHVlc0FuaW1hdGlvbik7CisgICAgICAgIHNldEFu
aW1hdGlvbk1vZGUoQW5pbWF0aW9uTW9kZTo6VmFsdWVzKTsKICAgICBlbHNlIGlmICghdG9WYWx1
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0QW5pbWF0aW9uTW9kZShmcm9tVmFsdWUoKS5pc0Vt
cHR5KCkgPyBUb0FuaW1hdGlvbiA6IEZyb21Ub0FuaW1hdGlvbik7CisgICAgICAgIHNldEFuaW1h
dGlvbk1vZGUoZnJvbVZhbHVlKCkuaXNFbXB0eSgpID8gQW5pbWF0aW9uTW9kZTo6VG8gOiBBbmlt
YXRpb25Nb2RlOjpGcm9tVG8pOwogICAgIGVsc2UgaWYgKCFieVZhbHVlKCkuaXNFbXB0eSgpKQot
ICAgICAgICBzZXRBbmltYXRpb25Nb2RlKGZyb21WYWx1ZSgpLmlzRW1wdHkoKSA/IEJ5QW5pbWF0
aW9uIDogRnJvbUJ5QW5pbWF0aW9uKTsKKyAgICAgICAgc2V0QW5pbWF0aW9uTW9kZShmcm9tVmFs
dWUoKS5pc0VtcHR5KCkgPyBBbmltYXRpb25Nb2RlOjpCeSA6IEFuaW1hdGlvbk1vZGU6OkZyb21C
eSk7CiAgICAgZWxzZQotICAgICAgICBzZXRBbmltYXRpb25Nb2RlKE5vQW5pbWF0aW9uKTsKKyAg
ICAgICAgc2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb25Nb2RlOjpOb25lKTsKIH0KIAogdm9pZCBT
VkdBbmltYXRpb25FbGVtZW50OjpzZXRDYWxjTW9kZShjb25zdCBBdG9taWNTdHJpbmcmIGNhbGNN
b2RlKQpAQCAtMzA1LDcgKzMwNSw2IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0
cmlidXRlVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVR5cGUpCiAgICAgICAgIG1f
YXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGU6OlhNTDsKICAgICBlbHNlCiAgICAgICAgIG1f
YXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGU6OkF1dG87Ci0gICAgY2hlY2tJbnZhbGlkQ1NT
QXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KCkpOwogfQogCiBTdHJpbmcgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6dG9WYWx1ZSgpIGNvbnN0CkBAIC0zMjcsMTQgKzMyNiwxNCBAQCBib29sIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmlzQWRkaXRpdmUoKSBjb25zdAogewogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IHN1bSgic3VtIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmFkZGl0aXZlQXR0cik7Ci0gICAg
cmV0dXJuIHZhbHVlID09IHN1bSB8fCBhbmltYXRpb25Nb2RlKCkgPT0gQnlBbmltYXRpb247Cisg
ICAgcmV0dXJuIHZhbHVlID09IHN1bSB8fCBhbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9k
ZTo6Qnk7CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNBY2N1bXVsYXRlZCgpIGNv
bnN0CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gc3Vt
KCJzdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6YWNjdW11bGF0ZUF0dHIpOwotICAgIHJldHVybiB2YWx1ZSA9PSBzdW0gJiYgYW5pbWF0
aW9uTW9kZSgpICE9IFRvQW5pbWF0aW9uOworICAgIHJldHVybiB2YWx1ZSA9PSBzdW0gJiYgYW5p
bWF0aW9uTW9kZSgpICE9IEFuaW1hdGlvbk1vZGU6OlRvOwogfQogCiBib29sIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKQEAgLTM2OSw3ICszNjgsNyBA
QCBTVkdBbmltYXRpb25FbGVtZW50OjpTaG91bGRBcHBseUFuaW1hdGlvbiBTVkdBbmltYXRpb25F
bGVtZW50OjpzaG91bGRBcHBseUFuaW1hdAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxj
dWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQoKQogewogICAgIEFTU0VSVChjYWxjTW9kZSgp
ID09IENhbGNNb2RlOjpQYWNlZCk7Ci0gICAgQVNTRVJUKGFuaW1hdGlvbk1vZGUoKSA9PSBWYWx1
ZXNBbmltYXRpb24pOworICAgIEFTU0VSVChhbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9k
ZTo6VmFsdWVzKTsKIAogICAgIHVuc2lnbmVkIHZhbHVlc0NvdW50ID0gbV92YWx1ZXMuc2l6ZSgp
OwogICAgIEFTU0VSVCh2YWx1ZXNDb3VudCA+PSAxKTsKQEAgLTU1NCw3ICs1NTMsNyBAQCB2b2lk
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpCiAgICAgICAgIHVu
c2lnbmVkIHNwbGluZXNDb3VudCA9IG1fa2V5U3BsaW5lcy5zaXplKCk7CiAgICAgICAgIGlmICgh
c3BsaW5lc0NvdW50CiAgICAgICAgICAgICB8fCAoaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihTVkdOYW1lczo6a2V5UG9pbnRzQXR0cikgJiYgbV9rZXlQb2ludHMuc2l6ZSgpIC0g
MSAhPSBzcGxpbmVzQ291bnQpCi0gICAgICAgICAgICB8fCAoYW5pbWF0aW9uTW9kZSA9PSBWYWx1
ZXNBbmltYXRpb24gJiYgbV92YWx1ZXMuc2l6ZSgpIC0gMSAhPSBzcGxpbmVzQ291bnQpCisgICAg
ICAgICAgICB8fCAoYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2RlOjpWYWx1ZXMgJiYgbV92
YWx1ZXMuc2l6ZSgpIC0gMSAhPSBzcGxpbmVzQ291bnQpCiAgICAgICAgICAgICB8fCAoaGFzQXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a2V5VGltZXNBdHRyKSAmJiBt
X2tleVRpbWVzLnNpemUoKSAtIDEgIT0gc3BsaW5lc0NvdW50KSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC01NjIsMjIgKzU2MSwyMiBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpCiAgICAgU3RyaW5nIGZyb20gPSBmcm9tVmFsdWUoKTsK
ICAgICBTdHJpbmcgdG8gPSB0b1ZhbHVlKCk7CiAgICAgU3RyaW5nIGJ5ID0gYnlWYWx1ZSgpOwot
ICAgIGlmIChhbmltYXRpb25Nb2RlID09IE5vQW5pbWF0aW9uKQorICAgIGlmIChhbmltYXRpb25N
b2RlID09IEFuaW1hdGlvbk1vZGU6Ok5vbmUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoKGFu
aW1hdGlvbk1vZGUgPT0gRnJvbVRvQW5pbWF0aW9uIHx8IGFuaW1hdGlvbk1vZGUgPT0gRnJvbUJ5
QW5pbWF0aW9uIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgYW5pbWF0aW9uTW9k
ZSA9PSBCeUFuaW1hdGlvbikKKyAgICBpZiAoKGFuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9k
ZTo6RnJvbVRvIHx8IGFuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6RnJvbUJ5IHx8IGFu
aW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gfHwgYW5pbWF0aW9uTW9kZSA9PSBBbmlt
YXRpb25Nb2RlOjpCeSkKICAgICAgICAgJiYgKGhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmtleVBvaW50c0F0dHIpICYmIGhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oU1ZHTmFtZXM6OmtleVRpbWVzQXR0cikgJiYgKG1fa2V5VGltZXMuc2l6ZSgp
IDwgMiB8fCBtX2tleVRpbWVzLnNpemUoKSAhPSBtX2tleVBvaW50cy5zaXplKCkpKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbikKKyAg
ICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2RlOjpGcm9tVG8pCiAgICAgICAgIG1f
YW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoZnJvbSwgdG8pOwotICAg
IGVsc2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pIHsKKyAgICBlbHNlIGlmIChh
bmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvKSB7CiAgICAgICAgIC8vIEZvciB0by1h
bmltYXRpb25zIHRoZSBmcm9tIHZhbHVlIGlzIHRoZSBjdXJyZW50IGFjY3VtdWxhdGVkIHZhbHVl
IGZyb20gbG93ZXIgcHJpb3JpdHkgYW5pbWF0aW9ucy4KICAgICAgICAgLy8gVGhlIHZhbHVlIGlz
IG5vdCBzdGF0aWMgYW5kIGlzIGRldGVybWluZWQgZHVyaW5nIHRoZSBhbmltYXRpb24uCiAgICAg
ICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoZW1wdHlTdHJp
bmcoKSwgdG8pOwotICAgIH0gZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBGcm9tQnlBbmltYXRp
b24pCisgICAgfSBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OkZyb21C
eSkKICAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhm
cm9tLCBieSk7Ci0gICAgZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBCeUFuaW1hdGlvbikKKyAg
ICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OkJ5KQogICAgICAgICBt
X2FuaW1hdGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGVtcHR5U3RyaW5nKCks
IGJ5KTsKLSAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IFZhbHVlc0FuaW1hdGlvbikgewor
ICAgIGVsc2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VmFsdWVzKSB7CiAg
ICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBtX3ZhbHVlcy5zaXplKCkgPj0gMQogICAgICAgICAg
ICAgJiYgKGNhbGNNb2RlID09IENhbGNNb2RlOjpQYWNlZCB8fCAhaGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB8fCBoYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprZXlQb2ludHNBdHRyKSB8fCAobV92YWx1
ZXMuc2l6ZSgpID09IG1fa2V5VGltZXMuc2l6ZSgpKSkKICAgICAgICAgICAgICYmIChjYWxjTW9k
ZSA9PSBDYWxjTW9kZTo6RGlzY3JldGUgfHwgIW1fa2V5VGltZXMuc2l6ZSgpIHx8IG1fa2V5VGlt
ZXMubGFzdCgpID09IDEpCkBAIC01ODcsNyArNTg2LDcgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVt
ZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQogICAgICAgICAgICAgbV9hbmltYXRpb25WYWxp
ZCA9IGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUobV92YWx1ZXMubGFzdCgpKTsKICAg
ICAgICAgaWYgKGNhbGNNb2RlID09IENhbGNNb2RlOjpQYWNlZCAmJiBtX2FuaW1hdGlvblZhbGlk
KQogICAgICAgICAgICAgY2FsY3VsYXRlS2V5VGltZXNGb3JDYWxjTW9kZVBhY2VkKCk7Ci0gICAg
fSBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IFBhdGhBbmltYXRpb24pCisgICAgfSBlbHNlIGlm
IChhbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlBhdGgpCiAgICAgICAgIG1fYW5pbWF0
aW9uVmFsaWQgPSBjYWxjTW9kZSA9PSBDYWxjTW9kZTo6UGFjZWQgfHwgIWhhc0F0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmtleVBvaW50c0F0dHIpIHx8IChtX2tleVRp
bWVzLnNpemUoKSA+IDEgJiYgbV9rZXlUaW1lcy5zaXplKCkgPT0gbV9rZXlQb2ludHMuc2l6ZSgp
KTsKIH0KIApAQCAtNTk5LDcgKzU5OCw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTCiAgICAg
ZmxvYXQgZWZmZWN0aXZlUGVyY2VudDsKICAgICBDYWxjTW9kZSBjYWxjTW9kZSA9IHRoaXMtPmNh
bGNNb2RlKCk7CiAgICAgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gdGhpcy0+YW5pbWF0
aW9uTW9kZSgpOwotICAgIGlmIChhbmltYXRpb25Nb2RlID09IFZhbHVlc0FuaW1hdGlvbikgewor
ICAgIGlmIChhbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlZhbHVlcykgewogICAgICAg
ICBTdHJpbmcgZnJvbTsKICAgICAgICAgU3RyaW5nIHRvOwogICAgICAgICBjdXJyZW50VmFsdWVz
Rm9yVmFsdWVzQW5pbWF0aW9uKHBlcmNlbnQsIGVmZmVjdGl2ZVBlcmNlbnQsIGZyb20sIHRvKTsK
QEAgLTYxNCw3ICs2MTMsNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXRDb3VudCwgUwogICAgICAgICBlZmZl
Y3RpdmVQZXJjZW50ID0gY2FsY3VsYXRlUGVyY2VudEZyb21LZXlQb2ludHMocGVyY2VudCk7CiAg
ICAgZWxzZSBpZiAobV9rZXlQb2ludHMuaXNFbXB0eSgpICYmIGNhbGNNb2RlID09IENhbGNNb2Rl
OjpTcGxpbmUgJiYgbV9rZXlUaW1lcy5zaXplKCkgPiAxKQogICAgICAgICBlZmZlY3RpdmVQZXJj
ZW50ID0gY2FsY3VsYXRlUGVyY2VudEZvclNwbGluZShwZXJjZW50LCBjYWxjdWxhdGVLZXlUaW1l
c0luZGV4KHBlcmNlbnQpKTsKLSAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IEZyb21Ub0Fu
aW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uKQorICAgIGVsc2UgaWYgKGFu
aW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6RnJvbVRvIHx8IGFuaW1hdGlvbk1vZGUgPT0g
QW5pbWF0aW9uTW9kZTo6VG8pCiAgICAgICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBjYWxjdWxhdGVQ
ZXJjZW50Rm9yRnJvbVRvKHBlcmNlbnQpOwogICAgIGVsc2UKICAgICAgICAgZWZmZWN0aXZlUGVy
Y2VudCA9IHBlcmNlbnQ7CkBAIC02NjcsMjEgKzY2NiwxMCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmRldGVybWluZVByb3BlcnR5VmFsdWVUeXBlcyhjb25zdCBTdHJpbmcmIGZyb20sIGNv
bnN0CiAgICAgaWYgKGluaGVyaXRzRnJvbVByb3BlcnR5KHRhcmdldEVsZW1lbnQuZ2V0KCksIGF0
dHJpYnV0ZU5hbWUsIHRvKSkKICAgICAgICAgbV90b1Byb3BlcnR5VmFsdWVUeXBlID0gSW5oZXJp
dFZhbHVlOwogfQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFuaW1hdGVkUHJvcGVy
dHlUeXBlKCkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRBbmltYXRpb24oKQogewog
ICAgIG1fbGFzdFZhbHVlc0FuaW1hdGlvbkZyb20gPSBTdHJpbmcoKTsKICAgICBtX2xhc3RWYWx1
ZXNBbmltYXRpb25UbyA9IFN0cmluZygpOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0KQotewotICAgIFNWR1NNSUxFbGVt
ZW50OjpzZXRUYXJnZXRFbGVtZW50KHRhcmdldCk7Ci0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmli
dXRlVHlwZSh0YXJnZXQpOwotfQotCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNoZWNrSW52
YWxpZENTU0F0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0KQotewotICAgIG1faGFzSW52
YWxpZENTU0F0dHJpYnV0ZVR5cGUgPSB0YXJnZXQgJiYgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkg
JiYgYXR0cmlidXRlVHlwZSgpID09IEF0dHJpYnV0ZVR5cGU6OkNTUyAmJiAhaXNUYXJnZXRBdHRy
aWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXQsIGF0dHJpYnV0ZU5hbWUoKSk7Ci19Ci0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCmluZGV4IGJmZTIzMGM1ZGY2ZGFjMTRk
MDU1MDk3NWRkNTI4MGJiMmU2ZTIxZTEuLjhkMzU3MTEwNDhhNDhmMWMwYzAwZDQxOGVlNGZiZmM5
NzZhZDNlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaApAQCAt
MzYsMjIgKzM2LDEwIEBAIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CiBjbGFzcyBTVkdB
bmltYXRlZFR5cGU7CiBjbGFzcyBUaW1lQ29udGFpbmVyOwogCi1lbnVtIEFuaW1hdGlvbk1vZGUg
ewotICAgIE5vQW5pbWF0aW9uLAotICAgIEZyb21Ub0FuaW1hdGlvbiwKLSAgICBGcm9tQnlBbmlt
YXRpb24sCi0gICAgVG9BbmltYXRpb24sCi0gICAgQnlBbmltYXRpb24sCi0gICAgVmFsdWVzQW5p
bWF0aW9uLAotICAgIFBhdGhBbmltYXRpb24gLy8gVXNlZCBieSBBbmltYXRlTW90aW9uLgotfTsK
LQogLy8gSWYgd2UgaGF2ZSAnY3VycmVudENvbG9yJyBvciAnaW5oZXJpdCcgYXMgYW5pbWF0aW9u
IHZhbHVlLCB3ZSBuZWVkIHRvIGdyYWIKIC8vIHRoZSB2YWx1ZSBkdXJpbmcgdGhlIGFuaW1hdGlv
biBzaW5jZSB0aGUgdmFsdWUgY2FuIGJlIGFuaW1hdGVkIGl0c2VsZi4KIGVudW0gQW5pbWF0ZWRQ
cm9wZXJ0eVZhbHVlVHlwZSB7IFJlZ3VsYXJQcm9wZXJ0eVZhbHVlLCBDdXJyZW50Q29sb3JWYWx1
ZSwgSW5oZXJpdFZhbHVlIH07CiAKLWVudW0gY2xhc3MgQ2FsY01vZGUgeyBEaXNjcmV0ZSwgTGlu
ZWFyLCBQYWNlZCwgU3BsaW5lIH07Ci0KIGNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQgOiBwdWJs
aWMgU1ZHU01JTEVsZW1lbnQsIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBw
dWJsaWMgU1ZHVGVzdHMgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHQW5pbWF0aW9u
RWxlbWVudCk7CiBwdWJsaWM6CkBAIC0xMDUsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVu
c2lnbmVkIGZyb21MaXN0U2l6ZSA9IGZyb21MaXN0LnNpemUoKTsKICAgICAgICAgaWYgKGZyb21M
aXN0U2l6ZSAhPSB0b0xpc3RTaXplICYmIGZyb21MaXN0U2l6ZSkgewogICAgICAgICAgICAgaWYg
KHBlcmNlbnRhZ2UgPCAwLjUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSgp
ICE9IFRvQW5pbWF0aW9uKQorICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25Nb2RlKCkgIT0g
QW5pbWF0aW9uTW9kZTo6VG8pCiAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkTGlzdCA9IEFu
aW1hdGVkVHlwZShmcm9tTGlzdCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICBhbmltYXRlZExpc3QgPSBBbmltYXRlZFR5cGUodG9MaXN0KTsKQEAgLTEyMiw3ICsxMTAsNyBA
QCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBbmltYXRlZFR5cGU+IHZvaWQgYW5p
bWF0ZURpc2NyZXRlVHlwZShmbG9hdCBwZXJjZW50YWdlLCBjb25zdCBBbmltYXRlZFR5cGUmIGZy
b21UeXBlLCBjb25zdCBBbmltYXRlZFR5cGUmIHRvVHlwZSwgQW5pbWF0ZWRUeXBlJiBhbmltYXRl
ZFR5cGUpCiAgICAgewotICAgICAgICBpZiAoKGFuaW1hdGlvbk1vZGUoKSA9PSBGcm9tVG9Bbmlt
YXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNSkgfHwgYW5pbWF0aW9uTW9kZSgpID09IFRvQW5pbWF0
aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMSkgeworICAgICAgICBpZiAoKGFuaW1hdGlvbk1vZGUoKSA9
PSBBbmltYXRpb25Nb2RlOjpGcm9tVG8gJiYgcGVyY2VudGFnZSA+IDAuNSkgfHwgYW5pbWF0aW9u
TW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OlRvIHx8IHBlcmNlbnRhZ2UgPT0gMSkgewogICAgICAg
ICAgICAgYW5pbWF0ZWRUeXBlID0gQW5pbWF0ZWRUeXBlKHRvVHlwZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTE0MCwxMiArMTI4LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKGlzQWNjdW11bGF0ZWQoKSAmJiByZXBlYXRDb3VudCkKICAgICAgICAgICAgIG51bWJlciAr
PSB0b0F0RW5kT2ZEdXJhdGlvbk51bWJlciAqIHJlcGVhdENvdW50OwogCi0gICAgICAgIGlmIChp
c0FkZGl0aXZlKCkgJiYgYW5pbWF0aW9uTW9kZSgpICE9IFRvQW5pbWF0aW9uKQorICAgICAgICBp
ZiAoaXNBZGRpdGl2ZSgpICYmIGFuaW1hdGlvbk1vZGUoKSAhPSBBbmltYXRpb25Nb2RlOjpUbykK
ICAgICAgICAgICAgIGFuaW1hdGVkTnVtYmVyICs9IG51bWJlcjsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgYW5pbWF0ZWROdW1iZXIgPSBudW1iZXI7CiAgICAgfQogCisgICAgZW51bSBjbGFz
cyBBdHRyaWJ1dGVUeXBlIHsgQ1NTLCBYTUwsIEF1dG8gfTsKKyAgICBBdHRyaWJ1dGVUeXBlIGF0
dHJpYnV0ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZVR5cGU7IH0KKyAgICB2b2lk
IGNvbXB1dGVDU1NQcm9wZXJ0eVZhbHVlKFNWR0VsZW1lbnQqLCBDU1NQcm9wZXJ0eUlELCBTdHJp
bmcmIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVz
KGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0byk7CisKIHByb3RlY3RlZDoKICAg
ICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwog
CkBAIC0xNTMsMTcgKzE0NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIEF0dHJpYnV0ZU93
bmVyUHJveHk6OkF0dHJpYnV0ZVJlZ2lzdHJ5JiBhdHRyaWJ1dGVSZWdpc3RyeSgpIHsgcmV0dXJu
IEF0dHJpYnV0ZU93bmVyUHJveHk6OmF0dHJpYnV0ZVJlZ2lzdHJ5KCk7IH0KICAgICBjb25zdCBT
VkdBdHRyaWJ1dGVPd25lclByb3h5JiBhdHRyaWJ1dGVPd25lclByb3h5KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9hdHRyaWJ1dGVPd25lclByb3h5OyB9CiAKLSAgICB2b2lkIGNvbXB1dGVD
U1NQcm9wZXJ0eVZhbHVlKFNWR0VsZW1lbnQqLCBDU1NQcm9wZXJ0eUlELCBTdHJpbmcmIHZhbHVl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGNvbnN0IFN0
cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0byk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0QW5p
bWF0ZWRQcm9wZXJ0eVR5cGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRpb24oKTsK
IAogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgZW51bSBjbGFzcyBBdHRyaWJ1
dGVUeXBlIHsgQ1NTLCBYTUwsIEF1dG8gfTsKLSAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZVR5cGU7IH0KLQogICAgIFN0cmluZyB0b1Zh
bHVlKCkgY29uc3Q7CiAgICAgU3RyaW5nIGJ5VmFsdWUoKSBjb25zdDsKICAgICBTdHJpbmcgZnJv
bVZhbHVlKCkgY29uc3Q7CkBAIC0xNzcsMTAgKzE2NSw3IEBAIHByb3RlY3RlZDoKICAgICBBbmlt
YXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlIHsgUmVndWxhclBy
b3BlcnR5VmFsdWUgfTsKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Qcm9wZXJ0
eVZhbHVlVHlwZSB7IFJlZ3VsYXJQcm9wZXJ0eVZhbHVlIH07CiAKLSAgICB2b2lkIHNldFRhcmdl
dEVsZW1lbnQoU1ZHRWxlbWVudCopIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0QXR0cmlidXRlTmFt
ZShjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBoYXNJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW52YWxpZENTU0F0dHJpYnV0
ZVR5cGU7IH0KLSAgICB2b2lkIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVu
dCopOwogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKICAgICB2b2lk
IHNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlKSB7IG1fYW5pbWF0
aW9uTW9kZSA9IGFuaW1hdGlvbk1vZGU7IH0KQEAgLTIxOCw5ICsyMDMsOCBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxVbml0QmV6aWVyPiBtX2tleVNwbGluZXM7CiAgICAgU3RyaW5nIG1fbGFzdFZh
bHVlc0FuaW1hdGlvbkZyb207CiAgICAgU3RyaW5nIG1fbGFzdFZhbHVlc0FuaW1hdGlvblRvOwot
ICAgIGJvb2wgbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSB7IGZhbHNlIH07CiAgICAgQ2Fs
Y01vZGUgbV9jYWxjTW9kZSB7IENhbGNNb2RlOjpMaW5lYXIgfTsKLSAgICBBbmltYXRpb25Nb2Rl
IG1fYW5pbWF0aW9uTW9kZSB7IE5vQW5pbWF0aW9uIH07CisgICAgQW5pbWF0aW9uTW9kZSBtX2Fu
aW1hdGlvbk1vZGUgeyBBbmltYXRpb25Nb2RlOjpOb25lIH07CiAgICAgQXR0cmlidXRlT3duZXJQ
cm94eSBtX2F0dHJpYnV0ZU93bmVyUHJveHkgeyAqdGhpcyB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdG9yRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdG9yRmFjdG9yeS5oCmluZGV4IDcxYTE5OTNiMTNiNTI2MmRkM2JiNmVjZTAw
ZmRkNmJmYWY2ZDI5NTUuLjBmNDU3NjMzMTRhMGFhODlkMGFiMzczYzMxOGRiZWEwNjY1NTQ5YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRvckZhY3RvcnkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0b3JGYWN0b3J5LmgKQEAgLTIzLDggKzIzLDYg
QEAKICNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIKICNpbmNsdWRlICJTVkdBbmltYXRl
ZENvbG9yLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkSW50ZWdlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlck9wdGlv
bmFsSW50ZWdlci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIK
QEAgLTU4LDkgKzU2LDkgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRp
b246CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZEVudW1l
cmF0aW9uQW5pbWF0b3I+KGFuaW1hdGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KTsKICAgICAg
ICAgY2FzZSBBbmltYXRlZEludGVnZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29udGV4
dEVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGNhc2UgQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I+KGFuaW1h
dGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwg
Y29udGV4dEVsZW1lbnQpOwogICAgICAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCBmZGNjOGZiNjgwNjkzNDA0YTkwZmE5MWM3Nzc1Y2Qx
Njc2MGM2MmVmLi43NjQzM2YyY2M3YmRkOGJlMDU5OWQ3MWYzNzAwYzM3OWNkN2FlNDFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC03MDAsNiArNzAwLDE0IEBAIHZvaWQgU1ZHRWxl
bWVudDo6c3luY2hyb25pemVBbGxBbmltYXRlZFNWR0F0dHJpYnV0ZShTVkdFbGVtZW50KiBzdmdF
bGVtZW50KQogCiAgICAgc3ZnRWxlbWVudC0+c3luY2hyb25pemVBdHRyaWJ1dGVzKCk7CiAgICAg
c3ZnRWxlbWVudC0+ZWxlbWVudERhdGEoKS0+c2V0QW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGly
dHkoZmFsc2UpOworICAgIAorICAgIC8vIEZJWE1FOiBEZWxldGUgdGhlIFNWRyB0ZWFyIG9mZiBw
cm9wZXJ0aWVzIGNvZGUgZnJvbSB0aGlzIGZ1bmN0aW9uCisgICAgCisgICAgLy8gU1ZHUHJvcGVy
dHlSZWdpc3RyeTo6c3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCkgcmV0dXJucyB0aGUgbmV3IHZh
bHVlcyBvZgorICAgIC8vIHRoZSBwcm9wZXJ0aWVzIHdoaWNoIGhhdmUgY2hhbmdlZCBidXQgbm90
IGNvbW1pdHRlZCB5ZXQuCisgICAgYXV0byBtYXAgPSBzdmdFbGVtZW50LT5wcm9wZXJ0eVJlZ2lz
dHJ5KCkuc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBl
bnRyeSA6IG1hcCkKKyAgICAgICAgc3ZnRWxlbWVudC0+c2V0U3luY2hyb25pemVkTGF6eUF0dHJp
YnV0ZShlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKIH0KIAogdm9pZCBTVkdFbGVtZW50OjpzeW5j
aHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNv
bnN0CkBAIC03MDcsMTMgKzcxNSw0NiBAQCB2b2lkIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplQW5p
bWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29ucwogICAgIGlm
ICghZWxlbWVudERhdGEoKSB8fCAhZWxlbWVudERhdGEoKS0+YW5pbWF0ZWRTVkdBdHRyaWJ1dGVz
QXJlRGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IERlbGV0ZSB0aGUg
U1ZHIHRlYXIgb2ZmIHByb3BlcnRpZXMgY29kZSBmcm9tIHRoaXMgZnVuY3Rpb24KKwogICAgIFNW
R0VsZW1lbnQqIG5vbkNvbnN0VGhpcyA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMpOwog
ICAgIGlmIChuYW1lID09IGFueVFOYW1lKCkpCiAgICAgICAgIHN5bmNocm9uaXplQWxsQW5pbWF0
ZWRTVkdBdHRyaWJ1dGUobm9uQ29uc3RUaGlzKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoaXNB
bmltYXRlZFByb3BlcnR5QXR0cmlidXRlKG5hbWUpKSB7CisgICAgICAgIC8vIElmIHRoZSB2YWx1
ZSBvZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHNlcmlhbGl6ZSB0aGUgbmV3IHZhbHVlIHRv
IHRoZSBhdHRyaWJ1dGUuCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJvcGVydHlSZWdpc3Ry
eSgpLnN5bmNocm9uaXplKG5hbWUpKQorICAgICAgICAgICAgbm9uQ29uc3RUaGlzLT5zZXRTeW5j
aHJvbml6ZWRMYXp5QXR0cmlidXRlKG5hbWUsICp2YWx1ZSk7CisgICAgfSBlbHNlCiAgICAgICAg
IG5vbkNvbnN0VGhpcy0+c3luY2hyb25pemVBdHRyaWJ1dGUobmFtZSk7CiB9CiAKK3ZvaWQgU1ZH
RWxlbWVudDo6Y29tbWl0UHJvcGVydHlDaGFuZ2UoU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eSogYW5p
bWF0ZWRQcm9wZXJ0eSkKK3sKKyAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBwcm9w
ZXJ0eVJlZ2lzdHJ5KCkuYW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZU5hbWUoKmFuaW1hdGVkUHJv
cGVydHkpOworICAgIHNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwg
YW5pbWF0ZWRQcm9wZXJ0eS0+YmFzZVZhbEFzU3RyaW5nKCkpOworCisgICAgaW52YWxpZGF0ZVNW
R0F0dHJpYnV0ZXMoKTsKKyAgICBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOwor
fQorCitib29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSBjb25zdAoreworICAgIHJldHVybiBwcm9wZXJ0
eVJlZ2lzdHJ5KCkuaXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwor
fQorCitib29sIFNWR0VsZW1lbnQ6OmlzQW5pbWF0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNBbmltYXRlZFByb3Bl
cnR5QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOworfQorCitSZWZQdHI8U1ZHQW5pbWF0b3I+IFNW
R0VsZW1lbnQ6OmNyZWF0ZUFuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUgY2FsY01vZGUsIGJvb2wg
aXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKQoreworICAgIGF1dG8gYW5pbWF0b3IgPSBw
cm9wZXJ0eVJlZ2lzdHJ5KCkuY3JlYXRlQW5pbWF0b3IoYXR0cmlidXRlTmFtZSwgYW5pbWF0aW9u
TW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpOworICAgIGZvciAoYXV0
byogaW5zdGFuY2UgOiBpbnN0YW5jZXMoKSkKKyAgICAgICAgaW5zdGFuY2UtPnByb3BlcnR5UmVn
aXN0cnkoKS5hcHBlbmRBbmltYXRlZEluc3RhbmNlKGF0dHJpYnV0ZU5hbWUsIGFuaW1hdG9yKTsK
KyAgICByZXR1cm4gYW5pbWF0b3I7Cit9CisKIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxl
bWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGluIGEgPHVz
ZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJlZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5oCmluZGV4IGIyY2UyOGVmNzRiY2Y0ZTE1N2JiODI4Y2YwZGRlYWIxODBh
Y2EzNTYuLmVhMTc3Yjk3ZWM0ZmM4ZTU5YzU0MWRlMGE0ZjUyNmI3NWYyYTk0ZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuaApAQCAtMjIsMTIgKzIyLDEzIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3Bl
cnR5SW1wbC5oIgogI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZU93bmVyUHJveHkuaCIKICNpbmNsdWRl
ICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNpbmdFcnJvci5oIgorI2luY2x1ZGUgIlNWR1By
b3BlcnR5T3duZXJSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC00Niw3ICs0
Nyw3IEBAIGNsYXNzIFNWR1VzZUVsZW1lbnQ7CiAKIHZvaWQgbWFwQXR0cmlidXRlVG9DU1NQcm9w
ZXJ0eShIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiogcHJvcGVydHlO
YW1lVG9JZE1hcCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpOwogCi1jbGFzcyBTVkdF
bGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQsIHB1YmxpYyBTVkdMYW5nU3BhY2UsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxTVkdFbGVtZW50PiB7CitjbGFzcyBTVkdFbGVtZW50IDogcHVibGlj
IFN0eWxlZEVsZW1lbnQsIHB1YmxpYyBTVkdMYW5nU3BhY2UsIHB1YmxpYyBTVkdQcm9wZXJ0eU93
bmVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U1ZHRWxlbWVudD4gewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoU1ZHRWxlbWVudCk7CiBwdWJsaWM6CiAgICAgYm9vbCBpc091dGVybW9zdFNW
R1NWR0VsZW1lbnQoKSBjb25zdDsKQEAgLTE1MCw2ICsxNTEsMTggQEAgcHVibGljOgogICAgIFJl
ZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZUFuaW1hdGVkUHJvcGVydHko
Y29uc3QgU1ZHQXR0cmlidXRlJiBhdHRyaWJ1dGUpIHsgcmV0dXJuIGF0dHJpYnV0ZU93bmVyUHJv
eHkoKS5sb29rdXBPckNyZWF0ZUFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlKTsgfQogICAgIFZl
Y3RvcjxSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4+IGxvb2t1cE9yQ3JlYXRlQW5pbWF0ZWRQ
cm9wZXJ0aWVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIHsgcmV0dXJuIGF0dHJpYnV0ZU93
bmVyUHJveHkoKS5sb29rdXBPckNyZWF0ZUFuaW1hdGVkUHJvcGVydGllcyhuYW1lKTsgfQogCisg
ICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdF
bGVtZW50PjsKKyAgICB2aXJ0dWFsIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5
UmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KKworICAgIGJv
b2wgaXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dDsKKyAgICBib29sIGlzQW5pbWF0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OworCisgICAgdm9pZCBjb21taXRQcm9wZXJ0eUNoYW5nZSgpIG92ZXJyaWRlIHsgfQorICAg
IHZvaWQgY29tbWl0UHJvcGVydHlDaGFuZ2UoU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eSopOworCisg
ICAgY29uc3QgU1ZHRWxlbWVudCogYXR0cmlidXRlQ29udGV4dEVsZW1lbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0aGlzOyB9CisgICAgUmVmUHRyPFNWR0FuaW1hdG9yPiBjcmVhdGVBbmlt
YXRvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgQW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUsIGJvb2wg
aXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKTsKKwogICAgIC8vIFRoZXNlIGFyZSBuZWVk
ZWQgZm9yIHRoZSBSZW5kZXJUcmVlLCBhbmltYXRpb24gYW5kIERPTS4KICAgICBjb25zdCBhdXRv
JiBjbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFtZS5jdXJyZW50VmFsdWUoYXR0
cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIGF1dG8gY2xhc3NOYW1lQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX2NsYXNzTmFtZS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7
IH0KQEAgLTIwNCw2ICsyMTcsOCBAQCBwcml2YXRlOgogCiAgICAgQXR0cmlidXRlT3duZXJQcm94
eSBtX2F0dHJpYnV0ZU93bmVyUHJveHkgeyAqdGhpcyB9OwogICAgIFNWR0FuaW1hdGVkU3RyaW5n
QXR0cmlidXRlIG1fY2xhc3NOYW1lOworICAgIAorICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CiAKIGNsYXNzIFNWR0VsZW1lbnQ6Okluc3RhbmNl
SW52YWxpZGF0aW9uR3VhcmQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZTYzYjMyMzdhNTU5NjdiNzcxMWRkMTAxZjc0MzQy
M2UxYzM4YjhjZC4uZjljNDFmZGY5MmJiNmYxNGI1MTA4ZDQ5ZGQ2M2NjZDlmNzhlYzQxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDYgKzQwLDEzIEBA
IGlubGluZSBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6U1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmZlQ29udm9sdmVNYXRyaXhUYWcpKTsKICAgICByZWdpc3RlckF0dHJpYnV0ZXMoKTsKKwor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlRmxhZywgW10geworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5
PFNWR05hbWVzOjpvcmRlckF0dHIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9vcmRl
clgsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9vcmRlclk+KCk7CisgICAgICAgIFBy
b3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OnRhcmdldFhBdHRyLCAm
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fdGFyZ2V0WD4oKTsKKyAgICAgICAgUHJvcGVy
dHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6dGFyZ2V0WUF0dHIsICZTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV90YXJnZXRZPigpOworICAgIH0pOwogfQogCiBSZWY8
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQpA
QCAtNTksMzIgKzY2LDE1IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6Omtlcm5lbFVuaXRMZW5ndGhZSWRlbnRpZmllcigpCiAgICAgcmV0dXJuIHNfaWRl
bnRpZmllcjsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudDo6b3JkZXJYSWRlbnRpZmllcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gc19pZGVudGlmaWVyKCJTVkdPcmRlclgiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19pZGVudGlmaWVyOwotfQotCi1jb25zdCBB
dG9taWNTdHJpbmcmIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpvcmRlcllJZGVudGlmaWVy
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzX2lkZW50aWZp
ZXIoIlNWR09yZGVyWSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAg
IHJldHVybiBzX2lkZW50aWZpZXI7Ci19Ci0KIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQ6OnJlZ2lzdGVyQXR0cmlidXRlcygpCiB7CiAgICAgYXV0byYgcmVnaXN0cnkgPSBhdHRyaWJ1
dGVSZWdpc3RyeSgpOwogICAgIGlmICghcmVnaXN0cnkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OmluQXR0ciwgJlNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX2luMT4oKTsKLSAgICByZWdpc3RyeS5yZWdpc3Rl
ckF0dHJpYnV0ZTxTVkdOYW1lczo6b3JkZXJBdHRyLAotICAgICAgICAmU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6Om9yZGVyWElkZW50aWZpZXIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dDo6bV9vcmRlclgsCi0gICAgICAgICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6b3JkZXJZ
SWRlbnRpZmllciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX29yZGVyWT4oKTsKICAg
ICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6a2VybmVsTWF0cml4QXR0ciwg
JlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX2tlcm5lbE1hdHJpeD4oKTsKICAgICByZWdp
c3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6ZGl2aXNvckF0dHIsICZTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6bV9kaXZpc29yPigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0
cmlidXRlPFNWR05hbWVzOjpiaWFzQXR0ciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpt
X2JpYXM+KCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OnRhcmdl
dFhBdHRyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fdGFyZ2V0WD4oKTsKLSAgICBy
ZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6dGFyZ2V0WUF0dHIsICZTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6bV90YXJnZXRZPigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVy
QXR0cmlidXRlPFNWR05hbWVzOjplZGdlTW9kZUF0dHIsIEVkZ2VNb2RlVHlwZSwgJlNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50OjptX2VkZ2VNb2RlPigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVy
QXR0cmlidXRlPFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0ciwKICAgICAgICAgJlNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjprZXJuZWxVbml0TGVuZ3RoWElkZW50aWZpZXIsICZTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9rZXJuZWxVbml0TGVuZ3RoWCwKQEAgLTEwMiw4ICs5
Miw4IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6
Om9yZGVyQXR0cikgewogICAgICAgICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1i
ZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+PSAxICYmIHkgPj0gMSkgewotICAg
ICAgICAgICAgbV9vcmRlclguc2V0VmFsdWUoeCk7Ci0gICAgICAgICAgICBtX29yZGVyWS5zZXRW
YWx1ZSh5KTsKKyAgICAgICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Cisg
ICAgICAgICAgICBtX29yZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdh
cm5pbmcoImZlQ29udm9sdmVNYXRyaXg6IHByb2JsZW0gcGFyc2luZyBvcmRlcj1cIiIgKyB2YWx1
ZSArICJcIi4gRmlsdGVyZWQgZWxlbWVudCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MSwxMiArMTMxLDEyIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
CiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSB7Ci0gICAg
ICAgIG1fdGFyZ2V0WC5zZXRWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7Cisg
ICAgICAgIG1fdGFyZ2V0WC0+c2V0QmFzZVZhbEludGVybmFsKHZhbHVlLnN0cmluZygpLnRvVUlu
dFN0cmljdCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNW
R05hbWVzOjp0YXJnZXRZQXR0cikgewotICAgICAgICBtX3RhcmdldFkuc2V0VmFsdWUodmFsdWUu
c3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICBtX3RhcmdldFktPnNldEJhc2VWYWxJ
bnRlcm5hbCh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE5Nyw4ICsxODcsOCBAQCBib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsCiAKIHZv
aWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldE9yZGVyKGZsb2F0IHgsIGZsb2F0IHkp
CiB7Ci0gICAgbV9vcmRlclguc2V0VmFsdWUoeCk7Ci0gICAgbV9vcmRlclkuc2V0VmFsdWUoeSk7
CisgICAgbV9vcmRlclgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKKyAgICBtX29yZGVyWS0+c2V0
QmFzZVZhbEludGVybmFsKHkpOwogICAgIGludmFsaWRhdGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA2ZjczMTc0OWEz
MjZhMzkwNjJlNTM0ZTkxNzI2ZTRhNDQ3NzdlNzFkLi5mNjQ2MTk5NWFkYWVkNTFkNjY5OTE1NWQx
ZGE3YWY2YjAxZTQxOGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuaApAQCAtMjEsMTEgKzIxLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQm9vbGVhbi5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZEludGVnZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MywyNiArNjgs
MjYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFkpOwogCiAgICAgU3RyaW5nIGluMSgp
IGNvbnN0IHsgcmV0dXJuIG1faW4xLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkp
OyB9Ci0gICAgaW50IG9yZGVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JkZXJYLmN1cnJlbnRWYWx1
ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9Ci0gICAgaW50IG9yZGVyWSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3JkZXJZLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CisgICAg
aW50IG9yZGVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JkZXJYLT5jdXJyZW50VmFsdWUoKTsgfQor
ICAgIGludCBvcmRlclkoKSBjb25zdCB7IHJldHVybiBtX29yZGVyWS0+Y3VycmVudFZhbHVlKCk7
IH0KICAgICBjb25zdCBTVkdOdW1iZXJMaXN0VmFsdWVzJiBrZXJuZWxNYXRyaXgoKSBjb25zdCB7
IHJldHVybiBtX2tlcm5lbE1hdHJpeC5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgp
KTsgfQogICAgIGZsb2F0IGRpdmlzb3IoKSBjb25zdCB7IHJldHVybiBtX2Rpdmlzb3IuY3VycmVu
dFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBmbG9hdCBiaWFzKCkgY29uc3Qg
eyByZXR1cm4gbV9iaWFzLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9Ci0g
ICAgaW50IHRhcmdldFgoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFguY3VycmVudFZhbHVlKGF0
dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KLSAgICBpbnQgdGFyZ2V0WSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0WS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQorICAgIGlu
dCB0YXJnZXRYKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRYLT5jdXJyZW50VmFsdWUoKTsgfQor
ICAgIGludCB0YXJnZXRZKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRZLT5jdXJyZW50VmFsdWUo
KTsgfQogICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1v
ZGUuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFguY3VycmVu
dFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFkuY3VycmVudFZhbHVlKGF0
dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBib29sIHByZXNlcnZlQWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX3ByZXNlcnZlQWxwaGEuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHko
KSk7IH0KIAogICAgIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gaW4xQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX2luMS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KLSAg
ICBSZWZQdHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBvcmRlclhBbmltYXRlZCgpIHsgcmV0dXJuIG1f
b3JkZXJYLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQotICAgIFJl
ZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IG9yZGVyWUFuaW1hdGVkKCkgeyByZXR1cm4gbV9vcmRl
clkuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CisgICAgUmVmPFNW
R0FuaW1hdGVkSW50ZWdlcj4mIG9yZGVyWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9vcmRlclg7IH0K
KyAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiYgb3JkZXJZQW5pbWF0ZWQoKSB7IHJldHVybiBt
X29yZGVyWTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlckxpc3Q+IGtlcm5lbE1hdHJp
eEFuaW1hdGVkKCkgeyByZXR1cm4gbV9rZXJuZWxNYXRyaXguYW5pbWF0ZWRQcm9wZXJ0eShhdHRy
aWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBkaXZp
c29yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2Rpdmlzb3IuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1
dGVPd25lclByb3h5KCkpOyB9CiAgICAgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBiaWFzQW5p
bWF0ZWQoKSB7IHJldHVybiBtX2JpYXMuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclBy
b3h5KCkpOyB9Ci0gICAgUmVmUHRyPFNWR0FuaW1hdGVkSW50ZWdlcj4gdGFyZ2V0WEFuaW1hdGVk
KCkgeyByZXR1cm4gbV90YXJnZXRYLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94
eSgpKTsgfQotICAgIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IHRhcmdldFlBbmltYXRlZCgp
IHsgcmV0dXJuIG1fdGFyZ2V0WS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHko
KSk7IH0KKyAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiYgdGFyZ2V0WEFuaW1hdGVkKCkgeyBy
ZXR1cm4gbV90YXJnZXRYOyB9CisgICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4mIHRhcmdldFlB
bmltYXRlZCgpIHsgcmV0dXJuIG1fdGFyZ2V0WTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZEVu
dW1lcmF0aW9uPiBlZGdlTW9kZUFuaW1hdGVkKCkgeyByZXR1cm4gbV9lZGdlTW9kZS5hbmltYXRl
ZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXI+IGtlcm5lbFVuaXRMZW5ndGhYQW5pbWF0ZWQoKSB7IHJldHVybiBtX2tlcm5lbFVu
aXRMZW5ndGhYLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAg
IFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4ga2VybmVsVW5pdExlbmd0aFlBbmltYXRlZCgpIHsg
cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFkuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25l
clByb3h5KCkpOyB9CkBAIC0xMDUsNiArMTAwLDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQXR0
cmlidXRlT3duZXJQcm94eTo6QXR0cmlidXRlUmVnaXN0cnkmIGF0dHJpYnV0ZVJlZ2lzdHJ5KCkg
eyByZXR1cm4gQXR0cmlidXRlT3duZXJQcm94eTo6YXR0cmlidXRlUmVnaXN0cnkoKTsgfQogICAg
IHN0YXRpYyBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSkgeyByZXR1cm4gQXR0cmlidXRlT3duZXJQcm94eTo6aXNLbm93bkF0dHJpYnV0ZShh
dHRyaWJ1dGVOYW1lKTsgfQogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQXR0cmlidXRlcygpOwor
ICAgIAorICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0
cnk8U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcz47CisgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdp
c3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCiAgICAg
Y29uc3QgU1ZHQXR0cmlidXRlT3duZXJQcm94eSYgYXR0cmlidXRlT3duZXJQcm94eSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fYXR0cmlidXRlT3duZXJQcm94eTsgfQogICAgIHZvaWQgcGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJy
aWRlOwpAQCAtMTEzLDIwICsxMTEsMjAgQEAgcHJpdmF0ZToKICAgICBib29sIHNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgb3JkZXJY
SWRlbnRpZmllcigpOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG9yZGVyWUlkZW50
aWZpZXIoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBrZXJuZWxVbml0TGVuZ3Ro
WElkZW50aWZpZXIoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBrZXJuZWxVbml0
TGVuZ3RoWUlkZW50aWZpZXIoKTsKIAogICAgIEF0dHJpYnV0ZU93bmVyUHJveHkgbV9hdHRyaWJ1
dGVPd25lclByb3h5IHsgKnRoaXMgfTsKKyAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CisKICAgICBTVkdBbmltYXRlZFN0cmluZ0F0dHJpYnV0ZSBtX2lu
MTsKLSAgICBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgbV9vcmRlclg7Ci0gICAgU1ZHQW5p
bWF0ZWRJbnRlZ2VyQXR0cmlidXRlIG1fb3JkZXJZOworICAgIFJlZjxTVkdBbmltYXRlZEludGVn
ZXI+IG1fb3JkZXJYIHsgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjcmVhdGUodGhpcykgfTsKKyAgICBS
ZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX29yZGVyWSB7IFNWR0FuaW1hdGVkSW50ZWdlcjo6Y3Jl
YXRlKHRoaXMpIH07CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QXR0cmlidXRlIG1fa2VybmVs
TWF0cml4OwogICAgIFNWR0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fZGl2aXNvcjsKICAgICBT
VkdBbmltYXRlZE51bWJlckF0dHJpYnV0ZSBtX2JpYXM7Ci0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
QXR0cmlidXRlIG1fdGFyZ2V0WDsKLSAgICBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgbV90
YXJnZXRZOworICAgIFJlZjxTVkdBbmltYXRlZEludGVnZXI+IG1fdGFyZ2V0WCB7IFNWR0FuaW1h
dGVkSW50ZWdlcjo6Y3JlYXRlKHRoaXMpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4g
bV90YXJnZXRZIHsgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjcmVhdGUodGhpcykgfTsKICAgICBTVkdB
bmltYXRlZEVudW1lcmF0aW9uQXR0cmlidXRlPEVkZ2VNb2RlVHlwZT4gbV9lZGdlTW9kZSB7IEVE
R0VNT0RFX0RVUExJQ0FURSB9OwogICAgIFNWR0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fa2Vy
bmVsVW5pdExlbmd0aFg7CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXJBdHRyaWJ1dGUgbV9rZXJuZWxV
bml0TGVuZ3RoWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmNwcAppbmRleCA2Yjc2Yjg0NzkzNTkwZGMyMTdmMWExNTgzNTA4ZWYzOWZiZjc1NGUyLi43ZDdm
ZjQyMmRjMDgzNDZmYjljN2NkMDcwM2FiNzYyNTY4ZTlhMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC0zNSw2ICszNSwxMSBAQCBpbmxp
bmUgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjpm
ZVR1cmJ1bGVuY2VUYWcpKTsKICAgICByZWdpc3RlckF0dHJpYnV0ZXMoKTsKKyAgICAKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdO
YW1lczo6bnVtT2N0YXZlc0F0dHIsICZTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjptX251bU9jdGF2
ZXM+KCk7CisgICAgfSk7CiB9CiAKIFJlZjxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50PiBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQmIGRvY3VtZW50KQpAQCAtNjIsNyArNjcsNiBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnJlZ2lzdGVyQXR0cmlidXRlcygpCiAgICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1
dGU8U1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyLAogICAgICAgICAmU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6YmFzZUZyZXF1ZW5jeVhJZGVudGlmaWVyLCAmU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dDo6bV9iYXNlRnJlcXVlbmN5WCwKICAgICAgICAgJlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJh
c2VGcmVxdWVuY3lZSWRlbnRpZmllciwgJlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6Om1fYmFzZUZy
ZXF1ZW5jeVk+KCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6Om51
bU9jdGF2ZXNBdHRyLCAmU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6bV9udW1PY3RhdmVzPigpOwog
ICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjpzZWVkQXR0ciwgJlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6Om1fc2VlZD4oKTsKICAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJp
YnV0ZTxTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyLCBTVkdTdGl0Y2hPcHRpb25zLCAmU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6bV9zdGl0Y2hUaWxlcz4oKTsKICAgICByZWdpc3RyeS5yZWdpc3Rl
ckF0dHJpYnV0ZTxTVkdOYW1lczo6dHlwZUF0dHIsIFR1cmJ1bGVuY2VUeXBlLCAmU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6bV90eXBlPigpOwpAQCAtOTksNyArMTAzLDcgQEAgdm9pZCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG8KICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZl
c0F0dHIpIHsKLSAgICAgICAgbV9udW1PY3RhdmVzLnNldFZhbHVlKHZhbHVlLnN0cmluZygpLnRv
VUludFN0cmljdCgpKTsKKyAgICAgICAgbV9udW1PY3RhdmVzLT5zZXRCYXNlVmFsSW50ZXJuYWwo
dmFsdWUuc3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAppbmRleCBhMGY1
NDg4ZDYwMDRhYjhkZjdjZWZkODg1OWE3MmMwYjU3YzFhY2Y1Li5jNWVmMTY2MWE1YmE0MTU0OWNj
MTU2ZTVjODMzOGExODQ0ZjcyMDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJGRVR1cmJ1
bGVuY2UuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIApAQCAtMTAw
LDE0ICs5OSwxNCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVguY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJv
eHkoKSk7IH0KICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFz
ZUZyZXF1ZW5jeVkuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KLSAgICBp
bnQgbnVtT2N0YXZlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtT2N0YXZlcy5jdXJyZW50VmFsdWUo
YXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQorICAgIGludCBudW1PY3RhdmVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1PY3RhdmVzLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IHNlZWQoKSBj
b25zdCB7IHJldHVybiBtX3NlZWQuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7
IH0KICAgICBTVkdTdGl0Y2hPcHRpb25zIHN0aXRjaFRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGl0Y2hUaWxlcy5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFR1
cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUuY3VycmVudFZhbHVlKGF0
dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KIAogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
YmFzZUZyZXF1ZW5jeVhBbmltYXRlZCgpIHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVguYW5pbWF0
ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgUmVmUHRyPFNWR0FuaW1h
dGVkTnVtYmVyPiBiYXNlRnJlcXVlbmN5WUFuaW1hdGVkKCkgeyByZXR1cm4gbV9iYXNlRnJlcXVl
bmN5WS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KLSAgICBSZWZQ
dHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBudW1PY3RhdmVzQW5pbWF0ZWQoKSB7IHJldHVybiBtX251
bU9jdGF2ZXMuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CisgICAg
UmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4mIG51bU9jdGF2ZXNBbmltYXRlZCgpIHsgcmV0dXJuIG1f
bnVtT2N0YXZlczsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gc2VlZEFuaW1hdGVk
KCkgeyByZXR1cm4gbV9zZWVkLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgp
KTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBzdGl0Y2hUaWxlc0FuaW1h
dGVkKCkgeyByZXR1cm4gbV9zdGl0Y2hUaWxlcy5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93
bmVyUHJveHkoKSk7IH0KICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gdHlwZUFu
aW1hdGVkKCkgeyByZXR1cm4gbV90eXBlLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQ
cm94eSgpKTsgfQpAQCAtMTE5LDYgKzExOCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEF0dHJp
YnV0ZU93bmVyUHJveHk6OkF0dHJpYnV0ZVJlZ2lzdHJ5JiBhdHRyaWJ1dGVSZWdpc3RyeSgpIHsg
cmV0dXJuIEF0dHJpYnV0ZU93bmVyUHJveHk6OmF0dHJpYnV0ZVJlZ2lzdHJ5KCk7IH0KICAgICBz
dGF0aWMgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUpIHsgcmV0dXJuIEF0dHJpYnV0ZU93bmVyUHJveHk6OmlzS25vd25BdHRyaWJ1dGUoYXR0
cmlidXRlTmFtZSk7IH0KICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckF0dHJpYnV0ZXMoKTsKKyAg
ICAKKyAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5
PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz47CisgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCiAgICAgY29uc3Qg
U1ZHQXR0cmlidXRlT3duZXJQcm94eSYgYXR0cmlidXRlT3duZXJQcm94eSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fYXR0cmlidXRlT3duZXJQcm94eTsgfQogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwpA
QCAtMTMxLDkgKzEzMywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcmIGJhc2VGcmVxdWVuY3lZSWRlbnRpZmllcigpOwogCiAgICAgQXR0cmlidXRlT3duZXJQcm94
eSBtX2F0dHJpYnV0ZU93bmVyUHJveHkgeyAqdGhpcyB9OworICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBTVkdBbmltYXRlZE51bWJlckF0dHJp
YnV0ZSBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIFNWR0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1f
YmFzZUZyZXF1ZW5jeVk7Ci0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmlidXRlIG1fbnVtT2N0
YXZlcyB7IDEgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX251bU9jdGF2ZXMgeyBT
VkdBbmltYXRlZEludGVnZXI6OmNyZWF0ZSh0aGlzLCAxKSB9OwogICAgIFNWR0FuaW1hdGVkTnVt
YmVyQXR0cmlidXRlIG1fc2VlZDsKICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uQXR0cmlidXRl
PFNWR1N0aXRjaE9wdGlvbnM+IG1fc3RpdGNoVGlsZXMgeyBTVkdfU1RJVENIVFlQRV9OT1NUSVRD
SCB9OwogICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25BdHRyaWJ1dGU8VHVyYnVsZW5jZVR5cGU+
IG1fdHlwZSB7IFR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlckVsZW1lbnQuaAppbmRleCA5YzIxMDlmNDM2MWQ2OTUxYzBhMWYzYWM3NTMyZjc2MjYx
ZDUzNTAxLi5jZWRhOWY1ZDVjMDA4ZjQ0Yzk2MzY1NTlkMjg4MjFmYTgwM2IzNWEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgKQEAgLTI0LDcgKzI0LDYgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkSW50ZWdlci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOZXdBbmltYXRpb25Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOZXdBbmltYXRpb25Db250cm9sbGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYTQyMzZkYzFkZjY0OWU2ZWU1OTM4YWRlZmU4MDUxNTlmZjZjMjAx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR05ld0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKKyNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
b3IuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
CitTVkdOZXdBbmltYXRpb25Db250cm9sbGVyOjpTVkdOZXdBbmltYXRpb25Db250cm9sbGVyKFNW
R0FuaW1hdGlvbkVsZW1lbnQmIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVs
ZW1lbnQpCisgICAgOiBTVkdBbmltYXRpb25Db250cm9sbGVyQmFzZShhbmltYXRpb25FbGVtZW50
LCB0YXJnZXRFbGVtZW50KQoreworfQorCitSZWZQdHI8U1ZHQW5pbWF0b3I+IFNWR05ld0FuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZUFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYW5p
bWF0b3IpCisgICAgICAgIG1fYW5pbWF0b3IgPSBtX3RhcmdldEVsZW1lbnQuY3JlYXRlQW5pbWF0
b3IobV9hbmltYXRpb25FbGVtZW50LmF0dHJpYnV0ZU5hbWUoKSwgbV9hbmltYXRpb25FbGVtZW50
LmFuaW1hdGlvbk1vZGUoKSwgbV9hbmltYXRpb25FbGVtZW50LmNhbGNNb2RlKCksIG1fYW5pbWF0
aW9uRWxlbWVudC5pc0FjY3VtdWxhdGVkKCksIG1fYW5pbWF0aW9uRWxlbWVudC5pc0FkZGl0aXZl
KCkpOworCisgICAgcmV0dXJuIG1fYW5pbWF0b3I7Cit9CisKK2Jvb2wgU1ZHTmV3QW5pbWF0aW9u
Q29udHJvbGxlcjo6aXNEaXNjcmV0ZUFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
VmFsaWRBdHRyaWJ1dGVUeXBlKCkgJiYgbV9hbmltYXRvciAmJiBtX2FuaW1hdG9yLT5pc0Rpc2Ny
ZXRlKCk7Cit9CisKK2Jvb2wgU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBZGRpdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFpc0Rpc2NyZXRlQW5pbWF0b3IoKTsKK30KKyAgICAKK2Jv
b2wgU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50LmlzQW5pbWF0ZWRBdHRyaWJ1dGUobV9h
bmltYXRpb25FbGVtZW50LmF0dHJpYnV0ZU5hbWUoKSk7Cit9CisKK2Jvb2wgU1ZHTmV3QW5pbWF0
aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJv
bSwgY29uc3QgU3RyaW5nJiB0bykKK3sKKyAgICBpZiAoIWNyZWF0ZUFuaW1hdG9yKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fYW5pbWF0b3ItPnNldEZyb21BbmRUb1ZhbHVlcygm
bV90YXJnZXRFbGVtZW50LCBmcm9tLCB0byk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0
IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiBieSkKK3sKKyAgICBpZiAoIWNyZWF0ZUFuaW1h
dG9yKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9hbmltYXRpb25F
bGVtZW50LmFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpCeSAmJiAoIWlzQWRkaXRp
dmUoKSB8fCBpc0Rpc2NyZXRlQW5pbWF0b3IoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50LmFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRp
b25Nb2RlOjpGcm9tQnkgJiYgaXNEaXNjcmV0ZUFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBtX2FuaW1hdG9yLT5zZXRGcm9tQW5kQnlWYWx1ZXMoJm1fdGFyZ2V0
RWxlbWVudCwgZnJvbSwgYnkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR05ld0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3Qg
U3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZykKK3sKKyAgICBpZiAoIWNyZWF0ZUFuaW1h
dG9yKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0b0F0RW5kT2ZEdXJhdGlv
blN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpc0Rp
c2NyZXRlQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2FuaW1hdG9y
LT5zZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdOZXdBbmltYXRpb25Db250cm9sbGVyOjpyZXNl
dEFuaW1hdGVkVHlwZSgpCit7CisgICAgaWYgKCFjcmVhdGVBbmltYXRvcigpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9hbmltYXRvci0+c3RhcnQoJm1fdGFyZ2V0RWxlbWVudCk7Cit9CisKK3Zv
aWQgU1ZHTmV3QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9h
dCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHU01JTEVsZW1lbnQqKQorewor
ICAgIGlmICghY3JlYXRlQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KHBlcmNlbnRhZ2UgPj0gMCAmJiBwZXJjZW50YWdlIDw9IDEpOworICAgIGlmIChtX3RhcmdldEVs
ZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKKyAgICAgICAgcGVyY2VudGFnZSA9
IDE7CisKKyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50LmNhbGNNb2RlKCkgPT0gQ2FsY01vZGU6
OkRpc2NyZXRlKQorICAgICAgICBwZXJjZW50YWdlID0gcGVyY2VudGFnZSA8IDAuNSA/IDAgOiAx
OworCisgICAgbV9hbmltYXRvci0+cHJvZ3Jlc3MoJm1fdGFyZ2V0RWxlbWVudCwgcGVyY2VudGFn
ZSwgcmVwZWF0Q291bnQpOworfQorCit2b2lkIFNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFw
cGx5UmVzdWx0c1RvVGFyZ2V0KCkKK3sKKyAgICBpZiAoIWNyZWF0ZUFuaW1hdG9yKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2FuaW1hdG9yLT5hcHBseSgmbV90YXJnZXRFbGVtZW50KTsKK30K
Kwordm9pZCBTVkdOZXdBbmltYXRpb25Db250cm9sbGVyOjpjbGVhckFuaW1hdGVkVHlwZShTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50KQoreworICAgIGlmICghbV9hbmltYXRvcikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fYW5pbWF0b3ItPnN0b3AodGFyZ2V0RWxlbWVudCk7Cit9CisKK2Zsb2F0
IFNWR05ld0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmlu
ZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykKK3sKKyAgICAvLyBGSVhNRTogQSByZXR1cm4gdmFs
dWUgb2YgZmxvYXQgaXMgbm90IGVub3VnaCB0byBzdXBwb3J0IHBhY2VkIGFuaW1hdGlvbnMgb24g
bGlzdHMuCisgICAgaWYgKCFjcmVhdGVBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gLTE7Cisg
ICAgcmV0dXJuIG1fYW5pbWF0b3ItPmNhbGN1bGF0ZURpc3RhbmNlKCZtX3RhcmdldEVsZW1lbnQs
IGZyb20sIHRvKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR05l
d0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOZXdBbmltYXRp
b25Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWVkMzhhZDI1NGQ2OGM5NWQ2ZDc2Y2MxNGU5OGNh
YTc2ZGM3MmRjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOZXdB
bmltYXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU1ZHQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50OworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNzIFNW
R1NNSUxFbGVtZW50OworCitjbGFzcyBTVkdOZXdBbmltYXRpb25Db250cm9sbGVyIDogcHVibGlj
IFNWR0FuaW1hdGlvbkNvbnRyb2xsZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBTVkdOZXdBbmltYXRp
b25Db250cm9sbGVyKFNWR0FuaW1hdGlvbkVsZW1lbnQmLCBTVkdFbGVtZW50Jik7CisgICAgCitw
cml2YXRlOgorICAgIFJlZlB0cjxTVkdBbmltYXRvcj4gY3JlYXRlQW5pbWF0b3IoKSBjb25zdDsK
KworICAgIHZvaWQgcmVzZXRBbmltYXRlZFR5cGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFy
QW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIG92ZXJyaWRlOworICAgIAor
ICAgIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7CisgICAgYm9vbCBjYWxjdWxhdGVG
cm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5
U3RyaW5nKSBvdmVycmlkZTsKKyAgICBib29sIGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFs
dWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZykgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQg
cmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgYXBwbHlSZXN1bHRzVG9UYXJnZXQoKSBvdmVycmlkZTsKKyAgICBmbG9hdCBjYWxj
dWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9T
dHJpbmcpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBib29sIGlzRGlzY3JldGVBbmltYXRvcigpIGNvbnN0OworCisgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0b3I+IG1fYW5pbWF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5jcHAKaW5kZXggYjQwZWY4MWNjZTAwNmYzNDJh
M2YxYmFmZTkwMzMyYjUwOGZjOWE1OC4uNzkwOTc5ZGY2Zjk4N2UwYzRiZTAyZjhlNjZiZDNhYTVm
NDlhYWY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmNwcApAQCAtMzEsNyArMzEs
NyBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoU1ZHU2V0RWxlbWVudCk7CiBpbmxpbmUg
U1ZHU2V0RWxlbWVudDo6U1ZHU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBTVkdBbmltYXRlRWxlbWVudEJhc2UodGFnTmFt
ZSwgZG9jdW1lbnQpCiB7Ci0gICAgc2V0QW5pbWF0aW9uTW9kZShUb0FuaW1hdGlvbik7CisgICAg
c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb25Nb2RlOjpUbyk7CiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnNldFRhZykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCmluZGV4IGMxMmU5ZWFkNGI4YzlmZGU4NjgwMDEzOGZk
YzBlOTUwMWI1MWJmYjguLjc0ZDJiMjA5YTBmZmFmOGJhYjJlNmRiOTQ1OTY0ZGM5NzgxNzY2NTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3Bw
CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNl
c3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYKICAgICBTVkdFbGVt
ZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKHJlbW92YWxUeXBlLCBvbGRQYXJlbnRPZlJlbW92ZWRU
cmVlKTsKIH0KIAotYm9vbCBTVkdTTUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkK
K2Jvb2wgU1ZHU01JTEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWUoKSAhPSBhbnlRTmFtZSgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCmluZGV4IGNhNTMzYWVkM2VhNzk1
MWEyM2E5MGVlYzE3OGZjY2ZhYTdlM2U5NzEuLmVmOTkyNGFmOTZhNTMxNzVkZjJjMDI2NWRkZTJl
ZWE5NmIwOTJlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHVibGljOgogICAgIEluc2VydGVkSW50b0FuY2Vz
dG9yUmVzdWx0IGluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5v
ZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFs
aWRBdHRyaWJ1dGVUeXBlKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0
ZU5hbWUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdlZCgpID0gMDsKIAogICAgIFNN
SUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgeyByZXR1cm4gbV90aW1lQ29udGFpbmVy
LmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
Y2Nlc3Nvci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQWNjZXNzb3IuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NjQ3NjJhYjg4M2I5NGQ4MzZmMTg2YmFiMzgwYjBjN2Q4MmZiNWM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQWNjZXNzb3Iu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgi
CisjaW5jbHVkZSAiU1ZHQW5pbWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTVkdOZXdBbmltYXRlZFByb3BlcnR5OworY2xhc3MgU1ZHUHJvcGVydHk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE93bmVyVHlwZT4KK2NsYXNzIFNWR0FjY2Vzc29yIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TVkdBY2Nlc3NvcigpID0gZGVm
YXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goY29uc3QgT3duZXJUeXBlJikgY29uc3Qg
eyB9CisgICAgdmlydHVhbCBib29sIGlzQW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQW5pbWF0ZWRMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIG1hdGNoZXMoY29uc3QgT3duZXJUeXBl
JiwgY29uc3QgU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBPcHRpb25hbDxTdHJpbmc+IHN5bmNocm9uaXplKGNvbnN0IE93bmVyVHlw
ZSYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8
U1ZHQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKE93bmVyVHlwZSYsIGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBBbmltYXRpb25Nb2RlLCBDYWxjTW9kZSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKE93bmVy
VHlwZSYsIGNvbnN0IFJlZlB0cjxTVkdBbmltYXRvcj4mKSBjb25zdCB7IH0KKworcHJvdGVjdGVk
OgorICAgIFNWR0FjY2Vzc29yKCkgPSBkZWZhdWx0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQWNjZXNz
b3JQdHIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FjY2Vzc29yUHRyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjU4ZGNkMTc0NDJlNDVmYmRjMjMzMWZkMzRhNjk3NDlkMTFjMjJkZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FjY2Vzc29y
UHRyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQWNjZXNzb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGUs
IHR5cGVuYW1lIFByb3BlcnR5VHlwZT4KK2NsYXNzIFNWR0FjY2Vzc29yUHRyIDogcHVibGljIFNW
R0FjY2Vzc29yPE93bmVyVHlwZT4geworICAgIHVzaW5nIEJhc2UgPSBTVkdBY2Nlc3NvcjxPd25l
clR5cGU+OworCitwdWJsaWM6CisgICAgU1ZHQWNjZXNzb3JQdHIoUmVmPFByb3BlcnR5VHlwZT4g
T3duZXJUeXBlOjoqcHJvcGVydHkpCisgICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKKyAg
ICB7CisgICAgfQorCisgICAgUmVmPFByb3BlcnR5VHlwZT4mIHByb3BlcnR5KE93bmVyVHlwZSYg
b3duZXIpIGNvbnN0IHsgcmV0dXJuIG93bmVyLiptX3Byb3BlcnR5OyB9CisgICAgY29uc3QgUmVm
PFByb3BlcnR5VHlwZT4mIHByb3BlcnR5KGNvbnN0IE93bmVyVHlwZSYgb3duZXIpIGNvbnN0IHsg
cmV0dXJuIG93bmVyLiptX3Byb3BlcnR5OyB9CisKKyAgICB2b2lkIGRldGFjaChjb25zdCBPd25l
clR5cGUmIG93bmVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcHJvcGVydHkob3du
ZXIpLT5kZXRhY2goKTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IHN5bmNocm9uaXpl
KGNvbnN0IE93bmVyVHlwZSYgb3duZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gcHJvcGVydHkob3duZXIpLT5zeW5jaHJvbml6ZSgpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFjY2Vzc29yVHlwZSwgUmVmPFByb3BlcnR5VHlwZT4g
T3duZXJUeXBlOjoqcHJvcGVydHk+CisgICAgc3RhdGljIGNvbnN0IFNWR0FjY2Vzc29yPE93bmVy
VHlwZT4mIHNpbmdsZXRvbigpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QWNjZXNzb3JUeXBlPiBwcm9wZXJ0eUFjY2Vzc29yIHsgcHJvcGVydHkgfTsKKyAgICAgICAgcmV0
dXJuIHByb3BlcnR5QWNjZXNzb3I7CisgICAgfQorCisgICAgUmVmPFByb3BlcnR5VHlwZT4gT3du
ZXJUeXBlOjoqbV9wcm9wZXJ0eTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMTY5NTAyNDU0MTdlNjg5OTRjYjMwYmI1ZTkyYjgwNjM0NTY1ZTlmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmlt
aXRpdmVQcm9wZXJ0eS5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
VkdOZXdBbmltYXRlZFByb3BlcnR5LmgiCisjaW5jbHVkZSAiU1ZHTmV3UHJvcGVydHkuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm9wZXJ0eVR5cGU+Citj
bGFzcyBTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5IDogcHVibGljIFNWR05ld0FuaW1hdGVk
UHJvcGVydHkgeworcHVibGljOgorICAgIHVzaW5nIFZhbHVlVHlwZSA9IFByb3BlcnR5VHlwZTsK
KworICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eT4gY3JlYXRlKFNW
R0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCkpOworICAg
IH0KKworICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eT4gY3JlYXRl
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBQcm9wZXJ0eVR5cGUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQ
cm9wZXJ0eShjb250ZXh0RWxlbWVudCwgdmFsdWUpKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5
IHRoZSBET00uCisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QmFzZVZhbChjb25zdCBQcm9wZXJ0
eVR5cGUmIGJhc2VWYWwpCisgICAgeworICAgICAgICBtX2Jhc2VWYWwgPSBiYXNlVmFsOworICAg
ICAgICBjb21taXRQcm9wZXJ0eUNoYW5nZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIC8vIFVzZWQgYnkgU1ZHRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoKS4KKyAgICB2b2lk
IHNldEJhc2VWYWxJbnRlcm5hbChjb25zdCBQcm9wZXJ0eVR5cGUmIGJhc2VWYWwpIHsgbV9iYXNl
VmFsID0gYmFzZVZhbDsgfQorICAgIGNvbnN0IFByb3BlcnR5VHlwZSYgYmFzZVZhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZVZhbDsgfQorCisgICAgLy8gVXNlZCBieSBTVkdBbmltYXRvcjo6cHJv
Z3Jlc3MuCisgICAgdm9pZCBzZXRBbmltVmFsKGNvbnN0IFByb3BlcnR5VHlwZSYgYW5pbVZhbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0FuaW1hdGluZygpKTsKKyAgICAgICAgbV9hbmltVmFs
ID0gYW5pbVZhbDsKKyAgICB9CisKKyAgICBjb25zdCBQcm9wZXJ0eVR5cGUmIGFuaW1WYWwoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX0lNUExJRVMoaXNBbmltYXRpbmcoKSwgbV9hbmlt
VmFsKTsKKyAgICAgICAgcmV0dXJuIGlzQW5pbWF0aW5nKCkgPyAqbV9hbmltVmFsIDogbV9iYXNl
VmFsOworICAgIH0KKworICAgIFByb3BlcnR5VHlwZSYgYW5pbVZhbCgpCisgICAgeworICAgICAg
ICBBU1NFUlRfSU1QTElFUyhpc0FuaW1hdGluZygpLCBtX2FuaW1WYWwpOworICAgICAgICByZXR1
cm4gaXNBbmltYXRpbmcoKSA/ICptX2FuaW1WYWwgOiBtX2Jhc2VWYWw7CisgICAgfQorCisgICAg
Ly8gVXNlZCB3aGVuIGNvbW1pdHRpbmcgYSBjaGFuZ2UgZnJvbSB0aGUgU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eSB0byB0aGUgYXR0cmlidXRlLgorICAgIFN0cmluZyBiYXNlVmFsQXNTdHJpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBTVkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+Ojp0b1N0
cmluZyhtX2Jhc2VWYWwpOyB9CisKKyAgICAvLyBVc2VkIHRvIGFwcGx5IHRoZSBTVkdBbmltYXRv
ciBjaGFuZ2UgdG8gdGhlIHRhcmdldCBlbGVtZW50LgorICAgIFN0cmluZyBhbmltVmFsQXNTdHJp
bmcoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkg
JiYgISFtX2FuaW1WYWwpOworICAgICAgICByZXR1cm4gU1ZHUHJvcGVydHlUcmFpdHM8UHJvcGVy
dHlUeXBlPjo6dG9TdHJpbmcoKm1fYW5pbVZhbCk7CisgICAgfQorCisgICAgLy8gTWFuYWdpbmcg
dGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBvd25lci4KKyAgICB2b2lkIHNldERpcnR5KCkgb3Zl
cnJpZGUgeyBtX3N0YXRlID0gU1ZHUHJvcGVydHlTdGF0ZTo6RGlydHk7IH0KKyAgICBib29sIGlz
RGlydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFNWR1Byb3BlcnR5U3Rh
dGU6OkRpcnR5OyB9CisgICAgT3B0aW9uYWw8U3RyaW5nPiBzeW5jaHJvbml6ZSgpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTVkdQcm9wZXJ0eVN0YXRlOjpDbGVhbikK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIG1fc3RhdGUgPSBTVkdQ
cm9wZXJ0eVN0YXRlOjpDbGVhbjsKKyAgICAgICAgcmV0dXJuIGJhc2VWYWxBc1N0cmluZygpOwor
ICAgIH0KKworICAgIC8vIFVzZWQgYnkgUmVuZGVyU1ZHRWxlbWVudHMgYW5kIER1bXBSZW5kZXJU
cmVlLgorICAgIGNvbnN0IFByb3BlcnR5VHlwZSYgY3VycmVudFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVF9JTVBMSUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbCk7CisgICAg
ICAgIHJldHVybiBpc0FuaW1hdGluZygpID8gKm1fYW5pbVZhbCA6IG1fYmFzZVZhbDsKKyAgICB9
CisKKyAgICAvLyBDb250cm9sbGluZyB0aGUgYW5pbWF0aW9uLgorICAgIHZvaWQgc3RhcnRBbmlt
YXRpb24oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGlzQW5pbWF0aW5nKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1fYW5pbVZhbCA9IG1fYmFzZVZhbDsKKyAgICAgICAg
U1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eTo6c3RhcnRBbmltYXRpb24oKTsKKyAgICB9CisgICAgdm9p
ZCBzdG9wQW5pbWF0aW9uKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghaXNBbmltYXRp
bmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9hbmltVmFsID0gV1RGOjpudWxs
b3B0OworICAgICAgICBTVkdOZXdBbmltYXRlZFByb3BlcnR5OjpzdG9wQW5pbWF0aW9uKCk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eShTVkdF
bGVtZW50KiBjb250ZXh0RWxlbWVudCkKKyAgICAgICAgOiBTVkdOZXdBbmltYXRlZFByb3BlcnR5
KGNvbnRleHRFbGVtZW50KQorICAgICAgICAsIG1fYmFzZVZhbChTVkdQcm9wZXJ0eVRyYWl0czxQ
cm9wZXJ0eVR5cGU+Ojppbml0aWFsVmFsdWUoKSkKKyAgICB7CisgICAgfQorCisgICAgU1ZHQW5p
bWF0ZWRQcmltaXRpdmVQcm9wZXJ0eShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3Qg
UHJvcGVydHlUeXBlJiB2YWx1ZSkKKyAgICAgICAgOiBTVkdOZXdBbmltYXRlZFByb3BlcnR5KGNv
bnRleHRFbGVtZW50KQorICAgICAgICAsIG1fYmFzZVZhbCh2YWx1ZSkKKyAgICB7CisgICAgfQor
CisgICAgUHJvcGVydHlUeXBlIG1fYmFzZVZhbDsKKyAgICBtdXRhYmxlIE9wdGlvbmFsPFByb3Bl
cnR5VHlwZT4gbV9hbmltVmFsOworICAgIFNWR1Byb3BlcnR5U3RhdGUgbV9zdGF0ZSB7IFNWR1By
b3BlcnR5U3RhdGU6OkNsZWFuIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nvci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3OGJiY2FkNTI0MWQ0ZjU3OGY4NGNmYTkwNWZmYzUxMmUxNDVkODgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3Bl
cnR5QWNjZXNzb3IuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdB
Y2Nlc3NvclB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IE93bmVyVHlwZSwgdHlwZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0eVR5cGU+CitjbGFzcyBTVkdBbmlt
YXRlZFByb3BlcnR5QWNjZXNzb3IgOiBwdWJsaWMgU1ZHQWNjZXNzb3JQdHI8T3duZXJUeXBlLCBB
bmltYXRlZFByb3BlcnR5VHlwZT4geworICAgIHVzaW5nIEJhc2UgPSBTVkdBY2Nlc3NvclB0cjxP
d25lclR5cGUsIEFuaW1hdGVkUHJvcGVydHlUeXBlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJh
c2U6OkJhc2U7CisgICAgdXNpbmcgQmFzZTo6c2luZ2xldG9uOworICAgIHVzaW5nIEJhc2U6OnBy
b3BlcnR5OworICAgIHVzaW5nIEFuaW1hdGVkUHJvcGVydHkgPSBBbmltYXRlZFByb3BlcnR5VHlw
ZTsKKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBPd25lclR5cGUmIG93bmVyLCBjb25zdCBTVkdO
ZXdBbmltYXRlZFByb3BlcnR5JiBhbmltYXRlZFByb3BlcnR5KSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5KG93bmVyKS5wdHIoKSA9PSAmYW5pbWF0ZWRQcm9w
ZXJ0eTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0FuaW1hdGVkUHJvcGVydHkoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3JJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNj
ZXNzb3JJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ0NTlkNGMwZjRhNDU3YTJiOWZjODMzYzZhODQ0MmM4
MzcxZDNiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3NvckltcGwuaApAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUltcGwuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZT4KK2NsYXNzIFNWR0FuaW1hdGVk
SW50ZWdlckFjY2Vzc29yIGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nv
cjxPd25lclR5cGUsIFNWR0FuaW1hdGVkSW50ZWdlcj4geworICAgIHVzaW5nIEJhc2UgPSBTVkdB
bmltYXRlZFByb3BlcnR5QWNjZXNzb3I8T3duZXJUeXBlLCBTVkdBbmltYXRlZEludGVnZXI+Owor
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKyAgICB1c2luZyBCYXNlOjpwcm9wZXJ0
eTsKKyAgICB0ZW1wbGF0ZTxSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBPd25lclR5cGU6Oipwcm9w
ZXJ0eT4KKyAgICBjb25zdGV4cHIgc3RhdGljIGNvbnN0IFNWR0FjY2Vzc29yPE93bmVyVHlwZT4m
IHNpbmdsZXRvbigpIHsgcmV0dXJuIEJhc2U6OnRlbXBsYXRlIHNpbmdsZXRvbjxTVkdBbmltYXRl
ZEludGVnZXJBY2Nlc3NvciwgcHJvcGVydHk+KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
U1ZHQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKE93bmVyVHlwZSYgb3duZXIsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgQ2Fs
Y01vZGUgY2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKSBjb25z
dCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9y
OjpjcmVhdGUoYXR0cmlidXRlTmFtZSwgcHJvcGVydHkob3duZXIpLCBhbmltYXRpb25Nb2RlLCBj
YWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSk7CisgICAgfQorCisgICAgdm9pZCBh
cHBlbmRBbmltYXRlZEluc3RhbmNlKE93bmVyVHlwZSYgb3duZXIsIGNvbnN0IFJlZlB0cjxTVkdB
bmltYXRvcj4mIGFuaW1hdG9yKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgc3RhdGljX3Bv
aW50ZXJfY2FzdDxTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcj4oYW5pbWF0b3IpLT5hcHBlbmRB
bmltYXRlZEluc3RhbmNlKHByb3BlcnR5KG93bmVyKSk7CisgICAgfQorfTsKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFu
aW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3Bl
cnR5QW5pbWF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTc1ODA5ODljODYyZDYxZjY0N2UwOWU3OTMyOWIw
MjQ4YTg2YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlNWR0FuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU1ZHRWxlbWVudDsKKwordGVtcGxhdGU8dHlwZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0eSwg
dHlwZW5hbWUgQW5pbWF0aW9uRnVuY3Rpb24+CitjbGFzcyBTVkdBbmltYXRlZFByb3BlcnR5QW5p
bWF0b3IgOiBwdWJsaWMgU1ZHQW5pbWF0b3IgeworcHVibGljOgorICAgIHVzaW5nIEFuaW1hdG9y
QW5pbWF0ZWRQcm9wZXJ0eSA9IEFuaW1hdGVkUHJvcGVydHk7CisKKyAgICB2b2lkIGFwcGVuZEFu
aW1hdGVkSW5zdGFuY2UoUmVmPEFuaW1hdGVkUHJvcGVydHk+JiBhbmltYXRlZCkKKyAgICB7Cisg
ICAgICAgIG1fYW5pbWF0ZWRJbnN0YW5jZXMuYXBwZW5kKGFuaW1hdGVkLmNvcHlSZWYoKSk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0Rpc2NyZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9m
dW5jdGlvbi5pc0Rpc2NyZXRlKCk7IH0KKworICAgIHZvaWQgc2V0RnJvbUFuZFRvVmFsdWVzKFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5n
JiB0bykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24uc2V0RnJvbUFuZFRvVmFs
dWVzKHRhcmdldEVsZW1lbnQsIGZyb20sIHRvKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEZyb21B
bmRCeVZhbHVlcyhTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGZyb20s
IGNvbnN0IFN0cmluZyYgYnkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uLnNl
dEZyb21BbmRCeVZhbHVlcyh0YXJnZXRFbGVtZW50LCBmcm9tLCBieSk7CisgICAgfQorCisgICAg
dm9pZCBzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0cmluZyYgdG9BdEVuZE9mRHVy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uLnNldFRvQXRFbmRPZkR1
cmF0aW9uVmFsdWUodG9BdEVuZE9mRHVyYXRpb24pOworICAgIH0KKworICAgIHZvaWQgc3RhcnQo
U1ZHRWxlbWVudCopIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2FuaW1hdGVkLT5zdGFydEFu
aW1hdGlvbigpOworICAgICAgICBmb3IgKGF1dG8mIGluc3RhbmNlIDogbV9hbmltYXRlZEluc3Rh
bmNlcykKKyAgICAgICAgICAgIGluc3RhbmNlLT5pbnN0YW5jZVN0YXJ0QW5pbWF0aW9uKG1fYW5p
bWF0ZWQpOworICAgIH0KKworICAgIHZvaWQgYXBwbHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZSh0
YXJnZXRFbGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3AoU1ZHRWxlbWVudCogdGFyZ2V0
RWxlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbV9hbmltYXRlZC0+aXNBbmlt
YXRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2FuaW1hdGVkLT5zdG9w
QW5pbWF0aW9uKCk7CisgICAgICAgIGZvciAoYXV0byYgaW5zdGFuY2UgOiBtX2FuaW1hdGVkSW5z
dGFuY2VzKQorICAgICAgICAgICAgaW5zdGFuY2UtPmluc3RhbmNlU3RvcEFuaW1hdGlvbigpOwor
CisgICAgICAgIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZSh0YXJnZXRFbGVtZW50KTsKKyAg
ICB9CisKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50LCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICByZXR1cm4gbV9mdW5jdGlvbi5jYWxjdWxhdGVEaXN0YW5jZSh0YXJn
ZXRFbGVtZW50LCBmcm9tLCB0byk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvcihj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBSZWY8QW5pbWF0ZWRQcm9wZXJ0eT4m
IGFuaW1hdGVkLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgICAgIDogU1ZHQW5pbWF0
b3IoYXR0cmlidXRlTmFtZSkKKyAgICAgICAgLCBtX2FuaW1hdGVkKGFuaW1hdGVkLmNvcHlSZWYo
KSkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pCisgICAgeworICAgIH0KKworICAgIFJlZjxBbmltYXRlZFByb3BlcnR5PiBtX2FuaW1h
dGVkOworICAgIFZlY3RvcjxSZWY8QW5pbWF0ZWRQcm9wZXJ0eT4+IG1fYW5pbWF0ZWRJbnN0YW5j
ZXM7CisgICAgQW5pbWF0aW9uRnVuY3Rpb24gbV9mdW5jdGlvbjsKK307CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBbmlt
YXRvckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJv
cGVydHlBbmltYXRvckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTBiYmZlMGRhY2IzMDI3YjkxYTE2ZjMy
N2IxNDRlODhiZTU5MTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvci5oIgor
I2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMSwgdHlwZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0eUFu
aW1hdG9yMj4KK2NsYXNzIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I7CisKK2NsYXNz
IFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yIGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjxTVkdBbmltYXRlZEludGVnZXIsIFNWR0FuaW1hdGlvbkludGVnZXJGdW5j
dGlvbj4geworICAgIGZyaWVuZCBjbGFzcyBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9y
PFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yLCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcj47
CisgICAgZnJpZW5kIGNsYXNzIFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvcjsKKyAgICB1
c2luZyBCYXNlID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yPFNWR0FuaW1hdGVkSW50ZWdl
ciwgU1ZHQW5pbWF0aW9uSW50ZWdlckZ1bmN0aW9uPjsKKyAgICB1c2luZyBCYXNlOjpCYXNlOwor
CitwdWJsaWM6CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUsIFJlZjxTVkdBbmltYXRlZEludGVnZXI+JiBhbmltYXRlZCwgQW5pbWF0aW9u
TW9kZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxhdGVk
LCBib29sIGlzQWRkaXRpdmUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
VkdBbmltYXRlZEludGVnZXJBbmltYXRvcihhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZCwgYW5pbWF0
aW9uTW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwcm9ncmVzcyhTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBm
bG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCkgZmluYWwKKyAgICB7CisgICAg
ICAgIG1fZnVuY3Rpb24ucHJvZ3Jlc3ModGFyZ2V0RWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0
Q291bnQsIG1fYW5pbWF0ZWQtPmFuaW1WYWwoKSk7CisgICAgfQorfTsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDEyOTE1NDZiNDQzM2UwZDg4OTczZWVkM2FlNWIzMDdiZDQzMjY4NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHlJbXBsLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkQm9vbGVhbi5oIgorI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZExl
bmd0aC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNW
R0FuaW1hdGVkTnVtYmVyLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisj
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRQb2ludExpc3QuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByaW1pdGl2ZVByb3Bl
cnR5LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBTVkdBbmltYXRlZEludGVnZXIgPSBTVkdBbmltYXRl
ZFByaW1pdGl2ZVByb3BlcnR5PGludD47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNGU4OTY0NzU0OTA0ZjgyODc2NGVhNmNlMDgyY2RmMWY0ZTkwOTdmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlNWR0FjY2Vzc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBBY2Nlc3NvclR5cGUxLCB0eXBlbmFtZSBBY2Nl
c3NvclR5cGUyPgorY2xhc3MgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvciA6IHB1Ymxp
YyBTVkdBY2Nlc3NvcjxPd25lclR5cGU+IHsKKyAgICB1c2luZyBBbmltYXRlZFByb3BlcnR5VHlw
ZTEgPSB0eXBlbmFtZSBBY2Nlc3NvclR5cGUxOjpBbmltYXRlZFByb3BlcnR5OworICAgIHVzaW5n
IEFuaW1hdGVkUHJvcGVydHlUeXBlMiA9IHR5cGVuYW1lIEFjY2Vzc29yVHlwZTI6OkFuaW1hdGVk
UHJvcGVydHk7CisgICAgdXNpbmcgQmFzZSA9IFNWR0FjY2Vzc29yPE93bmVyVHlwZT47CisKK3B1
YmxpYzoKKyAgICBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29yKFJlZjxBbmltYXRlZFBy
b3BlcnR5VHlwZTE+IE93bmVyVHlwZTo6KnByb3BlcnR5MSwgUmVmPEFuaW1hdGVkUHJvcGVydHlU
eXBlMj4gT3duZXJUeXBlOjoqcHJvcGVydHkyKQorICAgICAgICA6IG1fYWNjZXNzb3IxKHByb3Bl
cnR5MSkKKyAgICAgICAgLCBtX2FjY2Vzc29yMihwcm9wZXJ0eTIpCisgICAgeworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFjY2Vzc29yVHlwZSwgUmVmPEFuaW1h
dGVkUHJvcGVydHlUeXBlMT4gT3duZXJUeXBlOjoqcHJvcGVydHkxLCBSZWY8QW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUyPiBPd25lclR5cGU6Oipwcm9wZXJ0eTI+CisgICAgc3RhdGljIFNWR0FjY2Vzc29y
PE93bmVyVHlwZT4mIHNpbmdsZXRvbigpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QWNjZXNzb3JUeXBlPiBwcm9wZXJ0eUFjY2Vzc29yIHsgcHJvcGVydHkxLCBwcm9wZXJ0
eTIgfTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzb3I7CisgICAgfQorCisgICAgYm9v
bCBpc0FuaW1hdGVkUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBSZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUxPiYgcHJvcGVydHkxKE93bmVyVHlwZSYgb3du
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzb3IxLnByb3BlcnR5KG93bmVyKTsgfQorICAgIGNv
bnN0IFJlZjxBbmltYXRlZFByb3BlcnR5VHlwZTE+JiBwcm9wZXJ0eTEoY29uc3QgT3duZXJUeXBl
JiBvd25lcikgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NvcjEucHJvcGVydHkob3duZXIpOyB9CisK
KyAgICBSZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUyPiYgcHJvcGVydHkyKE93bmVyVHlwZSYgb3du
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzb3IyLnByb3BlcnR5KG93bmVyKTsgfQorICAgIGNv
bnN0IFJlZjxBbmltYXRlZFByb3BlcnR5VHlwZTI+JiBwcm9wZXJ0eTIoY29uc3QgT3duZXJUeXBl
JiBvd25lcikgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NvcjIucHJvcGVydHkob3duZXIpOyB9CisK
KyAgICBib29sIG1hdGNoZXMoY29uc3QgT3duZXJUeXBlJiBvd25lciwgY29uc3QgU1ZHTmV3QW5p
bWF0ZWRQcm9wZXJ0eSYgYW5pbWF0ZWRQcm9wZXJ0eSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2FjY2Vzc29yMS5tYXRjaGVzKG93bmVyLCBhbmltYXRlZFByb3BlcnR5
KSB8fCBtX2FjY2Vzc29yMi5tYXRjaGVzKG93bmVyLCBhbmltYXRlZFByb3BlcnR5KTsKKyAgICB9
CisKKyAgICBBY2Nlc3NvclR5cGUxIG1fYWNjZXNzb3IxOworICAgIEFjY2Vzc29yVHlwZTIgbV9h
Y2Nlc3NvcjI7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29ySW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jNGQwM2YwYTZjMTY2NGMzZjI2NmZhZjhjMWI3MGVmYzI2NzI2MDZhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJv
cGVydHlJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvci5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3JJbXBsLmgiCisjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPd25lclR5cGU+CitjbGFzcyBTVkdBbmltYXRlZEludGVnZXJQYWlyQWNjZXNzb3IgZmlu
YWwgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvcjxPd25lclR5cGUsIFNW
R0FuaW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVyVHlwZT4sIFNWR0FuaW1hdGVkSW50ZWdlckFj
Y2Vzc29yPE93bmVyVHlwZT4+IHsKKyAgICB1c2luZyBCYXNlID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0
eVBhaXJBY2Nlc3NvcjxPd25lclR5cGUsIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVy
VHlwZT4sIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVyVHlwZT4+OworICAgIHVzaW5n
IEJhc2U6OnByb3BlcnR5MTsKKyAgICB1c2luZyBCYXNlOjpwcm9wZXJ0eTI7CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworICAgIHRlbXBsYXRlPFJlZjxTVkdBbmltYXRlZEludGVn
ZXI+IE93bmVyVHlwZTo6KnByb3BlcnR5MSwgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4gT3duZXJU
eXBlOjoqcHJvcGVydHkyPgorICAgIGNvbnN0ZXhwciBzdGF0aWMgY29uc3QgU1ZHQWNjZXNzb3I8
T3duZXJUeXBlPiYgc2luZ2xldG9uKCkgeyByZXR1cm4gQmFzZTo6dGVtcGxhdGUgc2luZ2xldG9u
PFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBY2Nlc3NvciwgcHJvcGVydHkxLCBwcm9wZXJ0eTI+KCk7
IH0KKworcHJpdmF0ZToKKyAgICBPcHRpb25hbDxTdHJpbmc+IHN5bmNocm9uaXplKGNvbnN0IE93
bmVyVHlwZSYgb3duZXIpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBib29sIGRpcnR5MSA9
IHByb3BlcnR5MShvd25lciktPmlzRGlydHkoKTsKKyAgICAgICAgYm9vbCBkaXJ0eTIgPSBwcm9w
ZXJ0eTIob3duZXIpLT5pc0RpcnR5KCk7CisgICAgICAgIGlmICghKGRpcnR5MSB8fCBkaXJ0eTIp
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmcgc3Ry
aW5nMSA9IGRpcnR5MSA/ICpwcm9wZXJ0eTEob3duZXIpLT5zeW5jaHJvbml6ZSgpIDogcHJvcGVy
dHkxKG93bmVyKS0+YmFzZVZhbEFzU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyBzdHJpbmcyID0g
ZGlydHkyID8gKnByb3BlcnR5Mihvd25lciktPnN5bmNocm9uaXplKCkgOiBwcm9wZXJ0eTIob3du
ZXIpLT5iYXNlVmFsQXNTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZzEgPT0gc3RyaW5n
MiA/IHN0cmluZzEgOiBzdHJpbmcxICsgIiwgIiArIHN0cmluZzI7CisgICAgfQorCisgICAgUmVm
UHRyPFNWR0FuaW1hdG9yPiBjcmVhdGVBbmltYXRvcihPd25lclR5cGUmIG93bmVyLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUs
IENhbGNNb2RlIGNhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkg
Y29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBTVkdBbmltYXRlZEludGVnZXJQYWly
QW5pbWF0b3I6OmNyZWF0ZShhdHRyaWJ1dGVOYW1lLCBwcm9wZXJ0eTEob3duZXIpLCBwcm9wZXJ0
eTIob3duZXIpLCBhbmltYXRpb25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRp
dGl2ZSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKE93bmVyVHlw
ZSYgb3duZXIsIGNvbnN0IFJlZlB0cjxTVkdBbmltYXRvcj4mIGFuaW1hdG9yKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdBbmltYXRlZEludGVnZXJQ
YWlyQW5pbWF0b3I+KGFuaW1hdG9yKS0+YXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShwcm9wZXJ0eTEo
b3duZXIpLCBwcm9wZXJ0eTIob3duZXIpKTsKKyAgICB9Cit9OworCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1h
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
UGFpckFuaW1hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY2M2I5YTU4YjgxNzU4MWIzMjg1YzA5ODJjNzIw
OGU3YTlkNTI0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IuaApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJTVkdBbmltYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNWR0VsZW1lbnQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVy
dHlBbmltYXRvcjEsIHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjI+CitjbGFzcyBT
VkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yIDogcHVibGljIFNWR0FuaW1hdG9yIHsKK3B1
YmxpYzoKKyAgICB1c2luZyBBbmltYXRlZFByb3BlcnR5MSA9IHR5cGVuYW1lIEFuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjE6OkFuaW1hdG9yQW5pbWF0ZWRQcm9wZXJ0eTsKKyAgICB1c2luZyBBbmlt
YXRlZFByb3BlcnR5MiA9IHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjI6OkFuaW1h
dG9yQW5pbWF0ZWRQcm9wZXJ0eTsKKworICAgIHZvaWQgYXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShS
ZWY8QW5pbWF0ZWRQcm9wZXJ0eTE+JiBhbmltYXRlZDEsIFJlZjxBbmltYXRlZFByb3BlcnR5Mj4m
IGFuaW1hdGVkMikKKyAgICB7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMS0+
YXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShhbmltYXRlZDEpOworICAgICAgICBtX2FuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjItPmFwcGVuZEFuaW1hdGVkSW5zdGFuY2UoYW5pbWF0ZWQyKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIFJlZjxBbmltYXRlZFByb3BlcnR5MT4mIGFu
aW1hdGVkMSwgUmVmPEFuaW1hdGVkUHJvcGVydHkyPiYgYW5pbWF0ZWQyLCBBbmltYXRpb25Nb2Rl
IGFuaW1hdGlvbk1vZGUsIENhbGNNb2RlIGNhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJv
b2wgaXNBZGRpdGl2ZSkKKyAgICAgICAgOiBTVkdBbmltYXRvcihhdHRyaWJ1dGVOYW1lKQorICAg
ICAgICAsIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMShBbmltYXRlZFByb3BlcnR5QW5pbWF0
b3IxOjpjcmVhdGUoYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWQxLCBhbmltYXRpb25Nb2RlLCBjYWxj
TW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSkpCisgICAgICAgICwgbV9hbmltYXRlZFBy
b3BlcnR5QW5pbWF0b3IyKEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjI6OmNyZWF0ZShhdHRyaWJ1
dGVOYW1lLCBhbmltYXRlZDIsIGFuaW1hdGlvbk1vZGUsIGNhbGNNb2RlLCBpc0FjY3VtdWxhdGVk
LCBpc0FkZGl0aXZlKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzdGFydChTVkdFbGVtZW50
KiB0YXJnZXRFbGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9hbmltYXRlZFByb3Bl
cnR5QW5pbWF0b3IxLT5zdGFydCh0YXJnZXRFbGVtZW50KTsKKyAgICAgICAgbV9hbmltYXRlZFBy
b3BlcnR5QW5pbWF0b3IyLT5zdGFydCh0YXJnZXRFbGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lk
IHByb2dyZXNzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGZsb2F0IHBlcmNlbnRhZ2UsIHVu
c2lnbmVkIHJlcGVhdENvdW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9hbmltYXRlZFBy
b3BlcnR5QW5pbWF0b3IxLT5wcm9ncmVzcyh0YXJnZXRFbGVtZW50LCBwZXJjZW50YWdlLCByZXBl
YXRDb3VudCk7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMi0+cHJvZ3Jlc3Mo
dGFyZ2V0RWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQpOworICAgIH0KKworICAgIHZv
aWQgYXBwbHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZSh0YXJnZXRFbGVtZW50KTsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3AoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMS0+c3RvcCh0YXJnZXRFbGVtZW50
KTsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyLT5zdG9wKHRhcmdldEVsZW1l
bnQpOworICAgIH0KKworICAgIFJlZjxBbmltYXRlZFByb3BlcnR5QW5pbWF0b3IxPiBtX2FuaW1h
dGVkUHJvcGVydHlBbmltYXRvcjE7CisgICAgUmVmPEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjI+
IG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMjsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3JJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
UGFpckFuaW1hdG9ySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkNjY5ODk4ZjI0YWJhYjExMWJlYmUxZjEx
OWY2Mjg5NDdiZDgwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9ySW1wbC5oCkBAIC0wLDAgKzEs
NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgiCisj
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oIgorI2luY2x1ZGUgIlNW
R01hcmtlclR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRWxlbWVu
dDsKKworY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFuaW1hdG9yIGZpbmFsIDogcHVibGlj
IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I8U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0
b3IsIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yPiB7CisgICAgdXNpbmcgQmFzZSA9IFNWR0Fu
aW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I8U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3IsIFNW
R0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yPjsKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCitwdWJs
aWM6CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIFJlZjxTVkdBbmltYXRlZEludGVnZXI+JiBhbmltYXRlZDEsIFJlZjxTVkdBbmltYXRl
ZEludGVnZXI+JiBhbmltYXRlZDIsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgQ2FsY01v
ZGUgY2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFuaW1h
dG9yKGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkMSwgYW5pbWF0ZWQyLCBhbmltYXRpb25Nb2RlLCBj
YWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHNldEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBm
cm9tLCBjb25zdCBTdHJpbmcmIHRvKSBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byBwYWlyRnJv
bSA9IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIGludD4+Ojpmcm9tU3RyaW5nKGZy
b20pOworICAgICAgICBhdXRvIHBhaXJUbyA9IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxp
bnQsIGludD4+Ojpmcm9tU3RyaW5nKHRvKTsKKworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlB
bmltYXRvcjEtPm1fZnVuY3Rpb24ubV9mcm9tID0gcGFpckZyb20uZmlyc3Q7CisgICAgICAgIG1f
YW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMS0+bV9mdW5jdGlvbi5tX3RvID0gcGFpclRvLmZpcnN0
OworCisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMi0+bV9mdW5jdGlvbi5tX2Zy
b20gPSBwYWlyRnJvbS5zZWNvbmQ7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9y
Mi0+bV9mdW5jdGlvbi5tX3RvID0gcGFpclRvLnNlY29uZDsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEZyb21BbmRCeVZhbHVlcyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBT
dHJpbmcmIGJ5KSBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byBwYWlyRnJvbSA9IFNWR1Byb3Bl
cnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIGludD4+Ojpmcm9tU3RyaW5nKGZyb20pOworICAgICAg
ICBhdXRvIHBhaXJCeSA9IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIGludD4+Ojpm
cm9tU3RyaW5nKGJ5KTsKKworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjEtPm1f
ZnVuY3Rpb24ubV9mcm9tID0gcGFpckZyb20uZmlyc3Q7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9w
ZXJ0eUFuaW1hdG9yMS0+bV9mdW5jdGlvbi5tX3RvID0gcGFpckZyb20uZmlyc3QgKyBwYWlyQnku
Zmlyc3Q7CisKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyLT5tX2Z1bmN0aW9u
Lm1fZnJvbSA9IHBhaXJGcm9tLnNlY29uZDsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5p
bWF0b3IyLT5tX2Z1bmN0aW9uLm1fdG8gPSBwYWlyRnJvbS5zZWNvbmQgKyBwYWlyQnkuc2Vjb25k
OworICAgIH0KKworICAgIHZvaWQgc2V0VG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJp
bmcmIHRvQXRFbmRPZkR1cmF0aW9uKSBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byBwYWlyVG9B
dEVuZE9mRHVyYXRpb24gPSBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8aW50LCBpbnQ+Pjo6
ZnJvbVN0cmluZyh0b0F0RW5kT2ZEdXJhdGlvbik7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yMS0+bV9mdW5jdGlvbi5tX3RvQXRFbmRPZkR1cmF0aW9uID0gcGFpclRvQXRFbmRP
ZkR1cmF0aW9uLmZpcnN0OworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjItPm1f
ZnVuY3Rpb24ubV90b0F0RW5kT2ZEdXJhdGlvbiA9IHBhaXJUb0F0RW5kT2ZEdXJhdGlvbi5zZWNv
bmQ7CisgICAgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFk
ZTY0MmU4ODkwMjE1YTQ0NmUyZGQ3ZTRhNWNhMmIyNDdkNTdiOTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0
aW9uLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0aW9u
RnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdBbmltYXRpb25B
ZGRpdGl2ZUZ1bmN0aW9uIDogcHVibGljIFNWR0FuaW1hdGlvbkZ1bmN0aW9uIHsKK3B1YmxpYzoK
KyAgICBTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uKEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9u
TW9kZSwgQ2FsY01vZGUgY2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0
aXZlKQorICAgICAgICA6IFNWR0FuaW1hdGlvbkZ1bmN0aW9uKGFuaW1hdGlvbk1vZGUpCisgICAg
ICAgICwgbV9jYWxjTW9kZShjYWxjTW9kZSkKKyAgICAgICAgLCBtX2lzQWNjdW11bGF0ZWQoaXNB
Y2N1bXVsYXRlZCkKKyAgICAgICAgLCBtX2lzQWRkaXRpdmUoaXNBZGRpdGl2ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRGcm9tQW5kQnlWYWx1ZXMoU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIGJ5KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgc2V0RnJvbUFuZFRvVmFsdWVzKHRhcmdldEVsZW1lbnQsIGZyb20sIGJ5KTsK
KyAgICAgICAgYWRkRnJvbUFuZFRvVmFsdWVzKHRhcmdldEVsZW1lbnQpOworICAgIH0KKworICAg
IHZvaWQgc2V0VG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgZmxvYXQgcHJvZ3Jlc3MoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291
bnQsIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBmbG9hdCB0b0F0RW5kT2ZEdXJhdGlvbiwgZmxvYXQg
YW5pbWF0ZWQpCisgICAgeworICAgICAgICBmbG9hdCBudW1iZXI7CisgICAgICAgIGlmIChtX2Nh
bGNNb2RlID09IENhbGNNb2RlOjpEaXNjcmV0ZSkKKyAgICAgICAgICAgIG51bWJlciA9IHBlcmNl
bnRhZ2UgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG51bWJl
ciA9ICh0byAtIGZyb20pICogcGVyY2VudGFnZSArIGZyb207CisKKyAgICAgICAgaWYgKG1faXNB
Y2N1bXVsYXRlZCAmJiByZXBlYXRDb3VudCkKKyAgICAgICAgICAgIG51bWJlciArPSB0b0F0RW5k
T2ZEdXJhdGlvbiAqIHJlcGVhdENvdW50OworCisgICAgICAgIGlmIChtX2lzQWRkaXRpdmUgJiYg
bV9hbmltYXRpb25Nb2RlICE9IEFuaW1hdGlvbk1vZGU6OlRvKQorICAgICAgICAgICAgbnVtYmVy
ICs9IGFuaW1hdGVkOworCisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgQ2Fs
Y01vZGUgbV9jYWxjTW9kZTsKKyAgICBib29sIG1faXNBY2N1bXVsYXRlZDsKKyAgICBib29sIG1f
aXNBZGRpdGl2ZTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmVjMjNkMzc0NTExM2QxMDFlZDgyYzhhOGFhMDhmMWYyMDcyMzViZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFk
ZGl0aXZlVmFsdWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CitjbGFzcyBTVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbiB7
CitwdWJsaWM6CisgICAgdXNpbmcgU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbjo6U1ZHQW5p
bWF0aW9uQWRkaXRpdmVGdW5jdGlvbjsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBWYWx1ZVR5cGUg
dG9BdEVuZE9mRHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RvQXRFbmRPZkR1cmF0aW9uID8g
Km1fdG9BdEVuZE9mRHVyYXRpb24gOiBtX3RvOyB9CisKKyAgICBWYWx1ZVR5cGUgbV9mcm9tOwor
ICAgIFZhbHVlVHlwZSBtX3RvOworICAgIE9wdGlvbmFsPFZhbHVlVHlwZT4gbV90b0F0RW5kT2ZE
dXJhdGlvbjsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wOThiOWNlNGQwYmQ2NGIzOTI2Nzc5MDY3NjQxNGRhN2IxYTlkMjE1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIlNWR1Byb3BlcnR5VHJhaXRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
U1ZHQW5pbWF0aW9uSW50ZWdlckZ1bmN0aW9uIDogcHVibGljIFNWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbjxpbnQ+IHsKKyAgICBmcmllbmQgY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
UGFpckFuaW1hdG9yOworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IFNWR0FuaW1hdGlvbkFk
ZGl0aXZlVmFsdWVGdW5jdGlvbjxpbnQ+OworICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICB2
b2lkIHNldEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBj
b25zdCBTdHJpbmcmIHRvKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9mcm9tID0gU1ZHUHJv
cGVydHlUcmFpdHM8aW50Pjo6ZnJvbVN0cmluZyhmcm9tKTsKKyAgICAgICAgbV90byA9IFNWR1By
b3BlcnR5VHJhaXRzPGludD46OmZyb21TdHJpbmcodG8pOworICAgIH0KKworICAgIHZvaWQgc2V0
VG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV90b0F0RW5kT2ZEdXJhdGlvbiA9IFNWR1Byb3BlcnR5
VHJhaXRzPGludD46OmZyb21TdHJpbmcodG9BdEVuZE9mRHVyYXRpb24pOworICAgIH0KKworICAg
IHZvaWQgcHJvZ3Jlc3MoU1ZHRWxlbWVudCosIGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJl
cGVhdENvdW50LCBpbnQmIGFuaW1hdGVkKQorICAgIHsKKyAgICAgICAgYW5pbWF0ZWQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHJvdW5kZihCYXNlOjpwcm9ncmVzcyhwZXJjZW50YWdlLCByZXBlYXRDb3Vu
dCwgbV9mcm9tLCBtX3RvLCB0b0F0RW5kT2ZEdXJhdGlvbigpLCBhbmltYXRlZCkpKTsKKyAgICB9
CisKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5n
JiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6YWJzKHRvLnRvSW50U3RyaWN0KCkgLSBmcm9tLnRvSW50U3RyaWN0KCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50
Kikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdG8gKz0gbV9mcm9tOworICAgIH0KK307CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlv
bkZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25G
dW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhZWI3MWNkOGExNDM5OWU1ZTgyZDlkYzdiZWM5OWUxYjIz
MTljODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRpb25GdW5jdGlvbi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdBbmltYXRpb25GdW5jdGlvbiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+U1ZHQW5pbWF0aW9uRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNEaXNjcmV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJv
bUFuZEJ5VmFsdWVzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9BdEVuZE9mRHVyYXRpb25W
YWx1ZShjb25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURp
c3RhbmNlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBjb25zdCB7
IHJldHVybiAtMTsgfQorcHJvdGVjdGVkOgorICAgIFNWR0FuaW1hdGlvbkZ1bmN0aW9uKEFuaW1h
dGlvbk1vZGUgYW5pbWF0aW9uTW9kZSkKKyAgICAgICAgOiBtX2FuaW1hdGlvbk1vZGUoYW5pbWF0
aW9uTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFkZEZyb21BbmRUb1Zh
bHVlcyhTVkdFbGVtZW50KikgeyB9CisKKyAgICBBbmltYXRpb25Nb2RlIG1fYW5pbWF0aW9uTW9k
ZTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0FuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMzhkMmMyZmI1YzZjYjI0NmU2MGEyNTExNzk4OGNjMWYxMTI0MGRh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0b3IuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZH
QW5pbWF0b3IuaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU1ZHQW5pbWF0b3I6OmFwcGx5QW5pbWF0ZWRQ
cm9wZXJ0eUNoYW5nZShTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKQoreworICAgIEFTU0VSVCghZWxlbWVudC0+bV9kZWxldGlvbkhhc0JlZ3Vu
KTsKKyAgICBlbGVtZW50LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOworfQor
Cit2b2lkIFNWR0FuaW1hdG9yOjphcHBseUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CisgICAgQVNT
RVJUKG1fYXR0cmlidXRlTmFtZSAhPSBhbnlRTmFtZSgpKTsKKworICAgIC8vIEZJWE1FOiBEbyB3
ZSByZWFsbHkgbmVlZCB0byBjaGVjayBib3RoIGlzQ29ubmVjdGVkIGFuZCAhcGFyZW50Tm9kZT8K
KyAgICBpZiAoIXRhcmdldEVsZW1lbnQtPmlzQ29ubmVjdGVkKCkgfHwgIXRhcmdldEVsZW1lbnQt
PnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1ZHRWxlbWVudDo6SW5zdGFu
Y2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIoKnRhcmdldEVsZW1lbnQpOworICAgIGFwcGx5QW5pbWF0
ZWRQcm9wZXJ0eUNoYW5nZSh0YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOworCisgICAg
Ly8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdl
bGwsIHcvbyByZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KKyAgICBmb3Ig
KGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxlbWVudC0+aW5zdGFuY2VzKCkpCisgICAgICAgIGFw
cGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZShpbnN0YW5jZSwgbV9hdHRyaWJ1dGVOYW1lKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdG9yLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDlmMzY3MGVjNDA2ZjI4ZmIwZDlhMDM0M2JmYjMxMWE0ZGUyM2U1NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdG9yLmgKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgor
I2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTVkdFbGVtZW50OworCitlbnVtIGNsYXNzIEFuaW1hdGlvbk1vZGUgOiB1aW50OF90IHsg
Tm9uZSwgRnJvbVRvLCBGcm9tQnksIFRvLCBCeSwgVmFsdWVzLCBQYXRoIH07CitlbnVtIGNsYXNz
IENhbGNNb2RlIDogdWludDhfdCB7IERpc2NyZXRlLCBMaW5lYXIsIFBhY2VkLCBTcGxpbmUgfTsK
KworY2xhc3MgU1ZHQW5pbWF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdBbmltYXRvcj4gewor
cHVibGljOgorICAgIFNWR0FuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpCisgICAgICAgIDogbV9hdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgflNWR0FuaW1hdG9yKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVh
bCBib29sIGlzRGlzY3JldGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIHNldEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZyb21BbmRCeVZhbHVlcyhTVkdF
bGVtZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2
b2lkIHNldFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgc3RhcnQoU1ZHRWxlbWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJv
Z3Jlc3MoU1ZHRWxlbWVudCosIGZsb2F0LCB1bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShTVkdFbGVtZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQpID0gMDsKKworICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlz
dGFuY2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIGNvbnN0IHsg
cmV0dXJuIC0xOyB9CisgICAgdmlydHVhbCBSZWZQdHI8U1ZHQW5pbWF0b3I+IGNyZWF0ZVNpYmxp
bmcoQW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUsIGJvb2wsIGJvb2wpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNo
YW5nZShTVkdFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCisgICAgdm9pZCBhcHBs
eUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVudCopOworCisgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbV9hdHRyaWJ1dGVOYW1lOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVPd25lclByb3h5LmNwcAppbmRleCA1
NWM5MjBlMGM0MTNkMWVjNzFlNjcxNGQyMzcyMWEyNjYyNTdlNTUyLi41NmM2ZTllYmI0NTgzMzg0
OWRhZDI4NDM4MTI5NzJhNmFmODVjNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBdHRyaWJ1dGVPd25lclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVPd25lclByb3h5LmNwcApAQCAtMjYsNiArMjYs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZU93bmVyUHJv
eHkuaCIKIAorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTVkdBdHRyaWJ1dGVPd25lclByb3h5OjpTVkdBdHRyaWJ1dGVPd25lclByb3h5KFNWR0VsZW1l
bnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBdHRyaWJ1dGVPd25lclByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBdHRyaWJ1dGVPd25lclByb3h5LmgKaW5kZXggYzZiNjgyMTQxZWMwNWZhOTY3NWZkYjIyNjlj
MGNmOWU4MjhkMDE3OS4uMWIxNzBiNmRmNmE3YmUzMmY5Mzc0MjRiNzM2YjA0ZTFhZjJmZjBjZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3du
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0
ZU93bmVyUHJveHkuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5VHlwZS5o
IgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVSZWdpc3RyeS5oCmluZGV4IDMwMjIyODAwNjNiYWY0
ODYxMmFjMjU1YzliMzA2MzU5ZTkyNDUzZDMuLjk1YjVhMGE3MDcyYmI5YWI5ZWJjMTI5YzFhZGE0
Y2FlOWJiMGM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0F0dHJpYnV0ZVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQXR0cmlidXRlUmVnaXN0cnkuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRCb29sZWFuLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVu
Z3RoLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWROdW1iZXIuaCIKQEAgLTgwLDIwICs3OSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmVn
aXN0ZXJBdHRyaWJ1dGUoU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkF0dHJpYnV0ZUFjY2Vzc29yPE93
bmVyVHlwZSwgRW51bVR5cGU+Ojp0ZW1wbGF0ZSBzaW5nbGV0b248YXR0cmlidXRlTmFtZSwgYXR0
cmlidXRlPigpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxjb25zdCBMYXp5TmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgUXVhbGlmaWVkTmFtZT4mIGF0dHJpYnV0ZU5hbWUsIFNWR0FuaW1hdGVkSW50ZWdl
ckF0dHJpYnV0ZSBPd25lclR5cGU6OiphdHRyaWJ1dGU+Ci0gICAgdm9pZCByZWdpc3RlckF0dHJp
YnV0ZSgpCi0gICAgewotICAgICAgICByZWdpc3RlckF0dHJpYnV0ZShTVkdBbmltYXRlZEludGVn
ZXJBdHRyaWJ1dGVBY2Nlc3NvcjxPd25lclR5cGU+Ojp0ZW1wbGF0ZSBzaW5nbGV0b248YXR0cmli
dXRlTmFtZSwgYXR0cmlidXRlPigpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjb25zdCBMYXp5
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgUXVhbGlmaWVkTmFtZT4mIGF0dHJpYnV0ZU5hbWUsCi0gICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgKCppZGVudGlmaWVyKSgpLCBTVkdBbmltYXRlZEludGVn
ZXJBdHRyaWJ1dGUgT3duZXJUeXBlOjoqYXR0cmlidXRlLAotICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmICgqb3B0aW9uYWxJZGVudGlmaWVyKSgpLCBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1
dGUgT3duZXJUeXBlOjoqb3B0aW9uYWxBdHRyaWJ1dGU+Ci0gICAgdm9pZCByZWdpc3RlckF0dHJp
YnV0ZSgpCi0gICAgewotICAgICAgICByZWdpc3RlckF0dHJpYnV0ZShTVkdBbmltYXRlZE9wdGlv
bmFsSW50ZWdlckF0dHJpYnV0ZUFjY2Vzc29yPE93bmVyVHlwZT46OnRlbXBsYXRlIHNpbmdsZXRv
bjxhdHRyaWJ1dGVOYW1lLCBpZGVudGlmaWVyLCBhdHRyaWJ1dGUsIG9wdGlvbmFsSWRlbnRpZmll
ciwgb3B0aW9uYWxBdHRyaWJ1dGU+KCkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPGNvbnN0IExh
enlOZXZlckRlc3Ryb3llZDxjb25zdCBRdWFsaWZpZWROYW1lPiYgYXR0cmlidXRlTmFtZSwgU1ZH
QW5pbWF0ZWRMZW5ndGhBdHRyaWJ1dGUgT3duZXJUeXBlOjoqYXR0cmlidXRlPgogICAgIHZvaWQg
cmVnaXN0ZXJBdHRyaWJ1dGUoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR05ld0FuaW1hdGVkUHJvcGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc4
ODE5N2EwYWQzZmE1ZmI5Y2YyZTY1ZmZmYjQ3NzRiNDYwNzE0YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR05ld0FuaW1hdGVkUHJvcGVydHkuY3Bw
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTmV3QW5pbWF0
ZWRQcm9wZXJ0eS5oIgorCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NWR1Byb3BlcnR5T3duZXIqIFNWR05ld0FuaW1hdGVkUHJvcGVydHk6Om93bmVy
KCkgY29uc3QKK3sKKyAgICAvLyBDYXN0aW5nIGZyb20gU1ZHRWxlbWVudCB0byBTVkdQcm9wZXJ0
eU93bmVyIHJlcXVpcmVzIFNWR0VsZW1lbnQuaC4KKyAgICByZXR1cm4gbV9jb250ZXh0RWxlbWVu
dDsKK30KKwordm9pZCBTVkdOZXdBbmltYXRlZFByb3BlcnR5Ojpjb21taXRQcm9wZXJ0eUNoYW5n
ZSgpCit7CisgICAgaWYgKCFtX2NvbnRleHRFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAg
bV9jb250ZXh0RWxlbWVudC0+Y29tbWl0UHJvcGVydHlDaGFuZ2UodGhpcyk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR05ld0FuaW1hdGVkUHJv
cGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR05ld0FuaW1hdGVkUHJv
cGVydHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iZGQ0YzEyMDAxMmM0MzdkMDExYjQ2MjA4OGRmN2NhMjUzMDdl
MTJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
TmV3QW5pbWF0ZWRQcm9wZXJ0eS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlNWR1Byb3BlcnR5T3duZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
VkdOZXdBbmltYXRlZFByb3BlcnR5IDogcHVibGljIFJlZkNvdW50ZWQ8U1ZHTmV3QW5pbWF0ZWRQ
cm9wZXJ0eT4sIHB1YmxpYyBTVkdQcm9wZXJ0eU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5TVkdOZXdBbmltYXRlZFByb3BlcnR5KCkgPSBkZWZhdWx0OworICAgIAorICAgIC8vIE1hbmFn
ZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIG93bmVyLgorICAgIGJvb2wgaXNBdHRhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEVsZW1lbnQ7IH0KKyAgICB2b2lkIGRldGFjaCgpIHsg
bV9jb250ZXh0RWxlbWVudCA9IG51bGxwdHI7IH0KKyAgICBTVkdFbGVtZW50KiBjb250ZXh0RWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEVsZW1lbnQ7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIFN0cmluZyBiYXNlVmFsQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygp
OyB9CisgICAgdmlydHVhbCBTdHJpbmcgYW5pbVZhbEFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsgfQorICAgIAorICAgIC8vIENvbnRyb2wgdGhlIHN5bmNocm9uaXphdGlv
biBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgYW5kIGl0cyByZWZsZWN0aW9uIGluIGJhc2VWYWwuCisg
ICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXREaXJ0eSgpIHsgfQorICAgIHZpcnR1YWwgT3B0aW9uYWw8U3RyaW5nPiBz
eW5jaHJvbml6ZSgpIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIAorICAgIC8vIENvbnRy
b2wgdGhlIGFuaW1hdGlvbiBsaWZlIGN5Y2xlLgorICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0
aW9uKCkgeyBtX2lzQW5pbWF0aW5nID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5p
bWF0aW9uKCkgeyBtX2lzQW5pbWF0aW5nID0gZmFsc2U7IH0KKyAgICAKKyAgICAvLyBBdHRhY2gv
RGV0YWNoIHRoZSBhbmltVmFsIG9mIHRoZSB0cmFnZXQgZWxlbWVudCdzIHByb3BlcnR5IGJ5IHRo
ZSBpbnN0YW5jZSBlbGVtZW50J3MgcHJvcGVydHkuCisgICAgdmlydHVhbCB2b2lkIGluc3RhbmNl
U3RhcnRBbmltYXRpb24oU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eSYpIHsgbV9pc0FuaW1hdGluZyA9
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5zdGFuY2VTdG9wQW5pbWF0aW9uKCkgeyBtX2lz
QW5pbWF0aW5nID0gZmFsc2U7IH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBTVkdOZXdBbmltYXRl
ZFByb3BlcnR5KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorICAgICAgICA6IG1fY29udGV4
dEVsZW1lbnQoY29udGV4dEVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBTVkdQcm9w
ZXJ0eU93bmVyKiBvd25lcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0UHJvcGVy
dHlDaGFuZ2UoKSBvdmVycmlkZTsKKyAgICAKKyAgICBTVkdFbGVtZW50KiBtX2NvbnRleHRFbGVt
ZW50IHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9pc0FuaW1hdGluZyB7IGZhbHNlIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR05ld1Byb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdOZXdQcm9wZXJ0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkYTI4MGE3YWRmYzE4YTIyOTI4OWFk
Zjc0N2RiYWQ0ZTZjOGQ3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdOZXdQcm9wZXJ0eS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgU1ZHUHJvcGVydHlBY2Nlc3MgOiB1aW50OF90IHsgUmVhZFdyaXRlLCBSZWFkT25seSB9Owor
ZW51bSBjbGFzcyBTVkdQcm9wZXJ0eVN0YXRlIDogdWludDhfdCB7IENsZWFuLCBEaXJ0eSB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5T3duZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR1Byb3BlcnR5T3duZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDJhNTc4YTE1MWFmMjk5Y2U3
ODU0N2Y1ZjVhMGRlOWI0NDllODI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlPd25lci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdQcm9wZXJ0eU93bmVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5TVkdQcm9wZXJ0eU93bmVyKCkgPSBkZWZhdWx0OworCisgICAg
dmlydHVhbCBTVkdQcm9wZXJ0eU93bmVyKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGF0dHJpYnV0ZUNvbnRleHRF
bGVtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghb3duZXIoKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gb3duZXIoKS0+YXR0cmlidXRlQ29udGV4
dEVsZW1lbnQoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdFByb3BlcnR5
Q2hhbmdlKCkKKyAgICB7CisgICAgICAgIGlmICghb3duZXIoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgb3duZXIoKS0+Y29tbWl0UHJvcGVydHlDaGFuZ2UoKTsKKyAgICB9CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgU1ZHUHJvcGVydHlPd25lcigpID0gZGVmYXVsdDsKK307CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5T3du
ZXJSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlP
d25lclJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDMwMTFjZTJiMTI0YzMwYjVjZTE2NGRkZjYwYWRk
MzA0MDlmY2U0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR1Byb3BlcnR5T3duZXJSZWdpc3RyeS5oCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3JJbXBsLmgiCisjaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaCIKKyNpbmNsdWRlICJTVkdQ
cm9wZXJ0eVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTVkdBbmltYXRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3du
ZXJUeXBlLCB0eXBlbmFtZS4uLiBCYXNlVHlwZXM+CitjbGFzcyBTVkdQcm9wZXJ0eU93bmVyUmVn
aXN0cnkgOiBwdWJsaWMgU1ZHUHJvcGVydHlSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgU1ZHUHJv
cGVydHlPd25lclJlZ2lzdHJ5KE93bmVyVHlwZSYgb3duZXIpCisgICAgICAgIDogbV9vd25lcihv
d25lcikKKyAgICB7CisgICAgfQorCisgICAgdGVtcGxhdGU8Y29uc3QgTGF6eU5ldmVyRGVzdHJv
eWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+JiBhdHRyaWJ1dGVOYW1lLCBSZWY8U1ZHQW5pbWF0ZWRJ
bnRlZ2VyPiBPd25lclR5cGU6Oipwcm9wZXJ0eT4KKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclBy
b3BlcnR5KCkKKyAgICB7CisgICAgICAgIHJlZ2lzdGVyUHJvcGVydHkoYXR0cmlidXRlTmFtZSwg
U1ZHQW5pbWF0ZWRJbnRlZ2VyQWNjZXNzb3I8T3duZXJUeXBlPjo6dGVtcGxhdGUgc2luZ2xldG9u
PHByb3BlcnR5PigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjb25zdCBMYXp5TmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgUXVhbGlmaWVkTmFtZT4mIGF0dHJpYnV0ZU5hbWUsIFJlZjxTVkdBbmltYXRl
ZEludGVnZXI+IE93bmVyVHlwZTo6KnByb3BlcnR5MSwgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4g
T3duZXJUeXBlOjoqcHJvcGVydHkyPgorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyUHJvcGVydHko
KQorICAgIHsKKyAgICAgICAgcmVnaXN0ZXJQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLCBTVkdBbmlt
YXRlZEludGVnZXJQYWlyQWNjZXNzb3I8T3duZXJUeXBlPjo6dGVtcGxhdGUgc2luZ2xldG9uPHBy
b3BlcnR5MSwgcHJvcGVydHkyPigpKTsKKyAgICB9CisgICAgLy8gRW51bXJhdGUgYWxsIHRoZSBT
VkdBY2Nlc3NvcnMgcmVjdXJzaXZlbHkuIFRoZSBmdW5jdG9yIHdpbGwgYmUgY2FsbGVkIGFuZCB3
aWxsCisgICAgLy8gYmUgZ2l2ZW4gdGhlIHBhaXI8UXVhbGlmaWVkTmFtZSwgU1ZHQWNjZXNzb3I+
IHRpbGwgdGhlIGZ1bmN0b3IgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHN0YXRpYyBib29sIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogYXR0
cmlidXRlTmFtZVRvQWNjZXNzb3JNYXAoKSkgeworICAgICAgICAgICAgaWYgKCFmdW5jdG9yKGVu
dHJ5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5QmFzZVR5cGVzKGZ1bmN0b3IpOworICAgIH0KKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBPd25lclR5cGUgb3ducyBhIHByb3BlcnR5IHdob3NlIG5h
bWUgaXMgYXR0cmlidXRlTmFtZS4KKyAgICBzdGF0aWMgYm9vbCBpc0tub3duQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICByZXR1cm4g
ZmluZEFjY2Vzc29yKGF0dHJpYnV0ZU5hbWUpOworICAgIH0KKworICAgIFF1YWxpZmllZE5hbWUg
YW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZU5hbWUoY29uc3QgU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0
eSYgYW5pbWF0ZWRQcm9wZXJ0eSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFF1YWxp
ZmllZE5hbWUgYXR0cmlidXRlTmFtZSA9IG51bGxRTmFtZSgpOworICAgICAgICBlbnVtZXJhdGVS
ZWN1cnNpdmVseShbJl0oY29uc3QgYXV0byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAg
aWYgKCFlbnRyeS52YWx1ZS0+bWF0Y2hlcyhtX293bmVyLCBhbmltYXRlZFByb3BlcnR5KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBl
bnRyeS5rZXk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gYXR0cmlidXRlTmFtZTsKKyAgICB9CisKKyAgICAvLyBEZXRhY2ggYWxsIHRoZSBw
cm9wZXJ0aWVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlaXIgT3duZXJUeXBlcy4KKyAgICB2b2lkIGRl
dGFjaEFsbFByb3BlcnRpZXMoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZW51bWVy
YXRlUmVjdXJzaXZlbHkoWyZdKGNvbnN0IGF1dG8mIGVudHJ5KSAtPiBib29sIHsKKyAgICAgICAg
ICAgIGVudHJ5LnZhbHVlLT5kZXRhY2gobV9vd25lcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gRmluZHMgdGhlIHByb3BlcnR5IHdob3Nl
IG5hbWUgaXMgYXR0cmlidXRlTmFtZSBhbmQgcmV0dXJucyB0aGUgc3luY2hyb25pemUKKyAgICAv
LyBzdHJpbmcgdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBTVkdBY2Nlc3Nvci4KKyAgICBPcHRpb25h
bDxTdHJpbmc+IHN5bmNocm9uaXplKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBPcHRpb25hbDxTdHJpbmc+IHZhbHVlOwor
ICAgICAgICBlbnVtZXJhdGVSZWN1cnNpdmVseShbJl0oY29uc3QgYXV0byYgZW50cnkpIC0+IGJv
b2wgeworICAgICAgICAgICAgaWYgKCFlbnRyeS5rZXkubWF0Y2hlcyhhdHRyaWJ1dGVOYW1lKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHZhbHVlID0gZW50cnku
dmFsdWUtPnN5bmNocm9uaXplKG1fb3duZXIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIC8vIEVudW1l
cmF0ZSByZWN1cnNpdmVseSB0aGUgU1ZHQWNjZXNzb3JzIG9mIHRoZSBPd25lclR5cGUgYW5kIGFs
bCBpdHMgQmFzZVR5cGVzLgorICAgIC8vIENvbGxlY3QgYWxsIHRoZSBwYWlycyA8QXR0cmlidXRl
TmFtZSwgU3RyaW5nPiBvbmx5IGZvciB0aGUgZGlydHkgcHJvcGVydGllcy4KKyAgICBIYXNoTWFw
PFF1YWxpZmllZE5hbWUsIFN0cmluZz4gc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgU3RyaW5nPiBt
YXA7CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KFsmXShjb25zdCBhdXRvJiBlbnRyeSkg
LT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoYXV0byBzdHJpbmcgPSBlbnRyeS52YWx1ZS0+c3lu
Y2hyb25pemUobV9vd25lcikpCisgICAgICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5rZXksICpz
dHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gbWFwOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgYSB2aXJ0dWFsIGZ1bmN0aW9uIGJl
Y2F1c2UgU1ZHRWxlbWVudCB3aWxsIGFjY2VzcyBpdCB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzLgor
ICAgIGJvb2wgaXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBib29sIGlzQW5p
bWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZSA9IGZhbHNlOworICAgICAgICBlbnVtZXJhdGVSZWN1cnNp
dmVseShbJmF0dHJpYnV0ZU5hbWUsICZpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGVdKGNvbnN0
IGF1dG8mIGVudHJ5KSAtPiBib29sIHsKKyAgICAgICAgICAgIGlmICghZW50cnkua2V5Lm1hdGNo
ZXMoYXR0cmlidXRlTmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUgPSBlbnRyeS52YWx1ZS0+aXNBbmltYXRl
ZFByb3BlcnR5KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gaXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlOworICAgIH0KKworICAgIC8v
IENyZWF0ZXMgYW4gU1ZHQW5pbWF0b3IgZm9yIGEgZ2l2ZW4gYXR0cmlidXRlTmFtZS4KKyAgICBS
ZWZQdHI8U1ZHQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUgY2FsY01v
ZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgUmVmUHRyPFNWR0FuaW1hdG9yPiBhbmltYXRvcjsKKyAgICAgICAgZW51
bWVyYXRlUmVjdXJzaXZlbHkoWyZdKGNvbnN0IGF1dG8mIGVudHJ5KSAtPiBib29sIHsKKyAgICAg
ICAgICAgIGlmICghZW50cnkua2V5Lm1hdGNoZXMoYXR0cmlidXRlTmFtZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBhbmltYXRvciA9IGVudHJ5LnZhbHVlLT5j
cmVhdGVBbmltYXRvcihtX293bmVyLCBhdHRyaWJ1dGVOYW1lLCBhbmltYXRpb25Nb2RlLCBjYWxj
TW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gYW5pbWF0b3I7CisgICAgfQorCisgICAg
dm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIFJlZlB0cjxTVkdBbmltYXRvcj4mIGFuaW1hdG9yKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgZW51bWVyYXRlUmVjdXJzaXZlbHkoWyZdKGNvbnN0IGF1dG8mIGVudHJ5KSAt
PiBib29sIHsKKyAgICAgICAgICAgIGlmICghZW50cnkua2V5Lm1hdGNoZXMoYXR0cmlidXRlTmFt
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBlbnRyeS52YWx1
ZS0+YXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShtX293bmVyLCBhbmltYXRvcik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBT
aW5nbGV0b24gbWFwIGZvciBldmVyeSBPd25lclR5cGUuCisgICAgc3RhdGljIEhhc2hNYXA8UXVh
bGlmaWVkTmFtZSwgY29uc3QgU1ZHQWNjZXNzb3I8T3duZXJUeXBlPio+JiBhdHRyaWJ1dGVOYW1l
VG9BY2Nlc3Nvck1hcCgpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxRdWFsaWZpZWROYW1lLCBjb25zdCBTVkdBY2Nlc3NvcjxPd25lclR5cGU+Kj4+IGF0dHJp
YnV0ZU5hbWVUb0FjY2Vzc29yTWFwOworICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZVRvQWNj
ZXNzb3JNYXA7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTVkdBY2Nlc3NvcjxPd25lclR5
cGU+JiBwcm9wZXJ0eUFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgYXR0cmlidXRlTmFtZVRvQWNj
ZXNzb3JNYXAoKS5hZGQoYXR0cmlidXRlTmFtZSwgJnByb3BlcnR5QWNjZXNzb3IpOworICAgIH0K
KworICAgIC8vIFRoaXMgaXMgYSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aXRoIHBhcmFtZXRlciAnSScg
d2hvc2UgZGVmYXVsdCB2YWx1ZSA9IDAuIFNvIHlvdSBjYW4gY2FsbCBpdCB3aXRob3V0IGFueSBw
YXJhbWV0ZXIKKyAgICAvLyBmcm9tIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KCkuIEl0IHJldHVybnMg
dHJ1ZSBhbmQgaXMgZW5hYmxlX2lmPEkgPT0gc2l6ZW9mLi4uKEJhc2VUeXBlcyk+LiBTbyBpdCBp
cyBtYWlubHkgZm9yCisgICAgLy8gYnJlYWtpbmcgdGhlIHJlY3Vyc2lvbi4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yLCBzaXplX3QgSSA9IDA+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPEkgPT0gc2l6ZW9mLi4uKEJhc2VUeXBlcyksIGJvb2w+Ojp0eXBlIGVudW1l
cmF0ZVJlY3Vyc2l2ZWx5QmFzZVR5cGVzKGNvbnN0IEZ1bmN0b3ImKSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAvLyBUaGlzIHZlcnNpb24gb2YgYW5pbWF0ZWRUeXBlc0Jhc2VUeXBlcygpIGlzIGVu
YWJsZV9pZjxJIDwgc2l6ZW9mLi4uKEJhc2VUeXBlcyk+LgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3IsIHNpemVfdCBJID0gMD4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SSA8IHNpemVvZi4uLihCYXNlVHlwZXMpLCBib29sPjo6dHlwZSBlbnVtZXJhdGVSZWN1cnNp
dmVseUJhc2VUeXBlcyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8g
R2V0IHRoZSBiYXNlIHR5cGUgYXQgaW5kZXggJ0knIHVzaW5nIHN0ZDo6dHVwbGUgYW5kIHN0ZDo6
dHVwbGVfZWxlbWVudC4KKyAgICAgICAgdXNpbmcgQmFzZVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnR1
cGxlX2VsZW1lbnQ8SSwgdHlwZW5hbWUgc3RkOjp0dXBsZTxCYXNlVHlwZXMuLi4+Pjo6dHlwZTsK
KyAgICAgICAgaWYgKCFCYXNlVHlwZTo6UHJvcGVydHlSZWdpc3RyeTo6ZW51bWVyYXRlUmVjdXJz
aXZlbHkoZnVuY3RvcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEJh
c2VUeXBlIGRvZXMgbm90IHdhbnQgdG8gYnJlYWsgdGhlIHJlY3Vyc2lvbi4gU28gcmVjdXJzZSB0
byB0aGUgbmV4dCBCYXNlVHlwZS4KKyAgICAgICAgcmV0dXJuIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5
QmFzZVR5cGVzPEZ1bmN0b3IsIEkgKyAxPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Y29uc3QgU1ZHQWNjZXNzb3I8T3duZXJUeXBlPiogZmluZEFjY2Vzc29yKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICAvLyBIZXJlIHdlIG5lZWQgdG8g
bG9vcCB0aHJvdWdoIHRoZSBlbnRyaWVzIGluIHRoZSBtYXAgYW5kIHVzZSBtYXRjaGVzKCkgdG8g
Y29tcGFyZSB0aGVtIHdpdGggYXR0cmlidXRlTmFtZS4KKyAgICAgICAgLy8gbV9tYXAuY29udGFp
bnMoKSB1c2VzIFF1YWxpZmllZE5hbWU6Om9wZXJhdG9yPT0oKSB3aGljaCBjb21wYXJlcyB0aGUg
aW1wbCBwb2ludGVycyBvbmx5IHdoaWxlIG1hdGNoZXMoKQorICAgICAgICAvLyBjb21wYXJlcyB0
aGUgY29udGVudHMgaWYgdGhlIGltcGwgcG9pbnRlcnMgZGlmZmVyLgorICAgICAgICBhdXRvIGl0
ID0gc3RkOjpmaW5kX2lmKGF0dHJpYnV0ZU5hbWVUb0FjY2Vzc29yTWFwKCkuYmVnaW4oKSwgYXR0
cmlidXRlTmFtZVRvQWNjZXNzb3JNYXAoKS5lbmQoKSwgWyZhdHRyaWJ1dGVOYW1lXShjb25zdCBh
dXRvJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gZW50cnkua2V5Lm1hdGNo
ZXMoYXR0cmlidXRlTmFtZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaXQgIT0gYXR0
cmlidXRlTmFtZVRvQWNjZXNzb3JNYXAoKS5lbmQoKSA/IGl0LT52YWx1ZSA6IG51bGxwdHI7Cisg
ICAgfQorCisgICAgT3duZXJUeXBlJiBtX293bmVyOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlSZWdpc3RyeS5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlSZWdpc3RyeS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc3ZDI5ODFlMjk1N2NlODhhOWU0YWJjNDhiZDk0ZTc5OWMzNDg4ZGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVJlZ2lzdHJ5LmgK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0b3IuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdOZXdBbmltYXRlZFByb3BlcnR5OworCitj
bGFzcyBTVkdQcm9wZXJ0eVJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBTVkdQcm9wZXJ0eVJlZ2lz
dHJ5KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgflNWR1Byb3BlcnR5UmVnaXN0cnkoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQWxsUHJvcGVydGllcygpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFF1YWxpZmllZE5hbWUgYW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZU5h
bWUoY29uc3QgU1ZHTmV3QW5pbWF0ZWRQcm9wZXJ0eSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPFN0cmluZz4gc3luY2hyb25pemUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgU3RyaW5nPiBzeW5jaHJv
bml6ZUFsbEF0dHJpYnV0ZXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBbmlt
YXRlZFByb3BlcnR5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBSZWZQdHI8U1ZHQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBBbmltYXRpb25Nb2RlLCBDYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxhdGVkLCBi
b29sIGlzQWRkaXRpdmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQW5pbWF0
ZWRJbnN0YW5jZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBSZWZQdHI8U1ZH
QW5pbWF0b3I+JikgY29uc3QgPSAwOworfTsKKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364870</attachid>
            <date>2019-03-15 16:02:17 -0700</date>
            <delta_ts>2019-03-15 18:22:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195722-20190315160216.patch</filename>
            <type>text/plain</type>
            <size>228546</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzAyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4NSBAQAorMjAxOS0wMy0xNSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0
aGUgU1ZHIHByb3BlcnR5IHRlYXIgb2ZmIG9iamVjdHMgZm9yIFNWR0FuaW1hdGVkSW50ZWdlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBv
ZiBzYXZpbmcgYSByYXcgaW50ZWdlciB2YWx1ZSBpbiB0aGUgU1ZHRWxlbWVudCBhbmQgdGhlbiB3
cmFwcGluZworICAgICAgICB0aGUgcG9pbnRlciB0byB0aGlzIHJhdyBkYXRhIGluIGEgdGVhciBv
ZmYgb2JqZWN0LCB3ZSB3aWxsIHJlcHJlc2VudCB0aGUKKyAgICAgICAgaW50ZWdlciBhcyBSZWY8
U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBpbiBTVkdFbGVtZW50LiBUaGlzIHdpbGwgbWFrZSB0aGUgCisg
ICAgICAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9wZXJ0eSBpbiBJREwgZmlsZSBtYXRjaCB0
aGUgQysrIGhlYWRlciBmaWxlLgorCisgICAgICAgIFdoZW4gdGhlIERPTSByZXF1ZXN0cyB0aGUg
U1ZHQW5pbWF0ZWRJbnRlZ2VyLCB3ZSBnZXQgcmV0dXJuIGEgcmVmZXJlbmNlCisgICAgICAgIHRv
IHRoZSBuZXcgYW5pbWF0ZWQgcHJvcGVydHkuIFdoZW4gdGhlIHJlbmRlcmluZyBjb2RlIGFza3Mg
Zm9yIHRoZSBjdXJyZW50CisgICAgICAgIHZhbHVlIG9mIHRoZSB0aGlzIGFuaW1hdGVkIHByb3Bl
cnR5LCB3ZSByZXR1cm4gdGhlIGFuaW1WYWwoKSBvciB0aGUKKyAgICAgICAgYmFzZVZhbCgpIGRl
cGVuZGluZyBvbiB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhbmltYXRpbmcgb3Igbm90LgorCisg
ICAgICAgIEEgcG9pbnRlciB0byBhIG1lbWJlciBpbiB0aGUgU1ZHRWxlbWVudCB3aWxsIGJlIHJl
Z2lzdGVyZWQgYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgYXNzb2NpYXRlZCBhdHRyaWJ1dGUgbmFt
ZSBpbiBTVkdQcm9wZXJ0eVJlZ2lzdHJ5LiBSZWdpc3RlcmluZyB0aGUgcHJvcGVydHkKKyAgICAg
ICAgY3JlYXRlcyBhbiBTVkdNZW1iZXJBY2Nlc3NvciBhbmQgbGlua3MgdG8gdGhlIGFzc29jaWF0
ZWQgYXR0cmlidXRlLiBUaGUKKyAgICAgICAgZnVuY3Rpb24gb2YgU1ZHTWVtYmVyQWNjZXNzb3Ig
aXMgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQorICAgICAgICBnaXZlbiBh
IHBvaW50ZXIgdG8gYW4gU1ZHRWxlbWVudC4KKworICAgICAgICBTVkdQcm9wZXJ0eVJlZ2lzdHJ5
IG1hbmFnZXMgYWxsIHRoZSBwcm9wZXJ0aWVzIG9mIFNWR0VsZW1lbnQuIEl0IHRha2VzCisgICAg
ICAgIGludG8gYWNjb3VudCB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgYXMgd2VsbC4KKworICAg
ICAgICBTVkdFbGVtZW50IHdpbGwgaGF2ZSBhIHZpcnR1YWwgbWV0aG9kIGNhbGxlZCBwcm9wZXJ0
eVJlZ2lzdHJ5KCkuIEV2ZXJ5CisgICAgICAgIHN1cGVyY2xhc3Mgd2lsbCBvdmVycmlkZSB0aGlz
IG1ldGhvZCB0byByZXR1cm4gYSByZWZlcmVuY2UgdG8gaXRzIHJlZ2lzdHJ5CisgICAgICAgIHdo
aWNoIGluY2x1ZGVzIGFsbCB0aGUgcmVnaXN0ZXJlZCBwcm9wZXJ0aWVzIG9mIHRoaXMgY2xhc3Mg
YW5kIGl0cyBiYXNlcy4KKworICAgICAgICBPbmUgaW1wb3J0YW50IGZ1bmN0aW9uIG9mIHRoZSBT
VkdQcm9wZXJ0eVJlZ2lzdHJ5IGFuZCBTVkdBY2Nlc3NvciBpcyB0aGV5CisgICAgICAgIGNyZWF0
ZSB0aGUgYXBwcm9wcmlhdGUgU1ZHQXR0cmlidXRlQW5pbWF0b3IgZm9yIHRoaXMgcHJvcGVydHku
CisKKyAgICAgICAgU1ZHQXR0cmlidXRlQW5pbWF0b3IgaXMganVzdCBhIGNvbm5lY3Rpb24gYmV0
d2VlbiB0aGUgYW5pbWF0ZWQgcHJvcGVydHkKKyAgICAgICAgYW5kIFNWR0FuaW1hdGlvbkZ1bmN0
aW9uLiBTVkdBbmltYXRpb25GdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSB2YWx1ZXMgb2YKKyAgICAg
ICAgdGhlIGFuaW1hdGVkIHByb3BlcnR5IHdpdGhpbiBhIHRpbWUgaW50ZXJ2YWwuIFNWR0FuaW1h
dGVkUHJvcGVydHlBbmltYXRvcgorICAgICAgICB1cGRhdGVzIGFuaW1WYWwgb2YgdGhlIGFuaW1h
dGVkIHByb3BlcnR5IGFuZCBpbnZhbGlkYXRlcyB0aGUgYXNzb2NpYXRlZAorICAgICAgICBTVkdF
bGVtZW50IGFuZCBhbGwgdGhlIGluc3RhbmNlcyB0aGF0IHJlZmVyZW5jZXMgdGhpcyBlbGVtZW50
LgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIHJlbW92ZSBhbGwgdGhlIFNWRyB0ZWFyIG9mZiBv
YmplY3RzIGxpa2Ugd2hhdCB0aGlzIHBhdGNoCisgICAgICAgIGRvZXMgZm9yIFNWR0FuaW1hdGVk
SW50ZWdlci4gU28gZm9yIGEgcGVyaW9kIG9mIHRpbWUgdGhlIG9sZCBjb2RlIGFuZCB0aGUKKyAg
ICAgICAgbmV3IGNvZGUgd2lsbCBjby1leGlzdCB0b2dldGhlci4gVGhlc2UgdGhpbmdzIHRvIGNv
bnNpZGVyIHdoZW4gcmV2aWV3aW5nCisgICAgICAgIHRoaXMgcGF0Y2g6CisKKyAgICAgICAgLS0g
U1ZHQW5pbWF0ZWRFbGVtZW50QmFzZSB3YXMgcmUtZmFjdG9yZWQgdG8gdXNlIFNWR0F0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlCisgICAgICAgIHdoaWNoIGlzIGluaGVyaXRlZCBieSBT
VkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyIGFuZAorICAgICAgICBTVkdBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyLiBUaGUgdGVhci1vZmYgcHJvcGVydGllcyBjb2RlIHdo
aWNoIHVzZXMKKyAgICAgICAgU1ZHQW5pbWF0ZWRUeXBlIG5vdyBsaXZlcyBpbiBTVkdMZWdhY3lB
dHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLiBUaGUKKyAgICAgICAgbmV3IGNvZGUgd2FzIGFk
ZGVkIHRvIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuIFRoZSBwbGFuIGlzIHRvIAor
ICAgICAgICByZW1vdmUgdGhlIHRocmVlIGFuaW1hdGlvbiBjb250cm9sbGVycyBhbmQgdG8gbW92
ZSB0aGUgY29kZSBvZgorICAgICAgICBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyIHRv
IFNWR0FuaW1hdGVkRWxlbWVudEJhc2Ugd2hlbiBhbGwgdGhlIHRlYXIKKyAgICAgICAgb2ZmIGNv
ZGUgaXMgcmVtb3ZlZC4KKworICAgICAgICAtLSBTVkdFbGVtZW50IG5vdyBrZWVwcyB0d28gcmVn
aXN0cmllcyBvbmUgZm9yIHRoZSB0ZWFyLW9mZiB3b3JsZCBhbmQgdGhlCisgICAgICAgIG90aGVy
IGZvciB0aGUgbmV3IHdvcmxkLiBFdmVudHVhbGx5IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZiB0ZWFy
LW9mZiByZWdpc3RyeS4KKworICAgICAgICAtLSBTVkdFbGVtZW50IHdpbGwgZGlmZmVyZW50aWF0
ZSBiZXR3ZWVuIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBieSB0aGUKKyAgICAgICAgdGhlIG1l
dGhvZCBpc0FuaW1hdGVkQXR0cmlidXRlKCkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRl
cik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OlNWR0FuaW1hdGVFbGVtZW50QmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNWYWxpZEF0
dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRC
YXNlOjpkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVUb0F0RW5kT2ZE
dXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6
Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVF
bGVtZW50QmFzZTo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjbGVhckFuaW1hdGVkVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aXNBZGRpdGl2ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZURp
c3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6c2V0VGFy
Z2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OnNl
dEF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNl
OjpyZXNldEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJh
c2U6Omhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5VHlwZXNBcmVDb25zaXN0ZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6YXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldEFu
ZEluc3RhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpub3RpZnlUYXJnZXRBYm91
dEFuaW1WYWxDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5VGFyZ2V0
QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6YW5pbWF0ZWRQcm9wZXJ0eVR5cGVTdXBwb3J0c0Fk
ZGl0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVt
ZW50QmFzZTo6cmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmVuc3VyZUFuaW1hdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmg6CisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRB
dHRyaWJ1dGVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRlZEludGVnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRJ
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVkUG9pbnRMaXN0Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFuaW1h
dGVkUHJvcGVydHlUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRvckZhY3RvcnkuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdG9yRmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6U1ZHQXR0cmlidXRlQW5p
bWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRp
b25Db250cm9sbGVyOjphbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjppc0Rpc2NyZXRlQW5pbWF0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBZGRpdGl2
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9s
bGVyOjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1
bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc2V0QW5pbWF0
ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmli
dXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6YXBwbHlSZXN1bHRzVG9UYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2xlYXJBbmltYXRlZFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y2FsY3VsYXRlRGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25D
b250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlcjo6YW5pbWF0b3JJZkV4aXN0cyBjb25zdCk6CisgICAgICAgICogc3ZnL1NW
R0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZTo6U1ZHQXR0cmlidXRl
QW5pbWF0aW9uQ29udHJvbGxlckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRl
QW5pbWF0aW9uQ29udHJvbGxlckJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKToK
KyAgICAgICAgKiBzdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaDogQWRk
ZWQuCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RWxlbWVudDo6c3luY2hyb25pemVBbGxBbmltYXRlZFNWR0F0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdFbGVtZW50OjpzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmNvbW1pdFByb3BlcnR5Q2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojppc0FuaW1hdGVkQXR0cmli
dXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmNyZWF0ZUFuaW1hdG9y
KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudDo6cHJvcGVydHlSZWdpc3RyeSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cmVnaXN0ZXJBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c2V0T3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om9yZGVyWElk
ZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6Om9yZGVyWUlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OlNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6cmVnaXN0ZXJBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXI6OlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0ZWRUeXBl
QW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9u
Q29udHJvbGxlcjo6aXNBZGRpdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZWdh
Y3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xl
Z2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9s
bGVyOjpjYWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OnByb3BlcnR5VHlwZXNBcmVDb25zaXN0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlZ2Fj
eUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc2V0QW5pbWF0ZWRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1
bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlDU1NQcm9wZXJ0eVRv
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldCk6
CisgICAgICAgIChXZWJDb3JlOjphcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFu
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlUYXJnZXRBbmRJbnN0YW5jZXNBYm91dEFuaW1WYWxD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29u
dHJvbGxlcjo6YXBwbHlSZXN1bHRzVG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVn
YWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2xlYXJBbmltYXRlZFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2Fs
Y3VsYXRlRGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRp
b25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlTmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aGFz
VmFsaWRBdHRyaWJ1dGVOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmlt
aXRpdmVQcm9wZXJ0eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJp
bWl0aXZlUHJvcGVydHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBy
aW1pdGl2ZVByb3BlcnR5OjpzZXRCYXNlVmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkUHJpbWl0aXZlUHJvcGVydHk6OnNldEJhc2VWYWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5OjpiYXNlVmFsIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6OnNldEFuaW1WYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eTo6YW5pbVZhbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5Ojph
bmltVmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6
OmN1cnJlbnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1p
dGl2ZVByb3BlcnR5OjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5KToKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojpvd25lciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojpjb21taXRQcm9wZXJ0eUNoYW5nZSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6OmlzQXR0YWNoZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6OmNvbnRleHRFbGVtZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6OmJhc2VWYWxBc1N0cmluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5OjphbmltVmFsQXNTdHJpbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6aXNEaXJ0eSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5OjpzZXREaXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5OjpzeW5jaHJvbml6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojppc0FuaW1hdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5OjpzdGFydEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5OjpzdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6Omluc3RhbmNlU3RhcnRBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6aW5zdGFuY2VTdG9w
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6OlNWR0Fu
aW1hdGVkUHJvcGVydHkpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJv
cGVydHlBY2Nlc3Nvci5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRlZFByb3BlcnR5QWNjZXNzb3JJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjo6YXBwZW5kQW5pbWF0ZWRJbnN0YW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3I6OlNWR0FuaW1h
dGVkUHJvcGVydHlBbmltYXRvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFByb3BlcnR5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvcjo6U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVBhaXJBY2Nlc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5
UGFpckFjY2Vzc29yOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVBhaXJBY2Nlc3Nvcjo6cHJvcGVydHkxIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3I6OnByb3BlcnR5MiBjb25zdCk6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwu
aDogQWRkZWQuCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBh
aXJBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQW5pbWF0b3I6OmFwcGVuZEFuaW1hdGVkSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvcjo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBh
aXJBbmltYXRvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0
eVBhaXJBbmltYXRvckltcGwuaDogQWRkZWQuCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb246OlNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbjo6cHJvZ3Jl
c3MpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbjo6dG9BdEVuZE9mRHVyYXRpb24gY29uc3QpOgorICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25JbnRlZ2VyRnVuY3Rpb246OnByb2dyZXNz
KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25GdW5jdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkZ1bmN0aW9uOjppc0Rpc2NyZXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkZ1bmN0aW9uOjpjYWxjdWxhdGVE
aXN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25GdW5jdGlvbjo6
U1ZHQW5pbWF0aW9uRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRnVu
Y3Rpb246OmFkZEZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZH
QXR0cmlidXRlQW5pbWF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJp
YnV0ZUFuaW1hdG9yOjphcHBseUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0b3I6OlNWR0F0dHJpYnV0ZUFuaW1hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdG9yOjppc0Rpc2NyZXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdG9yOjpzZXRGcm9tQW5kVG9WYWx1ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0b3I6OnNldEZyb21BbmRCeVZh
bHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRvcjo6c2V0VG9BdEVu
ZE9mRHVyYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRv
cjo6Y2FsY3VsYXRlRGlzdGFuY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NW
R0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZU93bmVyUHJveHkuaDoKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1
dGVSZWdpc3RyeS5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR01lbWJlckFjY2Vzc29y
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWVtYmVyQWNjZXNzb3I6OmRldGFjaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNZW1iZXJBY2Nlc3Nvcjo6aXNBbmltYXRlZFBy
b3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01lbWJlckFjY2Vzc29yOjppc0Fu
aW1hdGVkTGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01lbWJlckFjY2Vzc29y
OjptYXRjaGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01lbWJlckFjY2Vzc29yOjpz
eW5jaHJvbml6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNZW1iZXJBY2Nlc3Nvcjo6
Y3JlYXRlQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWVtYmVyQWNjZXNz
b3I6OmFwcGVuZEFuaW1hdGVkSW5zdGFuY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0
aWVzL1NWR01lbWJlckFjY2Vzc29yUHRyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TWVtYmVyQWNjZXNzb3JQdHI6OlNWR01lbWJlckFjY2Vzc29yUHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR01lbWJlckFjY2Vzc29yUHRyOjpwcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNZW1iZXJBY2Nlc3NvclB0cjo6c2luZ2xldG9uKToKKyAgICAgICAgKiBzdmcvcHJv
cGVydGllcy9TVkdQcm9wZXJ0eS5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9T
VkdQcm9wZXJ0eU93bmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlP
d25lcjo6b3duZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlPd25lcjo6
YXR0cmlidXRlQ29udGV4dEVsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlPd25lcjo6Y29tbWl0UHJvcGVydHlDaGFuZ2UpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0
aWVzL1NWR1Byb3BlcnR5T3duZXJSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTo6U1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk6OmVudW1lcmF0
ZVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3Ry
eTo6aXNLbm93bkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eU93bmVy
UmVnaXN0cnk6OmVudW1lcmF0ZVJlY3Vyc2l2ZWx5QmFzZVR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTo6ZmluZEFjY2Vzc29yKToKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVJlZ2lzdHJ5Lmg6IEFkZGVkLgorCiAyMDE5LTAzLTE1
ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIFsgTW9qYXZlIFdL
MSBdIExheW91dCBUZXN0IHN0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLW9kZC1uYW1lcy5odG1s
IGlzIGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjI3Myw4ICsyMjczLDYg
QEAgc3ZnL1NWR0FuaW1hdGVkQW5nbGUuY3BwCiBzdmcvU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAog
c3ZnL1NWR0FuaW1hdGVkQ29sb3IuY3BwCiBzdmcvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAK
LXN2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCi1zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9u
YWxJbnRlZ2VyLmNwcAogc3ZnL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAogc3ZnL1NWR0FuaW1hdGVk
TGVuZ3RoTGlzdC5jcHAKIHN2Zy9TVkdBbmltYXRlZE51bWJlci5jcHAKQEAgLTIyODgsNiArMjI4
Niw4IEBAIHN2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAKIHN2Zy9TVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3QuY3BwCiBzdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuY3BwCiBzdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKK3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcAor
c3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcAogc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCiBzdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAogc3ZnL1NWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcApAQCAtMjM0NSw2ICsyMzQ1LDcgQEAgc3ZnL1NW
R0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VM
b2FkZXIuY3BwCiBzdmcvU1ZHTGFuZ1NwYWNlLmNwcAorc3ZnL1NWR0xlZ2FjeUF0dHJpYnV0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKIHN2Zy9TVkdM
ZW5ndGhMaXN0VmFsdWVzLmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcApAQCAtMjQyNCw2ICsy
NDI1LDggQEAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIAogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAKK3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuY3BwCitzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5jcHAK
IHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwCiBzdmcvcHJvcGVydGll
cy9TVkdMZWdhY3lBbmltYXRlZFByb3BlcnR5LmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDI5Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNiBAQAogCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1
REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlv
dXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1l
bnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9
OwogCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkwRkQzNEY0
MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKLQkJMDgyM0QxNTkxMjdBRDZB
QzAwMEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyM0QxNTgxMjdBRDZBQzAwMEVCQzk1IC8qIFNWR0Fu
aW1hdGVkSW50ZWdlci5oICovOyB9OwogCQkwODI1MDkzOTEyOEJENEQ4MDBFMkVEOEUgLyogU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODI1MDkzODEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0LmggKi87IH07CiAJCTA4MkRFNDJEMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRo
U2VnV2l0aENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4MkRFNDJDMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQu
aCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
aCAqLzsgfTsKQEAgLTIxMzYsNyArMjEzNSw2IEBACiAJCTcxRENCNzAyMTU2ODE5NzYwMDg2MjI3
MSAvKiBKU1NWR1pvb21BbmRQYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxRENCNzAwMTU2ODE5NzYwMDg2MjI3MSAvKiBKU1NWR1pvb21BbmRQYW4u
aCAqLzsgfTsKIAkJNzFFMjE4M0ExNzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTIxODM4
MTczNTlGQjgwMDZFNkU0RCAvKiBQbHVnSW5zUmVzb3VyY2VzLmggKi87IH07CiAJCTcxRTJDNDI2
MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5MzUxRDAwMjRGOEM4
IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzFFNjIzRDExNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1h
dGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzFFNjIzQ0YxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlci5oICovOyB9OwogCQk3MUVBRENEODIyMDg3RTcyMDA2NUE0
NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYgLyogUG9pbnRlcklELmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFFRkNFREMyMDJCMzhB
OTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlv
bkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcxRkI5NjdCMTM4M0Q2NDYwMEFDOEE0QyAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJv
cGVydHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUZCOTY3QTEzODNENjQ2MDBBQzhBNEMgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblBy
b3BlcnR5VGVhck9mZi5oICovOyB9OwpAQCAtNTYwMiw3ICs1NjAwLDYgQEAKIAkJMDgxQUE4RDkx
MTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdFbGVtZW50UmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDgxRUJGMzgwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUVCRjM5MEZEMzRGNDEwMERB
NzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgy
M0QxNTgxMjdBRDZBQzAwMEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZEludGVnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgyNTA5MzgxMjhCRDREODAwRTJFRDhFIC8qIFNWR0FuaW1hdGVk
VHJhbnNmb3JtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmlt
YXRlZFRyYW5zZm9ybUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyREU0
MkMxMjkyNjIxNjAwRDkyM0RGIC8qIFNWR1BhdGhTZWdXaXRoQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU2VnV2l0aENvbnRleHQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc2ODksNyArNzY4Niw2IEBACiAJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAv
KiBJbWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdDMUI0
ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzRURENjdEMUI0ODVEQkYwMDY0MEU3NSAvKiBD
b21iaW5lZEZpbHRlcnNBbHBoYWJldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0M0Y2RkQ5NTEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0FuaW1hdGVkSW50ZWdlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAv
KiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Mjk1NkNBMjE4QTZEMzAw
MDgwREI1NCAvKiBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTg2NjksMTEgKzg2NjUsMzUgQEAKIAkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIElt
YWdlQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QUYxNEUzMUVB
QUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVVElS
ZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QUYxNEU0MUVBQUM1
OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVVElSZWdpc3RyeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJFMDI1NzIyM0IyOUMwMDAzMkYwOEEg
LyogU1ZHUHJvcGVydHlSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eVJlZ2lz
dHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkUwMjU5MjIzQjI5QzEwMDMy
RjA4QSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCRTAyNUEyMjNCMjlDMjAwMzJGMDhBIC8qIFNWR01lbWJl
ckFjY2Vzc29yUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01lbWJlckFjY2Vzc29yUHRyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkUwMjVCMjIzQjI5QzIwMDMyRjA4QSAvKiBT
VkdBbmltYXRpb25GdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25GdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJFMDI1QzIyM0IyOUMzMDAzMkYw
OEEgLyogU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3Bl
cnR5T3duZXJSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJFMDI1
RDIyM0IyOUM0MDAzMkYwOEEgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTVCRTAyNUUyMjNCMjlDNDAwMzJGMDhBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWly
QWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJFMDI1RjIyM0IyOUM1MDAzMkYw
OEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU1RDcwRDIwMjIzQjAwOTEwMDA0NEI4RSAvKiBTVkdMZWdhY3lBbmlt
YXRlZFByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0xlZ2Fj
eUFuaW1hdGVkUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVENzBE
MjEyMjNCMDBCQjAwMDQ0QjhFIC8qIFNWR0xlZ2FjeUFuaW1hdGVkUHJvcGVydHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1ZHTGVnYWN5QW5pbWF0ZWRQcm9wZXJ0eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1RDcwRDIyMjIzQjAwRUEwMDA0NEI4RSAvKiBTVkdMZWdhY3lQ
cm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdMZWdhY3lQcm9w
ZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3
REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJl
cXVlbmN5VHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUVFNTM1NDIy
M0IyOUU5MDBGQkE5NDQgLyogU1ZHTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHTWVtYmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTVFRTUzNTYyMjNCMjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlB
bmltYXRvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
NUVFNTM1NzIyM0IyOUY4MDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByaW1pdGl2ZVBy
b3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzU4MjIzQjI5Rjkw
MEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3JJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3NvckltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVFRTUzNTkyMjNCMjlGQTAwRkJBOTQ0IC8q
IFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTVFRTUzNUEyMjNCMjlGQjAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVy
dHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVFRTUz
NUIyMjNCMkEwQzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3JJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQ
YWlyQW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzVD
MjIzQjJBMEQwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5SW1wbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5SW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUVFNTM1RDIyM0IyQTBEMDBGQkE5NDQgLyogU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVFRTUzNUUyMjNCMkEwRTAwRkJBOTQ0IC8qIFNWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTVFRTUzNUYyMjNCMkEwRjAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJv
cGVydHlQYWlyQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eU93bmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzYxMjIzQjJBMjIwMEZCQTk0NCAvKiBTVkdBdHRy
aWJ1dGVBbmltYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdBdHRyaWJ1dGVBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
RUU1MzYyMjIzQjJBMjMwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3Bl
cnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzY0MjIzQjJBMjQwMEZCQTk0NCAvKiBT
VkdBdHRyaWJ1dGVBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdBdHRyaWJ1dGVBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUZB
N0ZFRjIxMEZBMzg2MDA1QUVGRTcgLyogU1ZHQXR0cmlidXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0F0dHJpYnV0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUZBN0ZGNDIxMEZC
Njg4MDA1QUVGRTcgLyogU1ZHQXR0cmlidXRlQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHQXR0cmlidXRlQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTVGQTdGRjYyMTBGQkUzRTAwNUFFRkU3IC8qIFNWR0F0dHJpYnV0ZVJlZ2lz
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0F0dHJpYnV0ZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05NDc2LDggKzk0OTYsNiBAQAogCQk3MUUyMTgzODE3MzU5RkI4
MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgZmlsZUVuY29kaW5nID0gNDsg
bmFtZSA9IFBsdWdJbnNSZXNvdXJjZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
UGx1Z0luc1Jlc291cmNlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQk3MUUyMTgzOTE3MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IG5hbWUgPSBQbHVnSW5zUmVzb3VyY2VzRGF0YS5j
cHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1BsdWdJbnNSZXNvdXJjZXNEYXRhLmNw
cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNzFFMkM0MjQyMUM5MzUx
RDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFuaW1hdGlvbkVmZmVjdFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTcxRTYyM0NFMTUxRjcyQTYwMDM2RTJGNCAvKiBTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzFFNjIzQ0YxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVySUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFFRkNFRDYyMDJCMzg4QzAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVm
ZmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25FZmZlY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0ODUsNiArOTUwMywxMiBAQAogCQk3
MUVGQ0VERTIwMkIzOUM3MDBEN0M0MTEgLyogSlNBbmltYXRpb25FZmZlY3RDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRpb25FZmZlY3RDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5
MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZCOTY3QTEzODNENjQ2MDBBQzhBNEMgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblBy
b3BlcnR5VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyM0Y5N0JDMjIzOEVFMDgwMDdGMDc5QyAvKiBTVkdBdHRyaWJ1dGVBbmltYXRpb25D
b250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdCRDIyMzhF
RTA4MDA3RjA3OUMgLyogU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyM0Y5N0JFMjIzOTUxMkQwMDdGMDc5QyAvKiBTVkdMZWdhY3lBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlZ2Fj
eUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjNGOTdCRjIyMzk1MTJEMDA3RjA3OUMgLyogU1ZHTGVnYWN5QXR0cmlidXRlQW5p
bWF0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdMZWdhY3lBdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyM0Y5N0Mw
MjIzOTZCODgwMDdGMDc5QyAvKiBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdDMTIyMzk3NzI1MDA3RjA3OUMgLyog
U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5N
YXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5N
YXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBG
NUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQz
MkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNjE3OCwxMyArMTYyMDIsMzEgQEAKIAkJCQkwODhBMERGQjEyNkVGMURCMDA5NzhGN0EgLyog
U1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmggKi8sCiAJCQkJNTVGQTdGRkMyMTEwRjgx
MzAwNUFFRkU3IC8qIFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwICov
LAogCQkJCTA4OUE4RTA2MTI4RDhCM0QwMEU3QTUzNCAvKiBTVkdBbmltYXRlZFBhdGhTZWdMaXN0
UHJvcGVydHlUZWFyT2ZmLmggKi8sCisJCQkJNTVFRTUzNTcyMjNCMjlGODAwRkJBOTQ0IC8qIFNW
R0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaCAqLywKKwkJCQk1NUJFMDI1RDIyM0IyOUM0MDAz
MkYwOEEgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAgKi8sCisJCQkJNTVFRTUzNjIyMjNCMkEy
MzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHkuaCAqLywKKwkJCQk1NUVFNTM1OTIyM0Iy
OUZBMDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yLmggKi8sCisJCQkJNTVF
RTUzNTgyMjNCMjlGOTAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3NvckltcGwu
aCAqLywKKwkJCQk1NUVFNTM1QTIyM0IyOUZCMDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yLmggKi8sCisJCQkJNTVFRTUzNTYyMjNCMjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1h
dGVkUHJvcGVydHlBbmltYXRvckltcGwuaCAqLywKIAkJCQkwODhBMERGRDEyNkVGMURCMDA5NzhG
N0EgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eURlc2NyaXB0aW9uLmggKi8sCisJCQkJNTVFRTUzNUMy
MjNCMkEwRDAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmggKi8sCisJCQkJNTVC
RTAyNUUyMjNCMjlDNDAwMzJGMDhBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3Iu
aCAqLywKKwkJCQk1NUVFNTM1RDIyM0IyQTBEMDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0
eVBhaXJBY2Nlc3NvckltcGwuaCAqLywKKwkJCQk1NUVFNTM1RjIyM0IyQTBGMDBGQkE5NDQgLyog
U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oICovLAorCQkJCTU1RUU1MzVCMjIzQjJB
MEMwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9ySW1wbC5oICovLAog
CQkJCTA4OEEwREZGMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5VGVhck9m
Zi5oICovLAogCQkJCTU1RkE3RkZFMjExMTBFNkUwMDVBRUZFNyAvKiBTVkdBbmltYXRlZFByb3Bl
cnR5VHlwZS5oICovLAogCQkJCTA4NTI1RTYyMTI3OEMwMDEwMEE4NDc3OCAvKiBTVkdBbmltYXRl
ZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oICovLAogCQkJCTA4NUExNTkyMTI4OUE4REQwMDI3MTBF
MyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLywKKwkJCQk1
NUJFMDI1RjIyM0IyOUM1MDAzMkYwOEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5o
ICovLAorCQkJCTU1RUU1MzVFMjIzQjJBMEUwMEZCQTk0NCAvKiBTVkdBbmltYXRpb25BZGRpdGl2
ZVZhbHVlRnVuY3Rpb24uaCAqLywKKwkJCQk1NUJFMDI1OTIyM0IyOUMxMDAzMkYwOEEgLyogU1ZH
QW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oICovLAorCQkJCTU1QkUwMjVCMjIz
QjI5QzIwMDMyRjA4QSAvKiBTVkdBbmltYXRpb25GdW5jdGlvbi5oICovLAogCQkJCTU1RkE3RkVG
MjEwRkEzODYwMDVBRUZFNyAvKiBTVkdBdHRyaWJ1dGUuaCAqLywKIAkJCQk1NUZBN0ZGNDIxMEZC
Njg4MDA1QUVGRTcgLyogU1ZHQXR0cmlidXRlQWNjZXNzb3IuaCAqLywKKwkJCQk1NUVFNTM2MTIy
M0IyQTIyMDBGQkE5NDQgLyogU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwICovLAorCQkJCTU1RUU1
MzY0MjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdBdHRyaWJ1dGVBbmltYXRvci5oICovLAogCQkJCTdB
M0VCRUFDMjFCRjA5MjEwMDBEMDQzRCAvKiBTVkdBdHRyaWJ1dGVPd25lclByb3h5LmNwcCAqLywK
IAkJCQk1NTM0NkFGMDIxMTUwRkFGMDA1OUJDREQgLyogU1ZHQXR0cmlidXRlT3duZXJQcm94eS5o
ICovLAogCQkJCTU1MzQ2QUZBMjExN0ZGQUYwMDU5QkNERCAvKiBTVkdBdHRyaWJ1dGVPd25lclBy
b3h5SW1wbC5oICovLApAQCAtMTYxOTUsNiArMTYyMzcsMTIgQEAKIAkJCQkwODEwNzY0MzEyODI4
NTU2MDA3QzYzQkEgLyogU1ZHTGlzdFByb3BlcnR5LmggKi8sCiAJCQkJMDg4QTBFMDAxMjZFRjFE
QjAwOTc4RjdBIC8qIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLywKIAkJCQkwOENBM0Q0MzEy
ODk0QTM4MDBGRkYyNjAgLyogU1ZHTWF0cml4VGVhck9mZi5oICovLAorCQkJCTU1RUU1MzU0MjIz
QjI5RTkwMEZCQTk0NCAvKiBTVkdNZW1iZXJBY2Nlc3Nvci5oICovLAorCQkJCTU1QkUwMjVBMjIz
QjI5QzIwMDMyRjA4QSAvKiBTVkdNZW1iZXJBY2Nlc3NvclB0ci5oICovLAorCQkJCTU1RUU1MzYz
MjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovLAorCQkJCTU1RUU1MzYwMjIzQjJB
MjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi8sCisJCQkJNTVCRTAyNUMyMjNCMjlD
MzAwMzJGMDhBIC8qIFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeS5oICovLAorCQkJCTU1QkUwMjU3
MjIzQjI5QzAwMDMyRjA4QSAvKiBTVkdQcm9wZXJ0eVJlZ2lzdHJ5LmggKi8sCiAJCQkJMDg4QTBF
MDIxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVhck9mZi5oICovLAogCQkJCTA4OEEw
RTAzMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eVRyYWl0cy5oICovLAogCQkJCTA4ODBG
NzBEMTI4MkI0NkQwMDk0ODUwNSAvKiBTVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLmggKi8s
CkBAIC0yNDA2MiwxMSArMjQxMTAsNyBAQAogCQkJCTcxQ0M3QTFGMTUyQTBCRkUwMDlFRUFGOSAv
KiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcCAqLywKIAkJCQkwOEQ0NkNFMjEyN0FENUZDMDA4
OTY5NEIgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oICovLAogCQkJCUIyMjI3N0U4MEQwMEJG
MUYwMDcxQjc4MiAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmlkbCAqLywKLQkJCQk0M0Y2RkQ5
NTEzQkNEMEIxMDAyMjQwNTIgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCAqLywKLQkJCQkwODIz
RDE1ODEyN0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggKi8sCiAJCQkJQjIy
Mjc3RTkwRDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVkSW50ZWdlci5pZGwgKi8sCi0JCQkJ
NzFFNjIzQ0UxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50
ZWdlci5jcHAgKi8sCi0JCQkJNzFFNjIzQ0YxNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlci5oICovLAogCQkJCTQzODE3NjNBMTNBNjk3RDQwMDdEMTE4
NyAvKiBTVkdBbmltYXRlZExlbmd0aC5jcHAgKi8sCiAJCQkJMDg5MDIxQTgxMjZFRjVERTAwOTJE
NUVBIC8qIFNWR0FuaW1hdGVkTGVuZ3RoLmggKi8sCiAJCQkJQjIyMjc3RUEwRDAwQkYxRjAwNzFC
NzgyIC8qIFNWR0FuaW1hdGVkTGVuZ3RoLmlkbCAqLywKQEAgLTI0MTE1LDYgKzI0MTU5LDEwIEBA
CiAJCQkJQjIyMjc4MDIwRDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCAq
LywKIAkJCQlCMjIyNzgwMzBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0aW9uRWxlbWVudC5p
ZGwgKi8sCiAJCQkJNDM5RDMzNDIxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdG9yRmFjdG9y
eS5oICovLAorCQkJCTcyM0Y5N0JDMjIzOEVFMDgwMDdGMDc5QyAvKiBTVkdBdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyLmNwcCAqLywKKwkJCQk3MjNGOTdCRDIyMzhFRTA4MDA3RjA3OUMgLyog
U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAorCQkJCTcyM0Y5N0MxMjIzOTc3
MjUwMDdGMDc5QyAvKiBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZS5jcHAgKi8s
CisJCQkJNzIzRjk3QzAyMjM5NkI4ODAwN0YwNzlDIC8qIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNv
bnRyb2xsZXJCYXNlLmggKi8sCiAJCQkJQjIyMjc4MDQwRDAwQkYxRjAwNzFCNzgyIC8qIHN2Z2F0
dHJzLmluICovLAogCQkJCUIyMjI3ODA1MEQwMEJGMUYwMDcxQjc4MiAvKiBTVkdDaXJjbGVFbGVt
ZW50LmNwcCAqLywKIAkJCQlCMjIyNzgwNjBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxl
bWVudC5oICovLApAQCAtMjQyODQsNiArMjQzMzIsOCBAQAogCQkJCUIyOEM2QTIxMEQwMEM0NDgw
MDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5oICovLAogCQkJCUIyMjI3ODk5MEQwMEJGMjAwMDcx
Qjc4MiAvKiBTVkdMYW5nU3BhY2UuY3BwICovLAogCQkJCUIyMjI3ODlBMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdMYW5nU3BhY2UuaCAqLywKKwkJCQk3MjNGOTdCRTIyMzk1MTJEMDA3RjA3OUMgLyog
U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJNzIzRjk3
QkYyMjM5NTEyRDAwN0YwNzlDIC8qIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCAqLywKIAkJCQk3Q0U1OEQ1MTFERDdCMDkzMDAxMjg1NTIgLyogU1ZHTGVuZ3RoLmggKi8s
CiAJCQkJQjIyMjc4OUUwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJ
NzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3BwICovLApAQCAt
MzE4NDgsOCArMzE4OTgsNiBAQAogCQkJCTQzQTYyNUY4MTNCMzMwNDAwMEFDOTRCOCAvKiBTVkdB
bmltYXRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEQ0NkNFMzEyN0FENUZDMDA4OTY5
NEIgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFGQjk2
N0IxMzgzRDY0NjAwQUM4QTRDIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJP
ZmYuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4MjNEMTU5MTI3QUQ2QUMwMDBFQkM5NSAvKiBTVkdB
bmltYXRlZEludGVnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTcxRTYyM0QxMTUxRjcyQTYwMDM2
RTJGNCAvKiBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4OTAyMUE5MTI2RUY1REUwMDkyRDVFQSAvKiBTVkdBbmltYXRlZExlbmd0aC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDg5MDIxQUQxMjZFRjVFOTAwOTJENUVBIC8qIFNWR0FuaW1hdGVk
TGVuZ3RoTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMDQxMjZFRjFEQjAwOTc4RjdB
IC8qIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI0OTksOCArMjQ5OSw2IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgfQogCi0gICAgJGhlYWRlckluY2x1
ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxIGlmICRoYXNQYXJlbnQgJiYgJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0fTsKLQogICAgICRo
ZWFkZXJJbmNsdWRlc3siU1ZHRWxlbWVudC5oIn0gPSAxIGlmICRjbGFzc05hbWUgPX4gL15KU1NW
Ry87CiAKICAgICBteSAkaW1wbFR5cGUgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2UpOwpA
QCAtMjUxMiw4ICsyNTEwLDkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKIAogICAgIGlmICgkY29kZUdl
bmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZS0+dHlwZSkpIHsKLSAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOworICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7IlNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgifSA9IDE7CiAgICAgfSBlbHNlIHsK
KyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxIGlmICRoYXNQ
YXJlbnQgJiYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0fTsKICAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3J3YXJkIGRlY2xh
cmF0aW9uCiAgICAgICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewogICAg
ICAgICAgICAgQWRkQ2xhc3NGb3J3YXJkSWZOZWVkZWQoJGludGVyZmFjZS0+dHlwZSk7CkBAIC0y
NTYzLDcgKzI1NjIsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIH1cblxuIik7ICAKICAgICB9IGVsc2UgewotICAgICAgICBBZGRJbmNsdWRl
c0ZvckltcGxlbWVudGF0aW9uVHlwZUluSGVhZGVyKCRpbXBsVHlwZSk7CisgICAgICAgIGlmICgh
JGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbnRlcmZhY2UtPnR5cGUpKSB7Cisg
ICAgICAgICAgICBBZGRJbmNsdWRlc0ZvckltcGxlbWVudGF0aW9uVHlwZUluSGVhZGVyKCRpbXBs
VHlwZSk7CisgICAgICAgIH0KICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgJGNsYXNzTmFtZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjwkaW1wbFR5cGU+JiYgaW1wbClcbiIpOwogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgJGNsYXNz
TmFtZShzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpO1xuIik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNp
b24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI0LDE0ICsyNCwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVFbGVtZW50QmFzZS5oIgogCi0jaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgi
CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdG9yRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMzgwICszNyw5NiBA
QCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoU1ZHQW5pbWF0ZUVsCiAKIFNWR0FuaW1hdGVF
bGVtZW50QmFzZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKEFuaW1hdGVkU3Ry
aW5nKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlVGFnKSB8fCBo
YXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpIHx8IGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1h
dGVDb2xvclRhZykgfHwgaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykp
OwogfQogCiBTVkdBbmltYXRlRWxlbWVudEJhc2U6On5TVkdBbmltYXRlRWxlbWVudEJhc2UoKSA9
IGRlZmF1bHQ7CiAKLWJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKQorU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UmIFNWR0FuaW1hdGVF
bGVtZW50QmFzZTo6YW5pbWF0aW9uQ29udHJvbGxlcigpCiB7Ci0gICAgaWYgKCF0aGlzLT50YXJn
ZXRFbGVtZW50KCkpCisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQoKSk7CisgICAgQVNTRVJUKCFo
YXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpKTsKKworICAgIGlmICghbV9jb250cm9sbGVyKSB7
CisgICAgICAgIGlmICh0YXJnZXRFbGVtZW50KCktPmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0
ZShhdHRyaWJ1dGVOYW1lKCkpKQorICAgICAgICAgICAgbV9jb250cm9sbGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyPigqdGhpcywgKnRhcmdldEVs
ZW1lbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udHJvbGxlciA9IHN0ZDo6
bWFrZV91bmlxdWU8U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMs
ICp0YXJnZXRFbGVtZW50KCkpOworICAgIH0KKworICAgIHJldHVybiAqbV9jb250cm9sbGVyOwor
fQorCitib29sIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSB8fCBoYXNJbnZhbGlkQ1NTQXR0cmli
dXRlVHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9hbmltYXRl
ZFByb3BlcnR5VHlwZSAhPSBBbmltYXRlZFVua25vd24gJiYgIWhhc0ludmFsaWRDU1NBdHRyaWJ1
dGVUeXBlKCk7CisgICAgaWYgKGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKCp0YXJnZXRF
bGVtZW50KCkpICE9IEFuaW1hdGVkVW5rbm93bikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICByZXR1cm4gdGFyZ2V0RWxlbWVudCgpLT5pc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoYXR0
cmlidXRlTmFtZSgpKTsKIH0KIAogQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgU1ZHQW5pbWF0ZUVsZW1l
bnRCYXNlOjpkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShTVkdFbGVtZW50JiB0YXJnZXRF
bGVtZW50KSBjb25zdAogewotICAgIGF1dG8gcHJvcGVydHlUeXBlcyA9IHRhcmdldEVsZW1lbnQu
YW5pbWF0ZWRQcm9wZXJ0eVR5cGVzRm9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAg
aWYgKHByb3BlcnR5VHlwZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQW5pbWF0ZWRVbmtu
b3duOwotCi0gICAgQVNTRVJUKHByb3BlcnR5VHlwZXMuc2l6ZSgpIDw9IDIpOwotICAgIEFuaW1h
dGVkUHJvcGVydHlUeXBlIHR5cGUgPSBwcm9wZXJ0eVR5cGVzWzBdOwotICAgIGlmIChoYXNUYWdO
YW1lKFNWR05hbWVzOjphbmltYXRlQ29sb3JUYWcpICYmIHR5cGUgIT0gQW5pbWF0ZWRDb2xvcikK
LSAgICAgICAgcmV0dXJuIEFuaW1hdGVkVW5rbm93bjsKLQotICAgIC8vIEFuaW1hdGlvbnMgb2Yg
dHJhbnNmb3JtIGxpc3RzIGFyZSBub3QgYWxsb3dlZCBmb3IgPGFuaW1hdGU+IG9yIDxzZXQ+Ci0g
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2FuaW1hdGUuaHRtbCNBbmltYXRpb25BdHRy
aWJ1dGVzQW5kUHJvcGVydGllcwotICAgIGlmICh0eXBlID09IEFuaW1hdGVkVHJhbnNmb3JtTGlz
dCAmJiAhaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykpCi0gICAgICAg
IHJldHVybiBBbmltYXRlZFVua25vd247Ci0KLSAgICAvLyBGb3J0dW5hdGVseSB0aGVyZSdzIGp1
c3Qgb25lIHNwZWNpYWwgY2FzZSBuZWVkZWQgaGVyZTogU1ZHTWFya2VyRWxlbWVudHMgb3JpZW50
QXR0ciwgd2hpY2gKLSAgICAvLyBjb3JyZXNwb25kcyB0byBTVkdBbmltYXRlZEFuZ2xlIG9yaWVu
dEFuZ2xlIGFuZCBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9yaWVudFR5cGUuIFdlIGhhdmUgdG8K
LSAgICAvLyBmaWd1cmUgb3V0IHdob3NlIHZhbHVlIHRvIGNoYW5nZSBoZXJlLgotICAgIGlmICh0
YXJnZXRFbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1hcmtlclRhZykgJiYgdHlwZSA9PSBB
bmltYXRlZEFuZ2xlKSB7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzLnNpemUoKSA9PSAy
KTsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5VHlwZXNbMF0gPT0gQW5pbWF0ZWRBbmdsZSk7Ci0g
ICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzWzFdID09IEFuaW1hdGVkRW51bWVyYXRpb24pOwot
ICAgIH0gZWxzZSBpZiAocHJvcGVydHlUeXBlcy5zaXplKCkgPT0gMikKLSAgICAgICAgQVNTRVJU
KHByb3BlcnR5VHlwZXNbMF0gPT0gcHJvcGVydHlUeXBlc1sxXSk7Ci0KLSAgICByZXR1cm4gdHlw
ZTsKKyAgICByZXR1cm4gU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2U6OmRldGVy
bWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKCp0aGlzLCB0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lKCkpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2FsY3VsYXRlQW5pbWF0
ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHU01JTEVs
ZW1lbnQqIHJlc3VsdEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKHJlc3VsdEVsZW1lbnQpOwotICAg
IGF1dG8gdGFyZ2V0RWxlbWVudCA9IG1ha2VSZWZQdHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsK
LSAgICBpZiAoIXRhcmdldEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAg
U2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0
YXJnZXRFbGVtZW50LmdldCgpLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAKLSAgICBpZiAoc2hvdWxk
QXBwbHkgPT0gRG9udEFwcGx5QW5pbWF0aW9uKQorICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQog
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBk
ZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSgqdGFyZ2V0RWxlbWVudCkpOwotCi0gICAgQVNT
RVJUKHBlcmNlbnRhZ2UgPj0gMCAmJiBwZXJjZW50YWdlIDw9IDEpOwotICAgIEFTU0VSVChtX2Fu
aW1hdGVkUHJvcGVydHlUeXBlICE9IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCB8fCBoYXNUYWdOYW1l
KFNWR05hbWVzOjphbmltYXRlVHJhbnNmb3JtVGFnKSk7Ci0gICAgQVNTRVJUKG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duKTsKLSAgICBBU1NFUlQobV9hbmltYXRvcik7
Ci0gICAgQVNTRVJUKG1fYW5pbWF0b3ItPnR5cGUoKSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBl
KTsKLSAgICBBU1NFUlQobV9mcm9tVHlwZSk7Ci0gICAgQVNTRVJUKG1fZnJvbVR5cGUtPnR5cGUo
KSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKLSAgICBBU1NFUlQobV90b1R5cGUpOwotCi0g
ICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5WE1MQW5pbWF0aW9uIHx8IHNob3VsZEFwcGx5ID09
IEFwcGx5WE1MYW5kQ1NTQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIFNWRyBET00gYW5pbVZhbCBh
bmltYXRpb24gY29kZS1wYXRoLgotICAgICAgICBpZiAobV9hbmltYXRvci0+ZmluZEFuaW1hdGVk
UHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTVkdBbmltYXRl
RWxlbWVudEJhc2UmIHJlc3VsdEFuaW1hdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxTVkdBbmltYXRl
RWxlbWVudEJhc2U+KCpyZXN1bHRFbGVtZW50KTsKLSAgICBBU1NFUlQocmVzdWx0QW5pbWF0aW9u
RWxlbWVudC5tX2FuaW1hdGVkVHlwZSk7Ci0gICAgQVNTRVJUKHJlc3VsdEFuaW1hdGlvbkVsZW1l
bnQubV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKLQot
ICAgIGlmIChoYXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpKQotICAgICAgICBwZXJjZW50YWdl
ID0gMTsKLQotICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlOjpEaXNjcmV0ZSkKLSAgICAg
ICAgcGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UgPCAwLjUgPyAwIDogMTsKLQotICAgIC8vIFRhcmdl
dCBlbGVtZW50IG1pZ2h0IGhhdmUgY2hhbmdlZC4KLSAgICBtX2FuaW1hdG9yLT5zZXRDb250ZXh0
RWxlbWVudCh0YXJnZXRFbGVtZW50LmdldCgpKTsKLQotICAgIC8vIEJlIHN1cmUgdG8gZGV0YWNo
IGxpc3Qgd3JhcHBlcnMgYmVmb3JlIHdlIG1vZGZpeSB0aGVpciB1bmRlcmx5aW5nIHZhbHVlLiBJ
ZiB3ZSdkIGRvCi0gICAgLy8gaWYgYWZ0ZXIgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIHJhbiB0
aGUgY2FjaGVkIHBvaW50ZXJzIGluIHRoZSBsaXN0IHByb3BlcnkgdGVhcgotICAgIC8vIG9mZnMg
d291bGQgcG9pbnQgbm93aGVyZSwgYW5kIHdlIGNvdWxkbid0IGNyZWF0ZSBjb3BpZXMgb2YgdGhv
c2UgdmFsdWVzIGFueW1vcmUsCi0gICAgLy8gd2hpbGUgZGV0YWNoaW5nLiBUaGlzIGlzIGNvdmVy
ZWQgYnkgYXNzZXJ0aW9ucywgbW92aW5nIHRoaXMgZG93biB3b3VsZCBmaXJlIHRoZW0uCi0gICAg
aWYgKCFtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fYW5pbWF0b3It
PmFuaW1WYWxXaWxsQ2hhbmdlKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLQotICAgIC8vIFZhbHVl
cy1hbmltYXRpb24gYWNjdW11bGF0ZXMgdXNpbmcgdGhlIGxhc3QgdmFsdWVzIGVudHJ5IGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGVuZCBvZiBkdXJhdGlvbiB0aW1lLgotICAgIFNWR0FuaW1hdGVkVHlw
ZSogdG9BdEVuZE9mRHVyYXRpb25UeXBlID0gbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUgPyBtX3Rv
QXRFbmRPZkR1cmF0aW9uVHlwZS5nZXQoKSA6IG1fdG9UeXBlLmdldCgpOwotICAgIG1fYW5pbWF0
b3ItPmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUocGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIG1fZnJv
bVR5cGUuZ2V0KCksIG1fdG9UeXBlLmdldCgpLCB0b0F0RW5kT2ZEdXJhdGlvblR5cGUsIHJlc3Vs
dEFuaW1hdGlvbkVsZW1lbnQubV9hbmltYXRlZFR5cGUuZ2V0KCkpOworICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5jYWxjdWxhdGVBbmltYXRlZFZhbHVlKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50
LCByZXN1bHRFbGVtZW50KTsKIH0KIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1
bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlv
blN0cmluZykKIHsKLSAgICBpZiAodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcuaXNFbXB0eSgpKQor
ICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90
b0F0RW5kT2ZEdXJhdGlvblR5cGUgPSBlbnN1cmVBbmltYXRvcigpLT5jb25zdHJ1Y3RGcm9tU3Ry
aW5nKHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gYW5pbWF0aW9uQ29udHJvbGxlcigpLmNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUo
dG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpOwogfQogCiBib29sIFNWR0FuaW1hdGVFbGVtZW50QmFz
ZTo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAgICBpZiAoIXRoaXMtPnRhcmdldEVsZW1lbnQoKSkK
KyAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKLSAgICBl
bnN1cmVBbmltYXRvcigpLT5jYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMobV9mcm9tVHlwZSwgbV90
b1R5cGUsIGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3Bl
cnR5VHlwZSA9PSBtX2FuaW1hdG9yLT50eXBlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBhbmltYXRpb25Db250cm9sbGVyKCkuY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGZyb21T
dHJpbmcsIHRvU3RyaW5nKTsKIH0KIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1
bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnlTdHJpbmcpCiB7CiAgICAgaWYgKCF0aGlzLT50YXJnZXRFbGVtZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9k
ZTo6QnkgJiYgIWlzQWRkaXRpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
ZnJvbS1ieSBhbmltYXRpb24gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGF0dHJpYnV0ZXMgdGhhdCBz
dXBwb3J0IGFkZGl0aW9uIChlLmcuIG1vc3QgbnVtZXJpYyBhdHRyaWJ1dGVzKS4KLSAgICBpZiAo
YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OkZyb21CeSAmJiAhYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGVTdXBwb3J0c0FkZGl0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFTU0VSVCghaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSk7Ci0KLSAgICBkZXRlcm1pbmVQ
cm9wZXJ0eVZhbHVlVHlwZXMoZnJvbVN0cmluZywgYnlTdHJpbmcpOwotICAgIGVuc3VyZUFuaW1h
dG9yKCktPmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhtX2Zyb21UeXBlLCBtX3RvVHlwZSwgZnJv
bVN0cmluZywgYnlTdHJpbmcpOwotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09
IG1fYW5pbWF0b3ItPnR5cGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZm5kZWYgTkRF
QlVHCi1zdGF0aWMgaW5saW5lIGJvb2wgcHJvcGVydHlUeXBlc0FyZUNvbnNpc3RlbnQoQW5pbWF0
ZWRQcm9wZXJ0eVR5cGUgZXhwZWN0ZWRQcm9wZXJ0eVR5cGUsIGNvbnN0IFNWR0VsZW1lbnRBbmlt
YXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBmb3IgKGF1dG8mIHR5cGUg
OiBhbmltYXRlZFR5cGVzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiB0eXBlLnBy
b3BlcnRpZXMpIHsKLSAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlwZSAhPSBwcm9w
ZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgdGhlIG9ubHkgYWxsb3dlZCBpbmNvbnNpc3RlbmN5LiBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0
b3IgaGFuZGxlcyBib3RoIFNWR0FuaW1hdGVkQW5nbGUgJiBTVkdBbmltYXRlZEVudW1lcmF0aW9u
IGZvciBtYXJrZXJzIG9yaWVudCBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgICAgaWYgKGV4cGVj
dGVkUHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYgcHJvcGVydHktPmFuaW1hdGVkUHJv
cGVydHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFuaW1h
dGlvbkNvbnRyb2xsZXIoKS5jYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoZnJvbVN0cmluZywgYnlT
dHJpbmcpOwogfQotI2VuZGlmCiAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpyZXNldEFu
aW1hdGVkVHlwZSgpCiB7Ci0gICAgU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IqIGFuaW1hdG9yID0g
ZW5zdXJlQW5pbWF0b3IoKTsKLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBh
bmltYXRvci0+dHlwZSgpKTsKLQotICAgIGF1dG8gdGFyZ2V0RWxlbWVudCA9IG1ha2VSZWZQdHIo
dGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSB0aGlz
LT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgU2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkg
PSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LmdldCgpLCBhdHRyaWJ1dGVOYW1l
KTsKLQotICAgIGlmIChzaG91bGRBcHBseSA9PSBEb250QXBwbHlBbmltYXRpb24pCisgICAgaWYg
KCF0YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChzaG91bGRBcHBs
eSA9PSBBcHBseVhNTEFuaW1hdGlvbiB8fCBzaG91bGRBcHBseSA9PSBBcHBseVhNTGFuZENTU0Fu
aW1hdGlvbikgewotICAgICAgICAvLyBTVkcgRE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0
aC4KLSAgICAgICAgbV9hbmltYXRlZFByb3BlcnRpZXMgPSBhbmltYXRvci0+ZmluZEFuaW1hdGVk
UHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUp
OwotICAgICAgICBpZiAobV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzQXJlQ29uc2lzdGVudCht
X2FuaW1hdGVkUHJvcGVydHlUeXBlLCBtX2FuaW1hdGVkUHJvcGVydGllcykpOwotICAgICAgICBp
ZiAoIW1fYW5pbWF0ZWRUeXBlKQotICAgICAgICAgICAgbV9hbmltYXRlZFR5cGUgPSBhbmltYXRv
ci0+c3RhcnRBbmltVmFsQW5pbWF0aW9uKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBhbmltYXRvci0+cmVzZXRBbmltVmFsVG9CYXNlVmFsKG1fYW5p
bWF0ZWRQcm9wZXJ0aWVzLCAqbV9hbmltYXRlZFR5cGUpOwotICAgICAgICAgICAgYW5pbWF0b3It
PmFuaW1WYWxEaWRDaGFuZ2UobV9hbmltYXRlZFByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29k
ZS1wYXRoLgotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpOwotICAg
IFN0cmluZyBiYXNlVmFsdWU7Ci0KLSAgICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlDU1NBbmlt
YXRpb24pIHsKLSAgICAgICAgQVNTRVJUKFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0
cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudC5nZXQoKSwgYXR0cmlidXRlTmFtZSkpOwot
ICAgICAgICBjb21wdXRlQ1NTUHJvcGVydHlWYWx1ZSh0YXJnZXRFbGVtZW50LmdldCgpLCBjc3NQ
cm9wZXJ0eUlEKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpLCBiYXNlVmFsdWUpOwotICAgIH0K
LQotICAgIGlmICghbV9hbmltYXRlZFR5cGUpCi0gICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gYW5p
bWF0b3ItPmNvbnN0cnVjdEZyb21TdHJpbmcoYmFzZVZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYW5pbWF0ZWRUeXBlLT5zZXRWYWx1ZUFzU3RyaW5nKGF0dHJpYnV0ZU5hbWUsIGJhc2VWYWx1
ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQoU1ZH
RWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBBU1NFUlQoIXRhcmdldEVsZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsK
LQotICAgIGlmICghdGFyZ2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKS5zZXRQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdGFyZ2V0RWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2
b2lkIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldChTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50
LCBDU1NQcm9wZXJ0eUlEIGlkKQotewotICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC5tX2RlbGV0
aW9uSGFzQmVndW4pOwotICAgIHRhcmdldEVsZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQ
cm9wZXJ0aWVzKCkucmVtb3ZlUHJvcGVydHkoaWQpOwotICAgIHRhcmdldEVsZW1lbnQuaW52YWxp
ZGF0ZVN0eWxlKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9U
YXJnZXRBbmRJbnN0YW5jZXMoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nKQotewot
ICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBjaGVjayBib3RoIGlzQ29ubmVjdGVk
IGFuZCAhcGFyZW50Tm9kZT8KLSAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8
ICF0YXJnZXRFbGVtZW50LmlzQ29ubmVjdGVkKCkgfHwgIXRhcmdldEVsZW1lbnQucGFyZW50Tm9k
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY3NzUHJvcGVy
dHlJRChhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKTsKLQotICAgIFNWR0VsZW1lbnQ6Okluc3Rh
bmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKHRhcmdldEVsZW1lbnQpOwotICAgIGFwcGx5Q1NTUHJv
cGVydHlUb1RhcmdldCh0YXJnZXRFbGVtZW50LCBpZCwgdmFsdWVBc1N0cmluZyk7Ci0KLSAgICAv
LyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBkYXRlIHRoZW0gYXMgd2Vs
bCwgdy9vIHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1aWx0LgotICAgIGZvciAo
YXV0byogaW5zdGFuY2UgOiB0YXJnZXRFbGVtZW50Lmluc3RhbmNlcygpKQotICAgICAgICBhcHBs
eUNTU1Byb3BlcnR5VG9UYXJnZXQoKmluc3RhbmNlLCBpZCwgdmFsdWVBc1N0cmluZyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5j
ZXMoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSkKLXsKLSAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90
aCBpc0Nvbm5lY3RlZCBhbmQgIXBhcmVudE5vZGU/Ci0gICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
YW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5pc0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVt
ZW50LnBhcmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTUHJvcGVydHlJRCBp
ZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSk7Ci0KLSAgICBTVkdF
bGVtZW50OjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIgYmxvY2tlcih0YXJnZXRFbGVtZW50KTsKLSAg
ICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQodGFyZ2V0RWxlbWVudCwgaWQpOwotCi0gICAg
Ly8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdl
bGwsIHcvbyByZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KLSAgICBmb3Ig
KGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKLSAgICAgICAgcmVt
b3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0KCppbnN0YW5jZSwgaWQpOwotfQotCi1zdGF0aWMgaW5s
aW5lIHZvaWQgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdlKFNWR0VsZW1lbnQmIHRhcmdl
dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgQVNT
RVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7Ci0gICAgdGFyZ2V0RWxlbWVu
dC5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOwotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgbm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdlKFNWR0VsZW1l
bnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCi17
Ci0gICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5p
c0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIodGFy
Z2V0RWxlbWVudCk7Ci0gICAgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdlKHRhcmdldEVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGhh
cyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJpbmcgdGhlIDx1c2U+
IHRyZWUgdG8gYmUgcmVidWlsdC4KLSAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxl
bWVudC5pbnN0YW5jZXMoKSkKLSAgICAgICAgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdl
KCppbnN0YW5jZSwgYXR0cmlidXRlTmFtZSk7CisgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLnJl
c2V0QW5pbWF0ZWRUeXBlKCk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjbGVh
ckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KQogewotICAgIGlmICghbV9h
bmltYXRlZFR5cGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBTVkdBbmltYXRl
ZFR5cGUgaXMgYSBsaXN0IHR5cGUsIGUuZy4gU1ZHTGVuZ3RoTGlzdFZhbHVlcywgdGhlIHdyYXBw
ZXJzIG9mIHRoZQotICAgIC8vIGFuaW1hdGVkIHByb3BlcnRpZXMgaGF2ZSB0byBiZSBkZXRhY2hl
ZCBmcm9tIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBiZWZvcmUgaXQncyBkZWxldGVkLgotICAgIGlm
ICghbV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAgICBtX2FuaW1hdG9yLT5h
bmltVmFsV2lsbENoYW5nZShtX2FuaW1hdGVkUHJvcGVydGllcyk7Ci0KLSAgICBpZiAoIXRhcmdl
dEVsZW1lbnQpIHsKLSAgICAgICAgbV9hbmltYXRlZFR5cGUgPSBudWxscHRyOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRoLgotICAgICAg
ICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdldEVsZW1lbnQs
IGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAg
ICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIW1fY29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gc2hvdWxkQXBw
bHlBbmltYXRpb24odGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpKTsKLSAgICBpZiAoc2hv
dWxkQXBwbHkgPT0gQXBwbHlYTUxhbmRDU1NBbmltYXRpb24pCi0gICAgICAgIHJlbW92ZUNTU1By
b3BlcnR5RnJvbVRhcmdldEFuZEluc3RhbmNlcygqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSgpKTsKLQotICAgIC8vIFNWRyBET00gYW5pbVZhbCBhbmltYXRpb24gY29kZS1wYXRoLgotICAg
IGlmIChtX2FuaW1hdG9yKSB7Ci0gICAgICAgIG1fYW5pbWF0b3ItPnN0b3BBbmltVmFsQW5pbWF0
aW9uKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLSAgICAgICAgbm90aWZ5VGFyZ2V0QW5kSW5zdGFu
Y2VzQWJvdXRBbmltVmFsQ2hhbmdlKCp0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpOwot
ICAgIH0KLQotICAgIG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0gICAgbV9hbmltYXRl
ZFR5cGUgPSBudWxscHRyOworICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5jbGVhckFuaW1hdGVk
VHlwZSh0YXJnZXRFbGVtZW50KTsKIH0KIAogdm9pZCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmFw
cGx5UmVzdWx0c1RvVGFyZ2V0KCkKIHsKLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlw
ZSAhPSBBbmltYXRlZFRyYW5zZm9ybUxpc3QgfHwgaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0
ZVRyYW5zZm9ybVRhZykpOwotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlICE9IEFu
aW1hdGVkVW5rbm93bik7Ci0gICAgQVNTRVJUKG1fYW5pbWF0b3IpOwotCi0gICAgLy8gRWFybHkg
ZXhpdCBpZiBvdXIgYW5pbWF0ZWQgdHlwZSBnb3QgZGVzdHJveWVkIGJ5IGEgcHJldmlvdXMgZW5k
ZWRBY3RpdmVJbnRlcnZhbCgpLgotICAgIGlmICghbV9hbmltYXRlZFR5cGUpCisgICAgaWYgKCF0
YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gdGFyZ2V0RWxlbWVu
dCA9IG1ha2VSZWZQdHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKLSAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOwotCi0gICAgQVNT
RVJUKHRhcmdldEVsZW1lbnQpOwotCi0gICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRoLgot
ICAgICAgICAvLyBDb252ZXJ0IHRoZSByZXN1bHQgb2YgdGhlIGFuaW1hdGlvbiB0byBhIFN0cmlu
ZyBhbmQgYXBwbHkgaXQgYXMgQ1NTIHByb3BlcnR5IG9uIHRoZSB0YXJnZXQgJiBhbGwgaW5zdGFu
Y2VzLgotICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIG1fYW5pbWF0ZWRUeXBlLT52YWx1ZUFzU3RyaW5nKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gdXBkYXRlIHRoZSBzdHls
ZSBhbmQgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLgot
ICAgIFNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gc2hvdWxkQXBwbHlBbmltYXRp
b24odGFyZ2V0RWxlbWVudC5nZXQoKSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgaWYgKHNob3VsZEFw
cGx5ID09IEFwcGx5WE1MYW5kQ1NTQW5pbWF0aW9uKQotICAgICAgICBhcHBseUNTU1Byb3BlcnR5
VG9UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIG1fYW5p
bWF0ZWRUeXBlLT52YWx1ZUFzU3RyaW5nKCkpOwotCi0gICAgLy8gU1ZHIERPTSBhbmltVmFsIGFu
aW1hdGlvbiBjb2RlLXBhdGguCi0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgU1ZHIERPTSB2YWx1
ZXMgYXJlIGFscmVhZHkgY2hhbmdlZCwgdW5saWtlIGZvciBDU1MuCi0gICAgLy8gV2Ugb25seSBo
YXZlIHRvIHRyaWdnZXIgdXBkYXRlIG5vdGlmaWNhdGlvbnMgaGVyZS4KLSAgICBtX2FuaW1hdG9y
LT5hbmltVmFsRGlkQ2hhbmdlKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLSAgICBub3RpZnlUYXJn
ZXRBbmRJbnN0YW5jZXNBYm91dEFuaW1WYWxDaGFuZ2UoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0
ZU5hbWUpOwotfQotCi1ib29sIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6YW5pbWF0ZWRQcm9wZXJ0
eVR5cGVTdXBwb3J0c0FkZGl0aW9uKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjOiBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcvYW5pbWF0ZS5odG1sI0FuaW1hdGlvbkF0dHJpYnV0ZXNBbmRQcm9wZXJ0
aWVzLgotICAgIHN3aXRjaCAobV9hbmltYXRlZFByb3BlcnR5VHlwZSkgewotICAgIGNhc2UgQW5p
bWF0ZWRCb29sZWFuOgotICAgIGNhc2UgQW5pbWF0ZWRFbnVtZXJhdGlvbjoKLSAgICBjYXNlIEFu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzoKLSAgICBjYXNlIEFuaW1hdGVkU3RyaW5nOgotICAg
IGNhc2UgQW5pbWF0ZWRVbmtub3duOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBB
bmltYXRlZEFuZ2xlOgotICAgIGNhc2UgQW5pbWF0ZWRDb2xvcjoKLSAgICBjYXNlIEFuaW1hdGVk
SW50ZWdlcjoKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcjoKLSAgICBj
YXNlIEFuaW1hdGVkTGVuZ3RoOgotICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGhMaXN0OgotICAgIGNh
c2UgQW5pbWF0ZWROdW1iZXI6Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlckxpc3Q6Ci0gICAgY2Fz
ZSBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyOgotICAgIGNhc2UgQW5pbWF0ZWRQYXRoOgot
ICAgIGNhc2UgQW5pbWF0ZWRQb2ludHM6Ci0gICAgY2FzZSBBbmltYXRlZFJlY3Q6Ci0gICAgY2Fz
ZSBBbmltYXRlZFRyYW5zZm9ybUxpc3Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KKyAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYXBwbHlSZXN1bHRzVG9U
YXJnZXQoKTsKIH0KIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmlzQWRkaXRpdmUoKSBj
b25zdAogewogICAgIGlmIChhbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6QnkgfHwg
YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OkZyb21CeSkgewotICAgICAgICBpZiAo
IWFuaW1hdGVkUHJvcGVydHlUeXBlU3VwcG9ydHNBZGRpdGlvbigpKQorICAgICAgICBpZiAodGFy
Z2V0RWxlbWVudCgpICYmIG1fY29udHJvbGxlciAmJiAhbV9jb250cm9sbGVyLT5pc0FkZGl0aXZl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MjMsNDIgKzEzNiw0
MCBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aXNBZGRpdGl2ZSgpCiBmbG9hdCBTVkdB
bmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0
cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKICAgICAvLyBGSVhNRTogQSByZXR1cm4g
dmFsdWUgb2YgZmxvYXQgaXMgbm90IGVub3VnaCB0byBzdXBwb3J0IHBhY2VkIGFuaW1hdGlvbnMg
b24gbGlzdHMuCi0gICAgaWYgKCF0aGlzLT50YXJnZXRFbGVtZW50KCkpCisgICAgaWYgKCF0YXJn
ZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJldHVybiBlbnN1cmVBbmlt
YXRvcigpLT5jYWxjdWxhdGVEaXN0YW5jZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7CisgICAgcmV0
dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5jYWxjdWxhdGVEaXN0YW5jZShmcm9tU3RyaW5nLCB0
b1N0cmluZyk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpzZXRUYXJnZXRFbGVt
ZW50KFNWR0VsZW1lbnQqIHRhcmdldCkKIHsKICAgICBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRU
YXJnZXRFbGVtZW50KHRhcmdldCk7Ci0gICAgcmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSgpOwor
ICAgIHJlc2V0QW5pbWF0aW9uKCk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpz
ZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7CiAg
ICAgU1ZHU01JTEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSk7Ci0gICAg
Y2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KCkpOwotICAgIHJlc2V0
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKTsKKyAgICByZXNldEFuaW1hdGlvbigpOwogfQogCi12b2lk
IFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSgpCit2b2lk
IFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRpb24oKQogewotICAgIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKTsKLSAgICBBU1NFUlQoIW1f
YW5pbWF0ZWRUeXBlKTsKLSAgICBtX2Zyb21UeXBlID0gbnVsbHB0cjsKLSAgICBtX3RvVHlwZSA9
IG51bGxwdHI7Ci0gICAgbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUgPSBudWxscHRyOwotICAgIG1f
YW5pbWF0b3IgPSBudWxscHRyOwotICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPSB0YXJnZXRF
bGVtZW50KCkgPyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSgqdGFyZ2V0RWxlbWVudCgp
KSA6IEFuaW1hdGVkU3RyaW5nOworICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0
aW9uKCk7CisgICAgbV9jb250cm9sbGVyID0gbnVsbHB0cjsKKyAgICBtX2hhc0ludmFsaWRDU1NB
dHRyaWJ1dGVUeXBlID0gV1RGOjpudWxsb3B0OwogfQogCi1TVkdBbmltYXRlZFR5cGVBbmltYXRv
ciogU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjplbnN1cmVBbmltYXRvcigpCitib29sIFNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6aGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoKSBjb25zdAogewotICAg
IGlmICghbV9hbmltYXRvcikKLSAgICAgICAgbV9hbmltYXRvciA9IFNWR0FuaW1hdG9yRmFjdG9y
eTo6Y3JlYXRlKHRoaXMsIHRhcmdldEVsZW1lbnQoKSwgbV9hbmltYXRlZFByb3BlcnR5VHlwZSk7
Ci0gICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gbV9hbmltYXRvci0+dHlwZSgp
KTsKLSAgICByZXR1cm4gbV9hbmltYXRvci5nZXQoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2hhc0ludmFsaWRDU1NBdHRy
aWJ1dGVUeXBlKQorICAgICAgICBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlID0gaGFzVmFs
aWRBdHRyaWJ1dGVOYW1lKCkgJiYgYXR0cmlidXRlVHlwZSgpID09IEF0dHJpYnV0ZVR5cGU6OkNT
UyAmJiAhaXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXRFbGVtZW50KCksIGF0dHJp
YnV0ZU5hbWUoKSk7CisKKyAgICByZXR1cm4gbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZS52
YWx1ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDIzICsyMywyNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
VHlwZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgiCiAjaW5jbHVkZSAi
U1ZHQW5pbWF0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2U7
CisKIGNsYXNzIFNWR0FuaW1hdGVFbGVtZW50QmFzZSA6IHB1YmxpYyBTVkdBbmltYXRpb25FbGVt
ZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0FuaW1hdGVFbGVtZW50QmFzZSk7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlKCk7CiAKKyAgICBT
VkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZSYgYW5pbWF0aW9uQ29udHJvbGxlcigp
OworCiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5
cGUoU1ZHRWxlbWVudCYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHQW5pbWF0ZUVsZW1l
bnRCYXNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCisgICAgYm9vbCBoYXNW
YWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKKwogICAgIHZvaWQgcmVzZXRBbmlt
YXRlZFR5cGUoKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQpIG92ZXJyaWRlOwogCkBAIC01MywyMyArNTcsMTMgQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCBzZXRUYXJnZXRFbGVtZW50KFNWR0VsZW1lbnQqKSBvdmVycmlkZTsK
ICAgICB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSgpIG92ZXJyaWRlOwotCi0gICAg
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKKyAgICB2b2lkIHJl
c2V0QW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3IqIGVuc3VyZUFuaW1hdG9yKCk7Ci0gICAgYm9vbCBhbmltYXRlZFByb3BlcnR5VHlw
ZVN1cHBvcnRzQWRkaXRpb24oKSBjb25zdDsKLQotICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVU
eXBlKCkgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBt
X2Zyb21UeXBlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IG1fdG9UeXBl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IG1fdG9BdEVuZE9mRHVyYXRp
b25UeXBlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IG1fYW5pbWF0ZWRU
eXBlOworICAgIGJvb2wgaGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoKSBjb25zdDsKIAotICAg
IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCBtX2FuaW1hdGVkUHJvcGVydGllczsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I+IG1fYW5pbWF0b3I7Cisg
ICAgbXV0YWJsZSBPcHRpb25hbDxib29sPiBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZT4g
bV9jb250cm9sbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFJlZjxTVkdBbmltYXRlTW90aW9uRWxl
bWVudD4gU1ZHQW5pbWF0ZU0KICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdBbmltYXRlTW90
aW9uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1ib29sIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKQorYm9vbCBTVkdBbmltYXRlTW90aW9u
RWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKIHsKICAgICBhdXRvIHRhcmdl
dEVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPnRhcmdldEVsZW1lbnQoKSk7CiAgICAgaWYgKCF0
YXJnZXRFbGVtZW50KQpAQCAtOTAsNyArOTAsNyBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50OjpoYXNWYWxpZEF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKQorYm9vbCBTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkgY29uc3QKIHsKICAgICAvLyBBbmlt
YXRlTW90aW9uIGRvZXMgbm90IHVzZSBhdHRyaWJ1dGVOYW1lIHNvIGl0IGlzIGFsd2F5cyB2YWxp
ZC4KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5oCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgYm9vbCBoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKSBvdmVycmlkZTsKLSAgICBib29sIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpIG92ZXJy
aWRlOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgUmVmPFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50PiBTVkdBbmltYQog
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhh
c1ZhbGlkQXR0cmlidXRlVHlwZSgpCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAogewogICAgIGlmICghdGhpcy0+dGFyZ2V0RWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MSw3ICs1MSw3IEBAIGJvb2wgU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1ZhbGkKICAgICBpZiAoYXR0cmlidXRlVHlwZSgp
ID09IEF0dHJpYnV0ZVR5cGU6OkNTUykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OworICAg
IHJldHVybiBTVkdBbmltYXRlRWxlbWVudEJhc2U6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpOwog
fQogCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Jik7CiAgICAgCi0gICAgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBmaW5h
bDsKKyAgICBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0IGZpbmFsOwogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGZpbmFsOwogCiAgICAgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgbV90
eXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCi0KLSNpbmNs
dWRlICJTVkdBbmltYXRlRWxlbWVudEJhc2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJl
ci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OlNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9y
KFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQqIGNvbnRl
eHRFbGVtZW50KQotICAgIDogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IoQW5pbWF0ZWRJbnRlZ2Vy
LCBhbmltYXRpb25FbGVtZW50LCBjb250ZXh0RWxlbWVudCkKLXsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNvbnN0cnVj
dEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlKFNWR1Byb3BlcnR5VHJhaXRzPGludD46OmZyb21TdHJpbmcoc3RyaW5n
KSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkSW50
ZWdlckFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1h
dGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQotewotICAgIHJldHVybiBjb25zdHJ1Y3RG
cm9tQmFzZVZhbHVlPFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7Ci19Ci0KLXZv
aWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OnN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0
IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBz
dG9wQW5pbVZhbEFuaW1hdGlvbkZvclR5cGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5
cGVzKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6cmVzZXRBbmltVmFs
VG9CYXNlVmFsKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRU
eXBlcywgU1ZHQW5pbWF0ZWRUeXBlJiB0eXBlKQotewotICAgIHJlc2V0RnJvbUJhc2VWYWx1ZTxT
VkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMsIHR5cGUpOwotfQotCi12b2lkIFNWR0Fu
aW1hdGVkSW50ZWdlckFuaW1hdG9yOjphbmltVmFsV2lsbENoYW5nZShjb25zdCBTVkdFbGVtZW50
QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0gICAgYW5pbVZhbFdpbGxD
aGFuZ2VGb3JUeXBlPFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7Ci19Ci0KLXZv
aWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmFuaW1WYWxEaWRDaGFuZ2UoY29uc3QgU1ZH
RWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQotewotICAgIGFuaW1W
YWxEaWRDaGFuZ2VGb3JUeXBlPFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7Ci19
Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmFkZEFuaW1hdGVkVHlwZXMoU1ZH
QW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvKQotewotICAgIEFTU0VSVChm
cm9tLT50eXBlKCkgPT0gQW5pbWF0ZWRJbnRlZ2VyKTsKLSAgICBBU1NFUlQoZnJvbS0+dHlwZSgp
ID09IHRvLT50eXBlKCkpOwotCi0gICAgdG8tPmFzPGludD4oKSArPSBmcm9tLT5hczxpbnQ+KCk7
Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVk
SW50ZWdlcihTVkdBbmltYXRpb25FbGVtZW50KiBhbmltYXRpb25FbGVtZW50LCBmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgaW50IGZyb21JbnRlZ2VyLCBpbnQgdG9JbnRl
Z2VyLCBpbnQgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyLCBpbnQmIGFuaW1hdGVkSW50ZWdlcikK
LXsKLSAgICBmbG9hdCBhbmltYXRlZE51bWJlciA9IGFuaW1hdGVkSW50ZWdlcjsKLSAgICBhbmlt
YXRpb25FbGVtZW50LT5hbmltYXRlQWRkaXRpdmVOdW1iZXIocGVyY2VudGFnZSwgcmVwZWF0Q291
bnQsIGZyb21JbnRlZ2VyLCB0b0ludGVnZXIsIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlciwgYW5p
bWF0ZWROdW1iZXIpOwotICAgIGFuaW1hdGVkSW50ZWdlciA9IHN0YXRpY19jYXN0PGludD4ocm91
bmRmKGFuaW1hdGVkTnVtYmVyKSk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0
b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVw
ZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSogZnJvbSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bywgU1ZH
QW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlvbiwgU1ZHQW5pbWF0ZWRUeXBlKiBhbmltYXRl
ZCkKLXsKLSAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsKLSAgICBBU1NFUlQobV9jb250
ZXh0RWxlbWVudCk7Ci0KLSAgICBjb25zdCBhdXRvIGZyb21JbnRlZ2VyID0gKG1fYW5pbWF0aW9u
RWxlbWVudC0+YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OlRvID8gYW5pbWF0ZWQg
OiBmcm9tKS0+YXM8aW50PigpOwotICAgIGNvbnN0IGF1dG8gdG9JbnRlZ2VyID0gdG8tPmFzPGlu
dD4oKTsKLSAgICBjb25zdCBhdXRvIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlciA9IHRvQXRFbmRP
ZkR1cmF0aW9uLT5hczxpbnQ+KCk7Ci0gICAgYXV0byYgYW5pbWF0ZWRJbnRlZ2VyID0gYW5pbWF0
ZWQtPmFzPGludD4oKTsKLQotICAgIGNhbGN1bGF0ZUFuaW1hdGVkSW50ZWdlcihtX2FuaW1hdGlv
bkVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tSW50ZWdlciwgdG9JbnRlZ2Vy
LCB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXIsIGFuaW1hdGVkSW50ZWdlcik7Ci19Ci0KLWZsb2F0
IFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJp
bmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCi17Ci0gICAgQVNTRVJUKG1f
Y29udGV4dEVsZW1lbnQpOwotICAgIGludCBmcm9tID0gZnJvbVN0cmluZy50b0ludFN0cmljdCgp
OwotICAgIGludCB0byA9IHRvU3RyaW5nLnRvSW50U3RyaWN0KCk7Ci0gICAgcmV0dXJuIGFicyh0
byAtIGZyb20pOwotfQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgJKHJldmlzaW9uIDI0
Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTVkdBdHRyaWJ1dGVBY2Nlc3Nv
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7
Ci0KLXVzaW5nIFNWR0FuaW1hdGVkSW50ZWdlciA9IFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlU
ZWFyT2ZmPGludD47Ci11c2luZyBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgPSBTVkdBbmlt
YXRlZEF0dHJpYnV0ZTxTVkdBbmltYXRlZEludGVnZXI+OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
d25lclR5cGU+Ci11c2luZyBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGVBY2Nlc3NvciA9IFNW
R0FuaW1hdGVkQXR0cmlidXRlQWNjZXNzb3I8T3duZXJUeXBlLCBTVkdBbmltYXRlZEludGVnZXJB
dHRyaWJ1dGUsIEFuaW1hdGVkSW50ZWdlcj47Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlw
ZT4KLXVzaW5nIFNWR0FuaW1hdGVkT3B0aW9uYWxJbnRlZ2VyQXR0cmlidXRlQWNjZXNzb3IgPSBT
VkdBbmltYXRlZE9wdGlvbmFsQXR0cmlidXRlQWNjZXNzb3I8T3duZXJUeXBlLCBTVkdBbmltYXRl
ZEludGVnZXJBdHRyaWJ1dGUsIEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcj47Ci0KLWNs
YXNzIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yIGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVk
VHlwZUFuaW1hdG9yIHsKLXB1YmxpYzoKLSAgICBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcihT
VkdBbmltYXRpb25FbGVtZW50KiwgU1ZHRWxlbWVudCopOwotCi0gICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKFNWR0FuaW1hdGlvbkVsZW1lbnQqLCBmbG9hdCBwZXJjZW50
YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgaW50IGZyb21JbnRlZ2VyLCBpbnQgdG9JbnRlZ2Vy
LCBpbnQgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyLCBpbnQmIGFuaW1hdGVkSW50ZWdlcik7Ci0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjb25zdHJ1Y3RGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRl
ZFR5cGU+IHN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0
IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVz
ZXRBbmltVmFsVG9CYXNlVmFsKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYs
IFNWR0FuaW1hdGVkVHlwZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5pbVZhbFdpbGxDaGFuZ2Uo
Y29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBhbmltVmFsRGlkQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlwZSos
IFNWR0FuaW1hdGVkVHlwZSopIG92ZXJyaWRlOwotICAgIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRU
eXBlKiwgU1ZHQW5pbWF0ZWRUeXBlKiwgU1ZHQW5pbWF0ZWRUeXBlKiwgU1ZHQW5pbWF0ZWRUeXBl
Kikgb3ZlcnJpZGU7Ci0gICAgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBm
cm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZEludGVnZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXIuY3BwCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaCIKLQotI2luY2x1ZGUg
IlNWR0FuaW1hdGVFbGVtZW50QmFzZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlci5o
IgotI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpTVkdBbmltYXRl
ZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50KiBhbmlt
YXRpb25FbGVtZW50LCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKLSAgICA6IFNWR0FuaW1h
dGVkVHlwZUFuaW1hdG9yKEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlciwgYW5pbWF0aW9u
RWxlbWVudCwgY29udGV4dEVsZW1lbnQpCi17Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTVkdBbmlt
YXRlZFR5cGU+IFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpjb25z
dHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHJldHVybiBTVkdB
bmltYXRlZFR5cGU6OmNyZWF0ZShTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8aW50LCBpbnQ+
Pjo6ZnJvbVN0cmluZyhzdHJpbmcpKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVk
VHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5p
bVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1h
dGVkVHlwZXMpCi17Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEZyb21CYXNlVmFsdWVzPFNWR0FuaW1h
dGVkSW50ZWdlciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQotdm9p
ZCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6c3RvcEFuaW1WYWxB
bmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5
cGVzKQotewotICAgIHN0b3BBbmltVmFsQW5pbWF0aW9uRm9yVHlwZXM8U1ZHQW5pbWF0ZWRJbnRl
Z2VyLCBTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwotfQotCi12b2lkIFNWR0Fu
aW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpyZXNldEFuaW1WYWxUb0Jhc2VW
YWwoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzLCBT
VkdBbmltYXRlZFR5cGUmIHR5cGUpCi17Ci0gICAgcmVzZXRGcm9tQmFzZVZhbHVlczxTVkdBbmlt
YXRlZEludGVnZXIsIFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcywgdHlwZSk7Ci19
Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmFuaW1W
YWxXaWxsQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0
ZWRUeXBlcykKLXsKLSAgICBhbmltVmFsV2lsbENoYW5nZUZvclR5cGVzPFNWR0FuaW1hdGVkSW50
ZWdlciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQotdm9pZCBTVkdB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6YW5pbVZhbERpZENoYW5nZShj
b25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0g
ICAgYW5pbVZhbERpZENoYW5nZUZvclR5cGVzPFNWR0FuaW1hdGVkSW50ZWdlciwgU1ZHQW5pbWF0
ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXJBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5cGUq
IGZyb20sIFNWR0FuaW1hdGVkVHlwZSogdG8pCi17Ci0gICAgQVNTRVJUKGZyb20tPnR5cGUoKSA9
PSBBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIpOwotICAgIEFTU0VSVChmcm9tLT50eXBl
KCkgPT0gdG8tPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBhdXRvJiBmcm9tSW50ZWdlclBhaXIgPSBm
cm9tLT5hczxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpOwotICAgIGF1dG8mIHRvSW50ZWdlclBhaXIg
PSB0by0+YXM8c3RkOjpwYWlyPGludCwgaW50Pj4oKTsKLQotICAgIHRvSW50ZWdlclBhaXIuZmly
c3QgKz0gZnJvbUludGVnZXJQYWlyLmZpcnN0OwotICAgIHRvSW50ZWdlclBhaXIuc2Vjb25kICs9
IGZyb21JbnRlZ2VyUGFpci5zZWNvbmQ7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0
aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2Vu
dGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSogZnJvbSwgU1ZHQW5p
bWF0ZWRUeXBlKiB0bywgU1ZHQW5pbWF0ZWRUeXBlKiB0b0F0RW5kT2ZEdXJhdGlvbiwgU1ZHQW5p
bWF0ZWRUeXBlKiBhbmltYXRlZCkKLXsKLSAgICBBU1NFUlQobV9hbmltYXRpb25FbGVtZW50KTsK
LSAgICBBU1NFUlQobV9jb250ZXh0RWxlbWVudCk7Ci0KLSAgICBjb25zdCBhdXRvJiBmcm9tSW50
ZWdlclBhaXIgPSAobV9hbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0
aW9uTW9kZTo6VG8gPyBhbmltYXRlZCA6IGZyb20pLT5hczxzdGQ6OnBhaXI8aW50LCBpbnQ+Pigp
OwotICAgIGNvbnN0IGF1dG8mIHRvSW50ZWdlclBhaXIgPSB0by0+YXM8c3RkOjpwYWlyPGludCwg
aW50Pj4oKTsKLSAgICBjb25zdCBhdXRvJiB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXJQYWlyID0g
dG9BdEVuZE9mRHVyYXRpb24tPmFzPHN0ZDo6cGFpcjxpbnQsIGludD4+KCk7Ci0gICAgYXV0byYg
YW5pbWF0ZWRJbnRlZ2VyUGFpciA9IGFuaW1hdGVkLT5hczxzdGQ6OnBhaXI8aW50LCBpbnQ+Pigp
OwotCi0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkSW50
ZWdlcihtX2FuaW1hdGlvbkVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tSW50
ZWdlclBhaXIuZmlyc3QsIHRvSW50ZWdlclBhaXIuZmlyc3QsIHRvQXRFbmRPZkR1cmF0aW9uSW50
ZWdlclBhaXIuZmlyc3QsIGFuaW1hdGVkSW50ZWdlclBhaXIuZmlyc3QpOwotICAgIFNWR0FuaW1h
dGVkSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVBbmltYXRlZEludGVnZXIobV9hbmltYXRpb25F
bGVtZW50LCBwZXJjZW50YWdlLCByZXBlYXRDb3VudCwgZnJvbUludGVnZXJQYWlyLnNlY29uZCwg
dG9JbnRlZ2VyUGFpci5zZWNvbmQsIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlclBhaXIuc2Vjb25k
LCBhbmltYXRlZEludGVnZXJQYWlyLnNlY29uZCk7Ci19Ci0KLWZsb2F0IFNWR0FuaW1hdGVkSW50
ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIC8vIEZJWE1FOiBEaXN0YW5jZSBjYWxjdWxhdGlv
biBpcyBub3QgcG9zc2libGUgZm9yIFNWR0ludGVnZXJPcHRpb25hbEludGVnZXIgcmlnaHQgbm93
LiBXZSBuZWVkIHRoZSBkaXN0YW5jZSBmb3IgZXZlcnkgc2luZ2xlIHZhbHVlLgotICAgIHJldHVy
biAtMTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaAkocmV2aXNpb24gMjQyOTc4KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oCShub25l
eGlzdGVudCkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJTVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7Ci0KLWNsYXNzIFNWR0FuaW1hdGVk
SW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yIGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVk
VHlwZUFuaW1hdG9yIHsKLXB1YmxpYzoKLSAgICBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbElu
dGVnZXJBbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50KiwgU1ZHRWxlbWVudCopOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gY29uc3RydWN0RnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBzdGFydEFuaW1WYWxBbmltYXRpb24oY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlM
aXN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wQW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdF
bGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0QW5p
bVZhbFRvQmFzZVZhbChjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmLCBTVkdB
bmltYXRlZFR5cGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFuaW1WYWxXaWxsQ2hhbmdlKGNvbnN0
IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5p
bVZhbERpZENoYW5nZShjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgYWRkQW5pbWF0ZWRUeXBlcyhTVkdBbmltYXRlZFR5cGUqLCBTVkdB
bmltYXRlZFR5cGUqKSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUo
ZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR0FuaW1hdGVkVHlwZSos
IFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVkVHlwZSosIFNWR0FuaW1hdGVkVHlwZSopIG92
ZXJyaWRlOwotICAgIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0
cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuaAko
cmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAKIAogI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZUFu
aW1hdG9yLmgiCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiU1ZHQXR0cmli
dXRlQWNjZXNzb3IuaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNw
cAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsNyArMzA1LDYgQEAgdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpzZXRBdHRyaWJ1dGVUeQogICAgICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBB
dHRyaWJ1dGVUeXBlOjpYTUw7CiAgICAgZWxzZQogICAgICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBB
dHRyaWJ1dGVUeXBlOjpBdXRvOwotICAgIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFy
Z2V0RWxlbWVudCgpKTsKIH0KIAogU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRvVmFsdWUo
KSBjb25zdApAQCAtNjY3LDIxICs2NjYsMTAgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojpk
ZXRlcm1pbmVQcm9wZQogICAgIGlmIChpbmhlcml0c0Zyb21Qcm9wZXJ0eSh0YXJnZXRFbGVtZW50
LmdldCgpLCBhdHRyaWJ1dGVOYW1lLCB0bykpCiAgICAgICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlw
ZSA9IEluaGVyaXRWYWx1ZTsKIH0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRBbmlt
YXRlZFByb3BlcnR5VHlwZSgpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0QW5pbWF0
aW9uKCkKIHsKICAgICBtX2xhc3RWYWx1ZXNBbmltYXRpb25Gcm9tID0gU3RyaW5nKCk7CiAgICAg
bV9sYXN0VmFsdWVzQW5pbWF0aW9uVG8gPSBTdHJpbmcoKTsKIH0KIAotdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KFNWR0VsZW1lbnQqIHRhcmdldCkKLXsKLSAgICBT
VkdTTUlMRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCh0YXJnZXQpOwotICAgIGNoZWNrSW52YWxp
ZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0KTsKLX0KLQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqIHRhcmdldCkKLXsKLSAg
ICBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlID0gdGFyZ2V0ICYmIGhhc1ZhbGlkQXR0cmli
dXRlTmFtZSgpICYmIGF0dHJpYnV0ZVR5cGUoKSA9PSBBdHRyaWJ1dGVUeXBlOjpDU1MgJiYgIWlz
VGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0LCBhdHRyaWJ1dGVOYW1lKCkpOwotfQot
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlz
aW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDIyICszNiwxMCBAQCBjbGFzcyBDb25kaXRpb25FdmVudExp
c3RlbmVyOwogY2xhc3MgU1ZHQW5pbWF0ZWRUeXBlOwogY2xhc3MgVGltZUNvbnRhaW5lcjsKIAot
ZW51bSBjbGFzcyBBbmltYXRpb25Nb2RlIDogdWludDhfdCB7Ci0gICAgTm9uZSwKLSAgICBGcm9t
VG8sCi0gICAgRnJvbUJ5LAotICAgIFRvLAotICAgIEJ5LAotICAgIFZhbHVlcywKLSAgICBQYXRo
IC8vIFVzZWQgYnkgQW5pbWF0ZU1vdGlvbi4KLX07Ci0KIC8vIElmIHdlIGhhdmUgJ2N1cnJlbnRD
b2xvcicgb3IgJ2luaGVyaXQnIGFzIGFuaW1hdGlvbiB2YWx1ZSwgd2UgbmVlZCB0byBncmFiCiAv
LyB0aGUgdmFsdWUgZHVyaW5nIHRoZSBhbmltYXRpb24gc2luY2UgdGhlIHZhbHVlIGNhbiBiZSBh
bmltYXRlZCBpdHNlbGYuCiBlbnVtIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgeyBSZWd1bGFy
UHJvcGVydHlWYWx1ZSwgQ3VycmVudENvbG9yVmFsdWUsIEluaGVyaXRWYWx1ZSB9OwogCi1lbnVt
IGNsYXNzIENhbGNNb2RlIDogdWludDhfdCB7IERpc2NyZXRlLCBMaW5lYXIsIFBhY2VkLCBTcGxp
bmUgfTsKLQogY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVudCA6IHB1YmxpYyBTVkdTTUlMRWxlbWVu
dCwgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIHB1YmxpYyBTVkdUZXN0cyB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdBbmltYXRpb25FbGVtZW50KTsKIHB1Ymxp
YzoKQEAgLTE0Niw2ICsxMzQsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgYW5pbWF0ZWROdW1i
ZXIgPSBudW1iZXI7CiAgICAgfQogCisgICAgZW51bSBjbGFzcyBBdHRyaWJ1dGVUeXBlIDogdWlu
dDhfdCB7IENTUywgWE1MLCBBdXRvIH07CisgICAgQXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVUeXBlOyB9CisKKyAgICB2b2lkIGNvbXB1dGVD
U1NQcm9wZXJ0eVZhbHVlKFNWR0VsZW1lbnQqLCBDU1NQcm9wZXJ0eUlELCBTdHJpbmcmIHZhbHVl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGNvbnN0IFN0
cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0byk7CisKIHByb3RlY3RlZDoKICAgICBTVkdBbmlt
YXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCkBAIC0xNTMs
MTcgKzE0NywxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIEF0dHJpYnV0ZU93bmVyUHJveHk6
OkF0dHJpYnV0ZVJlZ2lzdHJ5JiBhdHRyaWJ1dGVSZWdpc3RyeSgpIHsgcmV0dXJuIEF0dHJpYnV0
ZU93bmVyUHJveHk6OmF0dHJpYnV0ZVJlZ2lzdHJ5KCk7IH0KICAgICBjb25zdCBTVkdBdHRyaWJ1
dGVPd25lclByb3h5JiBhdHRyaWJ1dGVPd25lclByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9hdHRyaWJ1dGVPd25lclByb3h5OyB9CiAKLSAgICB2b2lkIGNvbXB1dGVDU1NQcm9wZXJ0
eVZhbHVlKFNWR0VsZW1lbnQqLCBDU1NQcm9wZXJ0eUlELCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGNvbnN0IFN0cmluZyYgZnJv
bSwgY29uc3QgU3RyaW5nJiB0byk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0QW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRpb24oKTsKIAogICAgIHN0
YXRpYyBib29sIGlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNT
dHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgZW51bSBjbGFzcyBBdHRyaWJ1dGVUeXBlIHsg
Q1NTLCBYTUwsIEF1dG8gfTsKLSAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZVR5cGU7IH0KLQogICAgIFN0cmluZyB0b1ZhbHVlKCkgY29u
c3Q7CiAgICAgU3RyaW5nIGJ5VmFsdWUoKSBjb25zdDsKICAgICBTdHJpbmcgZnJvbVZhbHVlKCkg
Y29uc3Q7CkBAIC0xNzcsMTAgKzE2Niw3IEBAIHByb3RlY3RlZDoKICAgICBBbmltYXRlZFByb3Bl
cnR5VmFsdWVUeXBlIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlIHsgUmVndWxhclByb3BlcnR5VmFs
dWUgfTsKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Qcm9wZXJ0eVZhbHVlVHlw
ZSB7IFJlZ3VsYXJQcm9wZXJ0eVZhbHVlIH07CiAKLSAgICB2b2lkIHNldFRhcmdldEVsZW1lbnQo
U1ZHRWxlbWVudCopIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBoYXNJbnZhbGlkQ1NTQXR0cmli
dXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGU7IH0K
LSAgICB2b2lkIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKICAgICB2b2lkIHNldEFuaW1h
dGlvbk1vZGUoQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlKSB7IG1fYW5pbWF0aW9uTW9kZSA9
IGFuaW1hdGlvbk1vZGU7IH0KQEAgLTIxOCw3ICsyMDQsNiBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxVbml0QmV6aWVyPiBtX2tleVNwbGluZXM7CiAgICAgU3RyaW5nIG1fbGFzdFZhbHVlc0FuaW1h
dGlvbkZyb207CiAgICAgU3RyaW5nIG1fbGFzdFZhbHVlc0FuaW1hdGlvblRvOwotICAgIGJvb2wg
bV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSB7IGZhbHNlIH07CiAgICAgQ2FsY01vZGUgbV9j
YWxjTW9kZSB7IENhbGNNb2RlOjpMaW5lYXIgfTsKICAgICBBbmltYXRpb25Nb2RlIG1fYW5pbWF0
aW9uTW9kZSB7IEFuaW1hdGlvbk1vZGU6Ok5vbmUgfTsKICAgICBBdHRyaWJ1dGVPd25lclByb3h5
IG1fYXR0cmlidXRlT3duZXJQcm94eSB7ICp0aGlzIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0b3JGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdG9yRmFjdG9yeS5oCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0b3JGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDYg
QEAKICNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIKICNpbmNsdWRlICJTVkdBbmltYXRl
ZENvbG9yLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkSW50ZWdlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlck9wdGlv
bmFsSW50ZWdlci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIK
QEAgLTU4LDkgKzU2LDkgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRp
b246CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZEVudW1l
cmF0aW9uQW5pbWF0b3I+KGFuaW1hdGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KTsKICAgICAg
ICAgY2FzZSBBbmltYXRlZEludGVnZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29udGV4
dEVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGNhc2UgQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I+KGFuaW1h
dGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8U1ZHQW5pbWF0ZWRMZW5ndGhBbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwg
Y29udGV4dEVsZW1lbnQpOwogICAgICAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJp
YnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKKworI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTVkdBbmlt
YXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCIKKyNpbmNs
dWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHQXR0cmlidXRl
QW5pbWF0aW9uQ29udHJvbGxlcjo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcihTVkdB
bmltYXRpb25FbGVtZW50JiBhbmltYXRpb25FbGVtZW50LCBTVkdFbGVtZW50JiB0YXJnZXRFbGVt
ZW50KQorICAgIDogU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UoYW5pbWF0aW9u
RWxlbWVudCwgdGFyZ2V0RWxlbWVudCkKK3sKK30KKworU1ZHQXR0cmlidXRlQW5pbWF0b3IqIFNW
R0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fYW5pbWF0b3IpCisgICAgICAgIG1fYW5pbWF0b3IgPSBtX3RhcmdldEVsZW1lbnQuY3Jl
YXRlQW5pbWF0b3IobV9hbmltYXRpb25FbGVtZW50LmF0dHJpYnV0ZU5hbWUoKSwgbV9hbmltYXRp
b25FbGVtZW50LmFuaW1hdGlvbk1vZGUoKSwgbV9hbmltYXRpb25FbGVtZW50LmNhbGNNb2RlKCks
IG1fYW5pbWF0aW9uRWxlbWVudC5pc0FjY3VtdWxhdGVkKCksIG1fYW5pbWF0aW9uRWxlbWVudC5p
c0FkZGl0aXZlKCkpOworCisgICAgcmV0dXJuIG1fYW5pbWF0b3IuZ2V0KCk7Cit9CisKK2Jvb2wg
U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNEaXNjcmV0ZUFuaW1hdG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgJiYgbV9hbmltYXRvciAm
JiBtX2FuaW1hdG9yLT5pc0Rpc2NyZXRlKCk7Cit9CisKK2Jvb2wgU1ZHQXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlcjo6aXNBZGRpdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpc0Rpc2Ny
ZXRlQW5pbWF0b3IoKTsKK30KKyAgICAKK2Jvb2wgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlcjo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJn
ZXRFbGVtZW50LmlzQW5pbWF0ZWRBdHRyaWJ1dGUobV9hbmltYXRpb25FbGVtZW50LmF0dHJpYnV0
ZU5hbWUoKSk7Cit9CisKK2Jvb2wgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2Fs
Y3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0
bykKK3sKKyAgICBpZiAoYXV0byogYW5pbWF0b3IgPSB0aGlzLT5hbmltYXRvcigpKSB7CisgICAg
ICAgIGFuaW1hdG9yLT5zZXRGcm9tQW5kVG9WYWx1ZXMoJm1fdGFyZ2V0RWxlbWVudCwgZnJvbSwg
dG8pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUZyb21BbmRC
eVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgYnkpCit7CisgICAgaWYg
KG1fYW5pbWF0aW9uRWxlbWVudC5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6Qnkg
JiYgKCFpc0FkZGl0aXZlKCkgfHwgaXNEaXNjcmV0ZUFuaW1hdG9yKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fYW5pbWF0aW9uRWxlbWVudC5hbmltYXRpb25Nb2Rl
KCkgPT0gQW5pbWF0aW9uTW9kZTo6RnJvbUJ5ICYmIGlzRGlzY3JldGVBbmltYXRvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogYW5pbWF0b3IgPSB0aGlzLT5hbmlt
YXRvcigpKSB7CisgICAgICAgIGFuaW1hdG9yLT5zZXRGcm9tQW5kQnlWYWx1ZXMoJm1fdGFyZ2V0
RWxlbWVudCwgZnJvbSwgYnkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNh
bGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJh
dGlvblN0cmluZykKK3sKKyAgICBpZiAodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaXNEaXNjcmV0ZUFuaW1hdG9yKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGF1dG8qIGFuaW1hdG9yID0gdGhpcy0+
YW5pbWF0b3IoKSkgeworICAgICAgICBhbmltYXRvci0+c2V0VG9BdEVuZE9mRHVyYXRpb25WYWx1
ZSh0b0F0RW5kT2ZEdXJhdGlvblN0cmluZyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVzZXRBbmltYXRlZFR5cGUoKQoreworICAgIGlmIChhdXRvKiBhbmltYXRvciA9IHRo
aXMtPmFuaW1hdG9yKCkpCisgICAgICAgIGFuaW1hdG9yLT5zdGFydCgmbV90YXJnZXRFbGVtZW50
KTsKK30KKwordm9pZCBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVB
bmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdT
TUlMRWxlbWVudCopCit7CisgICAgQVNTRVJUKHBlcmNlbnRhZ2UgPj0gMCAmJiBwZXJjZW50YWdl
IDw9IDEpOworICAgIGlmIChtX3RhcmdldEVsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0
VGFnKSkKKyAgICAgICAgcGVyY2VudGFnZSA9IDE7CisKKyAgICBpZiAobV9hbmltYXRpb25FbGVt
ZW50LmNhbGNNb2RlKCkgPT0gQ2FsY01vZGU6OkRpc2NyZXRlKQorICAgICAgICBwZXJjZW50YWdl
ID0gcGVyY2VudGFnZSA8IDAuNSA/IDAgOiAxOworCisgICAgaWYgKGF1dG8qIGFuaW1hdG9yID0g
dGhpcy0+YW5pbWF0b3IoKSkKKyAgICAgICAgYW5pbWF0b3ItPnByb2dyZXNzKCZtX3RhcmdldEVs
ZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50KTsKK30KKwordm9pZCBTVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyOjphcHBseVJlc3VsdHNUb1RhcmdldCgpCit7CisgICAgaWYgKGF1
dG8qIGFuaW1hdG9yID0gdGhpcy0+YW5pbWF0b3IoKSkKKyAgICAgICAgYW5pbWF0b3ItPmFwcGx5
KCZtX3RhcmdldEVsZW1lbnQpOworfQorCit2b2lkIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpCit7Cisg
ICAgaWYgKGF1dG8qIGFuaW1hdG9yID0gdGhpcy0+YW5pbWF0b3JJZkV4aXN0cygpKQorICAgICAg
ICBhbmltYXRvci0+c3RvcCh0YXJnZXRFbGVtZW50KTsKK30KKworZmxvYXQgU1ZHQXR0cmlidXRl
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9t
LCBjb25zdCBTdHJpbmcmIHRvKQoreworICAgIC8vIEZJWE1FOiBBIHJldHVybiB2YWx1ZSBvZiBm
bG9hdCBpcyBub3QgZW5vdWdoIHRvIHN1cHBvcnQgcGFjZWQgYW5pbWF0aW9ucyBvbiBsaXN0cy4K
KyAgICBpZiAoYXV0byogYW5pbWF0b3IgPSB0aGlzLT5hbmltYXRvcigpKQorICAgICAgICByZXR1
cm4gYW5pbWF0b3ItPmNhbGN1bGF0ZURpc3RhbmNlKCZtX3RhcmdldEVsZW1lbnQsIGZyb20sIHRv
KTsKKyAgICByZXR1cm4gLTE7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
dHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0F0
dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVudDsKK2NsYXNzIFNWR0VsZW1lbnQ7CitjbGFzcyBT
VkdTTUlMRWxlbWVudDsKKworY2xhc3MgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlciA6
IHB1YmxpYyBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZSB7CitwdWJsaWM6Cisg
ICAgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcihTVkdBbmltYXRpb25FbGVtZW50Jiwg
U1ZHRWxlbWVudCYpOworICAgIAorcHJpdmF0ZToKKyAgICBTVkdBdHRyaWJ1dGVBbmltYXRvciog
YW5pbWF0b3IoKSBjb25zdDsKKyAgICBTVkdBdHRyaWJ1dGVBbmltYXRvciogYW5pbWF0b3JJZkV4
aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0b3IuZ2V0KCk7IH0KKworICAgIHZvaWQgcmVz
ZXRBbmltYXRlZFR5cGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgY2FsY3Vs
YXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5n
JiB0b1N0cmluZykgb3ZlcnJpZGU7CisgICAgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMo
Y29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKSBvdmVycmlk
ZTsKKyAgICBib29sIGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5n
JiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZykgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNhbGN1bGF0
ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNW
R1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSBvdmVycmlkZTsKKworICAgIHZvaWQgYXBwbHlS
ZXN1bHRzVG9UYXJnZXQoKSBvdmVycmlkZTsKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShj
b25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIG92ZXJyaWRl
OworICAgIAorICAgIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzRGlz
Y3JldGVBbmltYXRvcigpIGNvbnN0OworCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U1ZH
QXR0cmlidXRlQW5pbWF0b3I+IG1fYW5pbWF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1
dGVBbmltYXRpb25Db250cm9sbGVyQmFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0F0
dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmgiCisKKyNpbmNsdWRlICJTVkdBbmltYXRp
b25FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlOjpTVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyQmFzZShTVkdBbmltYXRpb25FbGVtZW50JiBhbmltYXRpb25FbGVt
ZW50LCBTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50KQorICAgIDogbV9hbmltYXRpb25FbGVtZW50
KGFuaW1hdGlvbkVsZW1lbnQpCisgICAgLCBtX3RhcmdldEVsZW1lbnQodGFyZ2V0RWxlbWVudCkK
K3sKK30KKworQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlckJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKGNvbnN0IFNWR0FuaW1hdGlv
bkVsZW1lbnQmIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byBwcm9wZXJ0eVR5
cGVzID0gdGFyZ2V0RWxlbWVudC5hbmltYXRlZFByb3BlcnR5VHlwZXNGb3JBdHRyaWJ1dGUoYXR0
cmlidXRlTmFtZSk7CisgICAgaWYgKHByb3BlcnR5VHlwZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gQW5pbWF0ZWRVbmtub3duOworCisgICAgQVNTRVJUKHByb3BlcnR5VHlwZXMuc2l6ZSgp
IDw9IDIpOworICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUgPSBwcm9wZXJ0eVR5cGVzWzBd
OworICAgIGlmIChhbmltYXRpb25FbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVD
b2xvclRhZykgJiYgdHlwZSAhPSBBbmltYXRlZENvbG9yKQorICAgICAgICByZXR1cm4gQW5pbWF0
ZWRVbmtub3duOworCisgICAgLy8gQW5pbWF0aW9ucyBvZiB0cmFuc2Zvcm0gbGlzdHMgYXJlIG5v
dCBhbGxvd2VkIGZvciA8YW5pbWF0ZT4gb3IgPHNldD4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9TVkcvYW5pbWF0ZS5odG1sI0FuaW1hdGlvbkF0dHJpYnV0ZXNBbmRQcm9wZXJ0aWVzCisg
ICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICYmICFhbmltYXRpb25FbGVtZW50
Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKQorICAgICAgICByZXR1
cm4gQW5pbWF0ZWRVbmtub3duOworCisgICAgLy8gRm9ydHVuYXRlbHkgdGhlcmUncyBqdXN0IG9u
ZSBzcGVjaWFsIGNhc2UgbmVlZGVkIGhlcmU6IFNWR01hcmtlckVsZW1lbnRzIG9yaWVudEF0dHIs
IHdoaWNoCisgICAgLy8gY29ycmVzcG9uZHMgdG8gU1ZHQW5pbWF0ZWRBbmdsZSBvcmllbnRBbmds
ZSBhbmQgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcmllbnRUeXBlLiBXZSBoYXZlIHRvCisgICAg
Ly8gZmlndXJlIG91dCB3aG9zZSB2YWx1ZSB0byBjaGFuZ2UgaGVyZS4KKyAgICBpZiAodGFyZ2V0
RWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjptYXJrZXJUYWcpICYmIHR5cGUgPT0gQW5pbWF0
ZWRBbmdsZSkgeworICAgICAgICBBU1NFUlQocHJvcGVydHlUeXBlcy5zaXplKCkgPT0gMik7Cisg
ICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzWzBdID09IEFuaW1hdGVkQW5nbGUpOworICAgICAg
ICBBU1NFUlQocHJvcGVydHlUeXBlc1sxXSA9PSBBbmltYXRlZEVudW1lcmF0aW9uKTsKKyAgICB9
IGVsc2UgaWYgKHByb3BlcnR5VHlwZXMuc2l6ZSgpID09IDIpCisgICAgICAgIEFTU0VSVChwcm9w
ZXJ0eVR5cGVzWzBdID09IHByb3BlcnR5VHlwZXNbMV0pOworCisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1
dGVBbmltYXRpb25Db250cm9sbGVyQmFzZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTVkdBbmltYXRpb25FbGVtZW50OworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNzIFNWR1NN
SUxFbGVtZW50OworCitjbGFzcyBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZSB7
CitwdWJsaWM6CisgICAgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UoU1ZHQW5p
bWF0aW9uRWxlbWVudCYsIFNWR0VsZW1lbnQmKTsKKyAgICB2aXJ0dWFsIH5TVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyQmFzZSgpID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBBbmltYXRl
ZFByb3BlcnR5VHlwZSBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShjb25zdCBTVkdBbmlt
YXRpb25FbGVtZW50JiwgU1ZHRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVhbCB2b2lk
IHJlc2V0QW5pbWF0ZWRUeXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFuaW1hdGVk
VHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSA9IDA7CisgICAgCisgICAgdmlydHVhbCBi
b29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNv
bnN0IFN0cmluZyYgdG9TdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJv
bUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0
cmluZykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZh
bHVlKGNvbnN0IFN0cmluZyYgdG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2ln
bmVkIHJlcGVhdENvdW50LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBhcHBseVJlc3VsdHNUb1RhcmdldCgpID0gMDsKKyAgICAKKyAgICB2aXJ0
dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiB0b1N0cmluZykgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIFNWR0FuaW1h
dGlvbkVsZW1lbnQmIG1fYW5pbWF0aW9uRWxlbWVudDsKKyAgICBTVkdFbGVtZW50JiBtX3Rhcmdl
dEVsZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAwLDYgKzcwMCwxNCBAQCB2b2lk
IFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplQWxsQW5pbWF0ZWRTCiAKICAgICBzdmdFbGVtZW50LT5z
eW5jaHJvbml6ZUF0dHJpYnV0ZXMoKTsKICAgICBzdmdFbGVtZW50LT5lbGVtZW50RGF0YSgpLT5z
ZXRBbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eShmYWxzZSk7CisgICAgCisgICAgLy8gRklY
TUU6IERlbGV0ZSB0aGUgU1ZHIHRlYXIgb2ZmIHByb3BlcnRpZXMgY29kZSBmcm9tIHRoaXMgZnVu
Y3Rpb24KKyAgICAKKyAgICAvLyBTVkdQcm9wZXJ0eVJlZ2lzdHJ5OjpzeW5jaHJvbml6ZUFsbEF0
dHJpYnV0ZXMoKSByZXR1cm5zIHRoZSBuZXcgdmFsdWVzIG9mCisgICAgLy8gdGhlIHByb3BlcnRp
ZXMgd2hpY2ggaGF2ZSBjaGFuZ2VkIGJ1dCBub3QgY29tbWl0dGVkIHlldC4KKyAgICBhdXRvIG1h
cCA9IHN2Z0VsZW1lbnQtPnByb3BlcnR5UmVnaXN0cnkoKS5zeW5jaHJvbml6ZUFsbEF0dHJpYnV0
ZXMoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbWFwKQorICAgICAgICBzdmdFbGVt
ZW50LT5zZXRTeW5jaHJvbml6ZWRMYXp5QXR0cmlidXRlKGVudHJ5LmtleSwgZW50cnkudmFsdWUp
OwogfQogCiB2b2lkIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplQW5pbWF0ZWRTVkdBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKQEAgLTcwNywxMyArNzE1LDQ4IEBAIHZv
aWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVBbmltYXRlZFNWR0EKICAgICBpZiAoIWVsZW1lbnRE
YXRhKCkgfHwgIWVsZW1lbnREYXRhKCktPmFuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBEZWxldGUgdGhlIFNWRyB0ZWFyIG9m
ZiBwcm9wZXJ0aWVzIGNvZGUgZnJvbSB0aGlzIGZ1bmN0aW9uCisKICAgICBTVkdFbGVtZW50KiBu
b25Db25zdFRoaXMgPSBjb25zdF9jYXN0PFNWR0VsZW1lbnQqPih0aGlzKTsKICAgICBpZiAobmFt
ZSA9PSBhbnlRTmFtZSgpKQogICAgICAgICBzeW5jaHJvbml6ZUFsbEFuaW1hdGVkU1ZHQXR0cmli
dXRlKG5vbkNvbnN0VGhpcyk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKGlzQW5pbWF0ZWRQcm9w
ZXJ0eUF0dHJpYnV0ZShuYW1lKSkgeworICAgICAgICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIHBy
b3BlcnR5IGhhcyBjaGFuZ2VkLCBzZXJpYWxpemUgdGhlIG5ldyB2YWx1ZSB0byB0aGUgYXR0cmli
dXRlLgorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3BlcnR5UmVnaXN0cnkoKS5zeW5jaHJv
bml6ZShuYW1lKSkKKyAgICAgICAgICAgIG5vbkNvbnN0VGhpcy0+c2V0U3luY2hyb25pemVkTGF6
eUF0dHJpYnV0ZShuYW1lLCAqdmFsdWUpOworICAgIH0gZWxzZQogICAgICAgICBub25Db25zdFRo
aXMtPnN5bmNocm9uaXplQXR0cmlidXRlKG5hbWUpOwogfQogCit2b2lkIFNWR0VsZW1lbnQ6OmNv
bW1pdFByb3BlcnR5Q2hhbmdlKFNWR0FuaW1hdGVkUHJvcGVydHkmIGFuaW1hdGVkUHJvcGVydHkp
Cit7CisgICAgUXVhbGlmaWVkTmFtZSBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlSZWdpc3RyeSgp
LmFuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGVOYW1lKGFuaW1hdGVkUHJvcGVydHkpOworICAgIHNl
dFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0
eS5iYXNlVmFsQXNTdHJpbmcoKSk7CisKKyAgICBpbnZhbGlkYXRlU1ZHQXR0cmlidXRlcygpOwor
ICAgIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlTmFtZSk7Cit9CisKK2Jvb2wgU1ZHRWxl
bWVudDo6aXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb3BlcnR5UmVnaXN0cnkoKS5pc0Fu
aW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7Cit9CisKK2Jvb2wgU1ZHRWxl
bWVudDo6aXNBbmltYXRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lKSBjb25zdAoreworICAgIHJldHVybiBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoYXR0
cmlidXRlTmFtZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxTVkdBdHRyaWJ1dGVBbmltYXRvcj4g
U1ZHRWxlbWVudDo6Y3JlYXRlQW5pbWF0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSwgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9v
bCBpc0FjY3VtdWxhdGVkLCBib29sIGlzQWRkaXRpdmUpCit7CisgICAgYXV0byBhbmltYXRvciA9
IHByb3BlcnR5UmVnaXN0cnkoKS5jcmVhdGVBbmltYXRvcihhdHRyaWJ1dGVOYW1lLCBhbmltYXRp
b25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSk7CisgICAgaWYgKCFh
bmltYXRvcikKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIGZvciAoYXV0byogaW5zdGFu
Y2UgOiBpbnN0YW5jZXMoKSkKKyAgICAgICAgaW5zdGFuY2UtPnByb3BlcnR5UmVnaXN0cnkoKS5h
cHBlbmRBbmltYXRlZEluc3RhbmNlKGF0dHJpYnV0ZU5hbWUsICphbmltYXRvcik7CisgICAgcmV0
dXJuIGFuaW1hdG9yOworfQorCiBPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJl
c29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKikKIHsKICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBpbiBhIDx1c2U+IHRyZWUg
d2UgZ2V0IHRoZSBzdHlsZSBmcm9tIHRoZSBkZWZpbml0aW9uIHRyZWUuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEyICsyMiwxMyBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRQcm9wZXJ0eUltcGwuaCIKICNpbmNsdWRlICJTVkdBdHRyaWJ1dGVPd25lclByb3h5Lmgi
CiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzaW5nRXJyb3IuaCIKKyNpbmNs
dWRlICJTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpA
QCAtNDYsNyArNDcsNyBAQCBjbGFzcyBTVkdVc2VFbGVtZW50OwogCiB2b2lkIG1hcEF0dHJpYnV0
ZVRvQ1NTUHJvcGVydHkoSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJRD4q
IHByb3BlcnR5TmFtZVRvSWRNYXAsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKIAot
Y2xhc3MgU1ZHRWxlbWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50LCBwdWJsaWMgU1ZHTGFuZ1Nw
YWNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U1ZHRWxlbWVudD4geworY2xhc3MgU1ZHRWxlbWVu
dCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50LCBwdWJsaWMgU1ZHTGFuZ1NwYWNlLCBwdWJsaWMgU1ZH
UHJvcGVydHlPd25lciwgcHVibGljIENhbk1ha2VXZWFrUHRyPFNWR0VsZW1lbnQ+IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0VsZW1lbnQpOwogcHVibGljOgogICAgIGJvb2wgaXNP
dXRlcm1vc3RTVkdTVkdFbGVtZW50KCkgY29uc3Q7CkBAIC0xNTAsNiArMTUxLDE4IEBAIHB1Ymxp
YzoKICAgICBSZWZQdHI8U1ZHTGVnYWN5QW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVB
bmltYXRlZFByb3BlcnR5KGNvbnN0IFNWR0F0dHJpYnV0ZSYgYXR0cmlidXRlKSB7IHJldHVybiBh
dHRyaWJ1dGVPd25lclByb3h5KCkubG9va3VwT3JDcmVhdGVBbmltYXRlZFByb3BlcnR5KGF0dHJp
YnV0ZSk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFNWR0xlZ2FjeUFuaW1hdGVkUHJvcGVydHk+PiBs
b29rdXBPckNyZWF0ZUFuaW1hdGVkUHJvcGVydGllcyhjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KSB7IHJldHVybiBhdHRyaWJ1dGVPd25lclByb3h5KCkubG9va3VwT3JDcmVhdGVBbmltYXRlZFBy
b3BlcnRpZXMobmFtZSk7IH0KIAorICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9w
ZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRWxlbWVudD47CisgICAgdmlydHVhbCBjb25zdCBTVkdQcm9w
ZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eVJlZ2lzdHJ5OyB9CisKKyAgICBib29sIGlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgYm9vbCBpc0FuaW1hdGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKworICAgIHZvaWQgY29tbWl0UHJvcGVydHlDaGFu
Z2UoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGNvbW1pdFByb3BlcnR5Q2hhbmdlKFNWR0FuaW1h
dGVkUHJvcGVydHkmKTsKKworICAgIGNvbnN0IFNWR0VsZW1lbnQqIGF0dHJpYnV0ZUNvbnRleHRF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxTVkdBdHRyaWJ1dGVBbmltYXRvcj4gY3JlYXRlQW5pbWF0b3IoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIEFuaW1hdGlvbk1vZGUsIENhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wg
aXNBZGRpdGl2ZSk7CisKICAgICAvLyBUaGVzZSBhcmUgbmVlZGVkIGZvciB0aGUgUmVuZGVyVHJl
ZSwgYW5pbWF0aW9uIGFuZCBET00uCiAgICAgY29uc3QgYXV0byYgY2xhc3NOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jbGFzc05hbWUuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7
IH0KICAgICBhdXRvIGNsYXNzTmFtZUFuaW1hdGVkKCkgeyByZXR1cm4gbV9jbGFzc05hbWUuYW5p
bWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CkBAIC0yMDQsNiArMjE3LDgg
QEAgcHJpdmF0ZToKIAogICAgIEF0dHJpYnV0ZU93bmVyUHJveHkgbV9hdHRyaWJ1dGVPd25lclBy
b3h5IHsgKnRoaXMgfTsKICAgICBTVkdBbmltYXRlZFN0cmluZ0F0dHJpYnV0ZSBtX2NsYXNzTmFt
ZTsKKyAgICAKKyAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiB9OwogCiBjbGFzcyBTVkdFbGVtZW50OjpJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0MCwxMyBAQCBpbmxpbmUgU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OlNWR0ZFCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmZlQ29udm9sdmVNYXRyaXhUYWcpKTsKICAgICByZWdpc3RlckF0dHJpYnV0ZXMoKTsKKworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
RmxhZywgW10geworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNW
R05hbWVzOjpvcmRlckF0dHIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9vcmRlclgs
ICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9vcmRlclk+KCk7CisgICAgICAgIFByb3Bl
cnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OnRhcmdldFhBdHRyLCAmU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fdGFyZ2V0WD4oKTsKKyAgICAgICAgUHJvcGVydHlS
ZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6dGFyZ2V0WUF0dHIsICZTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6bV90YXJnZXRZPigpOworICAgIH0pOwogfQogCiBSZWY8U1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAt
NTksMzIgKzY2LDE1IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJpeEUK
ICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjpvcmRlclhJZGVudGlmaWVyKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzX2lkZW50aWZpZXIoIlNWR09yZGVyWCIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2lkZW50aWZp
ZXI7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
Om9yZGVyWUlkZW50aWZpZXIoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHNfaWRlbnRpZmllcigiU1ZHT3JkZXJZIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKLX0KLQogdm9pZCBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6cmVnaXN0ZXJBdHRyaWJ1dGVzKCkKIHsKICAgICBhdXRvJiBy
ZWdpc3RyeSA9IGF0dHJpYnV0ZVJlZ2lzdHJ5KCk7CiAgICAgaWYgKCFyZWdpc3RyeS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdO
YW1lczo6aW5BdHRyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1faW4xPigpOwotICAg
IHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjpvcmRlckF0dHIsCi0gICAgICAg
ICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6b3JkZXJYSWRlbnRpZmllciwgJlNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50OjptX29yZGVyWCwKLSAgICAgICAgJlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpvcmRlcllJZGVudGlmaWVyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
Om1fb3JkZXJZPigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjpr
ZXJuZWxNYXRyaXhBdHRyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fa2VybmVsTWF0
cml4PigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjpkaXZpc29y
QXR0ciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX2Rpdmlzb3I+KCk7CiAgICAgcmVn
aXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OmJpYXNBdHRyLCAmU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6Om1fYmlhcz4oKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0
ZTxTVkdOYW1lczo6dGFyZ2V0WEF0dHIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV90
YXJnZXRYPigpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjp0YXJn
ZXRZQXR0ciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX3RhcmdldFk+KCk7CiAgICAg
cmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OmVkZ2VNb2RlQXR0ciwgRWRnZU1v
ZGVUeXBlLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fZWRnZU1vZGU+KCk7CiAgICAg
cmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRy
LAogICAgICAgICAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Omtlcm5lbFVuaXRMZW5ndGhY
SWRlbnRpZmllciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX2tlcm5lbFVuaXRMZW5n
dGhYLApAQCAtMTAyLDggKzkyLDggQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6
cGFyc2VBdAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcmRlckF0dHIpIHsKICAgICAgICAg
ZmxvYXQgeCwgeTsKICAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUs
IHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAgICAgICAgIG1fb3JkZXJYLnNldFZh
bHVlKHgpOwotICAgICAgICAgICAgbV9vcmRlclkuc2V0VmFsdWUoeSk7CisgICAgICAgICAgICBt
X29yZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHgpOworICAgICAgICAgICAgbV9vcmRlclktPnNl
dEJhc2VWYWxJbnRlcm5hbCh5KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKCJmZUNvbnZvbHZlTWF0cml4
OiBwcm9ibGVtIHBhcnNpbmcgb3JkZXI9XCIiICsgdmFsdWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1l
bnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAgICAgICByZXR1cm47CkBAIC0xNDEsMTIg
KzEzMSwxMiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZUF0CiAgICAg
fQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSB7Ci0gICAgICAgIG1f
dGFyZ2V0WC5zZXRWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAg
IG1fdGFyZ2V0WC0+c2V0QmFzZVZhbEludGVybmFsKHZhbHVlLnN0cmluZygpLnRvVUludFN0cmlj
dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRZQXR0cikgewotICAgICAgICBtX3RhcmdldFkuc2V0VmFsdWUodmFsdWUuc3RyaW5n
KCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICBtX3RhcmdldFktPnNldEJhc2VWYWxJbnRlcm5h
bCh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE5Nyw4ICsxODcsOCBAQCBib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpz
ZXRGaWx0CiAKIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldE9yZGVyKGZsb2F0
IHgsIGZsb2F0IHkpCiB7Ci0gICAgbV9vcmRlclguc2V0VmFsdWUoeCk7Ci0gICAgbV9vcmRlclku
c2V0VmFsdWUoeSk7CisgICAgbV9vcmRlclgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKKyAgICBt
X29yZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOwogICAgIGludmFsaWRhdGUoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRCb29sZWFuLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVy
LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTczLDI2ICs2OCwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3Ro
KGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSk7CiAKICAg
ICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEuY3VycmVudFZhbHVlKGF0dHJpYnV0
ZU93bmVyUHJveHkoKSk7IH0KLSAgICBpbnQgb3JkZXJYKCkgY29uc3QgeyByZXR1cm4gbV9vcmRl
clguY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KLSAgICBpbnQgb3JkZXJZ
KCkgY29uc3QgeyByZXR1cm4gbV9vcmRlclkuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJv
eHkoKSk7IH0KKyAgICBpbnQgb3JkZXJYKCkgY29uc3QgeyByZXR1cm4gbV9vcmRlclgtPmN1cnJl
bnRWYWx1ZSgpOyB9CisgICAgaW50IG9yZGVyWSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JkZXJZLT5j
dXJyZW50VmFsdWUoKTsgfQogICAgIGNvbnN0IFNWR051bWJlckxpc3RWYWx1ZXMmIGtlcm5lbE1h
dHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsTWF0cml4LmN1cnJlbnRWYWx1ZShhdHRyaWJ1
dGVPd25lclByb3h5KCkpOyB9CiAgICAgZmxvYXQgZGl2aXNvcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGl2aXNvci5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIGZsb2F0
IGJpYXMoKSBjb25zdCB7IHJldHVybiBtX2JpYXMuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVy
UHJveHkoKSk7IH0KLSAgICBpbnQgdGFyZ2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0WC5j
dXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQotICAgIGludCB0YXJnZXRZKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRZLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5
KCkpOyB9CisgICAgaW50IHRhcmdldFgoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFgtPmN1cnJl
bnRWYWx1ZSgpOyB9CisgICAgaW50IHRhcmdldFkoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFkt
PmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZGdlTW9kZS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQog
ICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0
TGVuZ3RoWC5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWS5j
dXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIGJvb2wgcHJlc2VydmVB
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBbHBoYS5jdXJyZW50VmFsdWUoYXR0cmli
dXRlT3duZXJQcm94eSgpKTsgfQogCiAgICAgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBpbjFB
bmltYXRlZCgpIHsgcmV0dXJuIG1faW4xLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQ
cm94eSgpKTsgfQotICAgIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IG9yZGVyWEFuaW1hdGVk
KCkgeyByZXR1cm4gbV9vcmRlclguYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5
KCkpOyB9Ci0gICAgUmVmUHRyPFNWR0FuaW1hdGVkSW50ZWdlcj4gb3JkZXJZQW5pbWF0ZWQoKSB7
IHJldHVybiBtX29yZGVyWS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7
IH0KKyAgICBTVkdBbmltYXRlZEludGVnZXImIG9yZGVyWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9v
cmRlclg7IH0KKyAgICBTVkdBbmltYXRlZEludGVnZXImIG9yZGVyWUFuaW1hdGVkKCkgeyByZXR1
cm4gbV9vcmRlclk7IH0KICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PiBrZXJuZWxN
YXRyaXhBbmltYXRlZCgpIHsgcmV0dXJuIG1fa2VybmVsTWF0cml4LmFuaW1hdGVkUHJvcGVydHko
YXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
ZGl2aXNvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9kaXZpc29yLmFuaW1hdGVkUHJvcGVydHkoYXR0
cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gYmlh
c0FuaW1hdGVkKCkgeyByZXR1cm4gbV9iaWFzLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3du
ZXJQcm94eSgpKTsgfQotICAgIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IHRhcmdldFhBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fdGFyZ2V0WC5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVy
UHJveHkoKSk7IH0KLSAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiB0YXJnZXRZQW5pbWF0
ZWQoKSB7IHJldHVybiBtX3RhcmdldFkuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclBy
b3h5KCkpOyB9CisgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyJiB0YXJnZXRYQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX3RhcmdldFg7IH0KKyAgICBTVkdBbmltYXRlZEludGVnZXImIHRhcmdldFlBbmltYXRl
ZCgpIHsgcmV0dXJuIG1fdGFyZ2V0WTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBlZGdlTW9kZUFuaW1hdGVkKCkgeyByZXR1cm4gbV9lZGdlTW9kZS5hbmltYXRlZFByb3Bl
cnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1i
ZXI+IGtlcm5lbFVuaXRMZW5ndGhYQW5pbWF0ZWQoKSB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5n
dGhYLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFJlZlB0
cjxTVkdBbmltYXRlZE51bWJlcj4ga2VybmVsVW5pdExlbmd0aFlBbmltYXRlZCgpIHsgcmV0dXJu
IG1fa2VybmVsVW5pdExlbmd0aFkuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5
KCkpOyB9CkBAIC0xMDUsNiArMTAwLDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgQXR0cmlidXRl
T3duZXJQcm94eTo6QXR0cmlidXRlUmVnaXN0cnkmIGF0dHJpYnV0ZVJlZ2lzdHJ5KCkgeyByZXR1
cm4gQXR0cmlidXRlT3duZXJQcm94eTo6YXR0cmlidXRlUmVnaXN0cnkoKTsgfQogICAgIHN0YXRp
YyBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFt
ZSkgeyByZXR1cm4gQXR0cmlidXRlT3duZXJQcm94eTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyaWJ1
dGVOYW1lKTsgfQogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQXR0cmlidXRlcygpOworICAgIAor
ICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz47CisgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCiAgICAgY29uc3Qg
U1ZHQXR0cmlidXRlT3duZXJQcm94eSYgYXR0cmlidXRlT3duZXJQcm94eSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fYXR0cmlidXRlT3duZXJQcm94eTsgfQogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwpA
QCAtMTEzLDIwICsxMTEsMjAgQEAgcHJpdmF0ZToKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgb3JkZXJYSWRlbnRp
ZmllcigpOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG9yZGVyWUlkZW50aWZpZXIo
KTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBrZXJuZWxVbml0TGVuZ3RoWElkZW50
aWZpZXIoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBrZXJuZWxVbml0TGVuZ3Ro
WUlkZW50aWZpZXIoKTsKIAogICAgIEF0dHJpYnV0ZU93bmVyUHJveHkgbV9hdHRyaWJ1dGVPd25l
clByb3h5IHsgKnRoaXMgfTsKKyAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CisKICAgICBTVkdBbmltYXRlZFN0cmluZ0F0dHJpYnV0ZSBtX2luMTsKLSAg
ICBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgbV9vcmRlclg7Ci0gICAgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyQXR0cmlidXRlIG1fb3JkZXJZOworICAgIFJlZjxTVkdBbmltYXRlZEludGVnZXI+IG1f
b3JkZXJYIHsgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjcmVhdGUodGhpcykgfTsKKyAgICBSZWY8U1ZH
QW5pbWF0ZWRJbnRlZ2VyPiBtX29yZGVyWSB7IFNWR0FuaW1hdGVkSW50ZWdlcjo6Y3JlYXRlKHRo
aXMpIH07CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0QXR0cmlidXRlIG1fa2VybmVsTWF0cml4
OwogICAgIFNWR0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fZGl2aXNvcjsKICAgICBTVkdBbmlt
YXRlZE51bWJlckF0dHJpYnV0ZSBtX2JpYXM7Ci0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmli
dXRlIG1fdGFyZ2V0WDsKLSAgICBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgbV90YXJnZXRZ
OworICAgIFJlZjxTVkdBbmltYXRlZEludGVnZXI+IG1fdGFyZ2V0WCB7IFNWR0FuaW1hdGVkSW50
ZWdlcjo6Y3JlYXRlKHRoaXMpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4gbV90YXJn
ZXRZIHsgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjcmVhdGUodGhpcykgfTsKICAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uQXR0cmlidXRlPEVkZ2VNb2RlVHlwZT4gbV9lZGdlTW9kZSB7IEVER0VNT0RF
X0RVUExJQ0FURSB9OwogICAgIFNWR0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fa2VybmVsVW5p
dExlbmd0aFg7CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXJBdHRyaWJ1dGUgbV9rZXJuZWxVbml0TGVu
Z3RoWTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTEgQEAgaW5saW5l
IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OlNWR0ZFVHVyYgogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKFNWR05hbWVzOjpmZVR1cmJ1bGVuY2VUYWcpKTsKICAgICByZWdpc3RlckF0dHJpYnV0ZXMo
KTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0
ZXJQcm9wZXJ0eTxTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIsICZTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjptX251bU9jdGF2ZXM+KCk7CisgICAgfSk7CiB9CiAKIFJlZjxTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAtNjIsNyArNjcsNiBAQCB2b2lkIFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnJlZ2lzdGVyQXR0CiAgICAgcmVnaXN0cnkucmVnaXN0ZXJB
dHRyaWJ1dGU8U1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyLAogICAgICAgICAmU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6YmFzZUZyZXF1ZW5jeVhJZGVudGlmaWVyLCAmU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6bV9iYXNlRnJlcXVlbmN5WCwKICAgICAgICAgJlNWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQ6OmJhc2VGcmVxdWVuY3lZSWRlbnRpZmllciwgJlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6Om1f
YmFzZUZyZXF1ZW5jeVk+KCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFt
ZXM6Om51bU9jdGF2ZXNBdHRyLCAmU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6bV9udW1PY3RhdmVz
PigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjpzZWVkQXR0ciwg
JlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6Om1fc2VlZD4oKTsKICAgICByZWdpc3RyeS5yZWdpc3Rl
ckF0dHJpYnV0ZTxTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyLCBTVkdTdGl0Y2hPcHRpb25zLCAm
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6bV9zdGl0Y2hUaWxlcz4oKTsKICAgICByZWdpc3RyeS5y
ZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6dHlwZUF0dHIsIFR1cmJ1bGVuY2VUeXBlLCAmU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6bV90eXBlPigpOwpAQCAtOTksNyArMTAzLDcgQEAgdm9pZCBT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAgIGlmIChuYW1l
ID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikgewotICAgICAgICBtX251bU9jdGF2ZXMuc2V0
VmFsdWUodmFsdWUuc3RyaW5nKCkudG9VSW50U3RyaWN0KCkpOworICAgICAgICBtX251bU9jdGF2
ZXMtPnNldEJhc2VWYWxJbnRlcm5hbCh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDcg
KzIzLDYgQEAKIAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogI2luY2x1ZGUgIlNWR0FuaW1h
dGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEludGVnZXIuaCIKICNpbmNs
dWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIgogCkBAIC0xMDAsMTQgKzk5LDE0IEBAIHB1YmxpYzoKIAogICAg
IGZsb2F0IGJhc2VGcmVxdWVuY3lYKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WC5j
dXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lZKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WS5jdXJyZW50VmFsdWUoYXR0
cmlidXRlT3duZXJQcm94eSgpKTsgfQotICAgIGludCBudW1PY3RhdmVzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1PY3RhdmVzLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9Cisg
ICAgaW50IG51bU9jdGF2ZXMoKSBjb25zdCB7IHJldHVybiBtX251bU9jdGF2ZXMtPmN1cnJlbnRW
YWx1ZSgpOyB9CiAgICAgZmxvYXQgc2VlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlZC5jdXJyZW50
VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFNWR1N0aXRjaE9wdGlvbnMgc3Rp
dGNoVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3N0aXRjaFRpbGVzLmN1cnJlbnRWYWx1ZShhdHRy
aWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgVHVyYnVsZW5jZVR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogCiAg
ICAgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBiYXNlRnJlcXVlbmN5WEFuaW1hdGVkKCkgeyBy
ZXR1cm4gbV9iYXNlRnJlcXVlbmN5WC5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJv
eHkoKSk7IH0KICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IGJhc2VGcmVxdWVuY3lZQW5p
bWF0ZWQoKSB7IHJldHVybiBtX2Jhc2VGcmVxdWVuY3lZLmFuaW1hdGVkUHJvcGVydHkoYXR0cmli
dXRlT3duZXJQcm94eSgpKTsgfQotICAgIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IG51bU9j
dGF2ZXNBbmltYXRlZCgpIHsgcmV0dXJuIG1fbnVtT2N0YXZlcy5hbmltYXRlZFByb3BlcnR5KGF0
dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KKyAgICBTVkdBbmltYXRlZEludGVnZXImIG51bU9jdGF2
ZXNBbmltYXRlZCgpIHsgcmV0dXJuIG1fbnVtT2N0YXZlczsgfQogICAgIFJlZlB0cjxTVkdBbmlt
YXRlZE51bWJlcj4gc2VlZEFuaW1hdGVkKCkgeyByZXR1cm4gbV9zZWVkLmFuaW1hdGVkUHJvcGVy
dHkoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZEVudW1l
cmF0aW9uPiBzdGl0Y2hUaWxlc0FuaW1hdGVkKCkgeyByZXR1cm4gbV9zdGl0Y2hUaWxlcy5hbmlt
YXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gdHlwZUFuaW1hdGVkKCkgeyByZXR1cm4gbV90eXBlLmFuaW1hdGVk
UHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQpAQCAtMTE5LDYgKzExOCw5IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIEF0dHJpYnV0ZU93bmVyUHJveHk6OkF0dHJpYnV0ZVJlZ2lzdHJ5
JiBhdHRyaWJ1dGVSZWdpc3RyeSgpIHsgcmV0dXJuIEF0dHJpYnV0ZU93bmVyUHJveHk6OmF0dHJp
YnV0ZVJlZ2lzdHJ5KCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpIHsgcmV0dXJuIEF0dHJpYnV0ZU93bmVyUHJv
eHk6OmlzS25vd25BdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7IH0KICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlckF0dHJpYnV0ZXMoKTsKKyAgICAKKyAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0g
U1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47CisgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdp
c3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlS
ZWdpc3RyeTsgfQogCiAgICAgY29uc3QgU1ZHQXR0cmlidXRlT3duZXJQcm94eSYgYXR0cmlidXRl
T3duZXJQcm94eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXR0cmlidXRlT3duZXJQcm94eTsg
fQogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYpIG92ZXJyaWRlOwpAQCAtMTMxLDkgKzEzMywxMCBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGJhc2VGcmVxdWVuY3lZSWRlbnRpZmllcigpOwog
CiAgICAgQXR0cmlidXRlT3duZXJQcm94eSBtX2F0dHJpYnV0ZU93bmVyUHJveHkgeyAqdGhpcyB9
OworICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBTVkdBbmltYXRlZE51bWJlckF0dHJpYnV0ZSBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIFNWR0Fu
aW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyQXR0cmlidXRlIG1fbnVtT2N0YXZlcyB7IDEgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRJ
bnRlZ2VyPiBtX251bU9jdGF2ZXMgeyBTVkdBbmltYXRlZEludGVnZXI6OmNyZWF0ZSh0aGlzLCAx
KSB9OwogICAgIFNWR0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fc2VlZDsKICAgICBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uQXR0cmlidXRlPFNWR1N0aXRjaE9wdGlvbnM+IG1fc3RpdGNoVGlsZXMg
eyBTVkdfU1RJVENIVFlQRV9OT1NUSVRDSCB9OwogICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25B
dHRyaWJ1dGU8VHVyYnVsZW5jZVR5cGU+IG1fdHlwZSB7IFR1cmJ1bGVuY2VUeXBlOjpUdXJidWxl
bmNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHJldmlzaW9u
IDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlci5oIgog
I2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
Z2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlZ2FjeUF0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlci5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKKyNpbmNsdWRlICJTVkdBbmltYXRlRWxlbWVudEJhc2UuaCIKKyNpbmNsdWRlICJTVkdBbmlt
YXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0b3JGYWN0b3J5LmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpT
VkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyKFNWR0FuaW1hdGlvbkVsZW1lbnQm
IGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQpCisgICAgOiBTVkdB
dHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZShhbmltYXRpb25FbGVtZW50LCB0YXJnZXRF
bGVtZW50KQorICAgICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShkZXRlcm1pbmVBbmltYXRlZFBy
b3BlcnR5VHlwZShhbmltYXRpb25FbGVtZW50LCB0YXJnZXRFbGVtZW50LCBhbmltYXRpb25FbGVt
ZW50LmF0dHJpYnV0ZU5hbWUoKSkpCit7Cit9CisKK1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yJiBT
VkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjphbmltYXRlZFR5cGVBbmltYXRv
cigpCit7CisgICAgaWYgKCFtX2FuaW1hdG9yKQorICAgICAgICBtX2FuaW1hdG9yID0gU1ZHQW5p
bWF0b3JGYWN0b3J5OjpjcmVhdGUoJm1fYW5pbWF0aW9uRWxlbWVudCwgJm1fdGFyZ2V0RWxlbWVu
dCwgbV9hbmltYXRlZFByb3BlcnR5VHlwZSk7CisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0
eVR5cGUgPT0gbV9hbmltYXRvci0+dHlwZSgpKTsKKyAgICByZXR1cm4gKm1fYW5pbWF0b3I7Cit9
CisKK2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBZGRpdGl2
ZSgpIGNvbnN0Cit7CisgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2FuaW1h
dGUuaHRtbCNBbmltYXRpb25BdHRyaWJ1dGVzQW5kUHJvcGVydGllcy4KKyAgICBzd2l0Y2ggKG1f
YW5pbWF0ZWRQcm9wZXJ0eVR5cGUpIHsKKyAgICBjYXNlIEFuaW1hdGVkQm9vbGVhbjoKKyAgICBj
YXNlIEFuaW1hdGVkRW51bWVyYXRpb246CisgICAgY2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0
UmF0aW86CisgICAgY2FzZSBBbmltYXRlZFN0cmluZzoKKyAgICBjYXNlIEFuaW1hdGVkVW5rbm93
bjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQW5pbWF0ZWRBbmdsZToKKyAgICBj
YXNlIEFuaW1hdGVkQ29sb3I6CisgICAgY2FzZSBBbmltYXRlZEludGVnZXI6CisgICAgY2FzZSBB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI6CisgICAgY2FzZSBBbmltYXRlZExlbmd0aDoK
KyAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoTGlzdDoKKyAgICBjYXNlIEFuaW1hdGVkTnVtYmVyOgor
ICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJMaXN0OgorICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJPcHRp
b25hbE51bWJlcjoKKyAgICBjYXNlIEFuaW1hdGVkUGF0aDoKKyAgICBjYXNlIEFuaW1hdGVkUG9p
bnRzOgorICAgIGNhc2UgQW5pbWF0ZWRSZWN0OgorICAgIGNhc2UgQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisK
K2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzVmFsaWRBdHRy
aWJ1dGVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5VHlwZSAh
PSBBbmltYXRlZFVua25vd247Cit9CisKK2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0
cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKK3sKKyAgICBtX2FuaW1hdGlvbkVsZW1lbnQu
ZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKKyAgICBh
bmltYXRlZFR5cGVBbmltYXRvcigpLmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhtX2Zyb21UeXBl
LCBtX3RvVHlwZSwgZnJvbVN0cmluZywgdG9TdHJpbmcpOworICAgIEFTU0VSVChtX2FuaW1hdGVk
UHJvcGVydHlUeXBlID09IG1fYW5pbWF0b3ItPnR5cGUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRl
RnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBi
eVN0cmluZykKK3sKKyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50LmFuaW1hdGlvbk1vZGUoKSA9
PSBBbmltYXRpb25Nb2RlOjpCeSAmJiAhaXNBZGRpdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBmcm9tLWJ5IGFuaW1hdGlvbiBtYXkgb25seSBiZSB1c2VkIHdpdGggYXR0
cmlidXRlcyB0aGF0IHN1cHBvcnQgYWRkaXRpb24gKGUuZy4gbW9zdCBudW1lcmljIGF0dHJpYnV0
ZXMpLgorICAgIGlmIChtX2FuaW1hdGlvbkVsZW1lbnQuYW5pbWF0aW9uTW9kZSgpID09IEFuaW1h
dGlvbk1vZGU6OkZyb21CeSAmJiAhaXNBZGRpdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX2FuaW1hdGlvbkVsZW1lbnQuZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGZy
b21TdHJpbmcsIGJ5U3RyaW5nKTsKKyAgICBhbmltYXRlZFR5cGVBbmltYXRvcigpLmNhbGN1bGF0
ZUZyb21BbmRCeVZhbHVlcyhtX2Zyb21UeXBlLCBtX3RvVHlwZSwgZnJvbVN0cmluZywgYnlTdHJp
bmcpOworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IG1fYW5pbWF0b3ItPnR5
cGUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBT
dHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQoreworICAgIGlmICh0b0F0RW5kT2ZEdXJh
dGlvblN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3RvQXRF
bmRPZkR1cmF0aW9uVHlwZSA9IGFuaW1hdGVkVHlwZUFuaW1hdG9yKCkuY29uc3RydWN0RnJvbVN0
cmluZyh0b0F0RW5kT2ZEdXJhdGlvblN0cmluZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNp
Zm5kZWYgTkRFQlVHCitzdGF0aWMgaW5saW5lIGJvb2wgcHJvcGVydHlUeXBlc0FyZUNvbnNpc3Rl
bnQoQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgZXhwZWN0ZWRQcm9wZXJ0eVR5cGUsIGNvbnN0IFNWR0Vs
ZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKK3sKKyAgICBmb3IgKGF1
dG8mIHR5cGUgOiBhbmltYXRlZFR5cGVzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkg
OiB0eXBlLnByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlw
ZSAhPSBwcm9wZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSkgeworICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIG9ubHkgYWxsb3dlZCBpbmNvbnNpc3RlbmN5LiBTVkdBbmltYXRlZEFu
Z2xlQW5pbWF0b3IgaGFuZGxlcyBib3RoIFNWR0FuaW1hdGVkQW5nbGUgJiBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uIGZvciBtYXJrZXJzIG9yaWVudCBhdHRyaWJ1dGUuCisgICAgICAgICAgICAgICAg
aWYgKGV4cGVjdGVkUHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYgcHJvcGVydHktPmFu
aW1hdGVkUHJvcGVydHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYKKwordm9pZCBTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpyZXNldEFu
aW1hdGVkVHlwZSgpCit7CisgICAgU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3ImIGFuaW1hdG9yID0g
YW5pbWF0ZWRUeXBlQW5pbWF0b3IoKTsKKyAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlw
ZSA9PSBhbmltYXRvci50eXBlKCkpOworCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSA9IG1fYW5pbWF0aW9uRWxlbWVudC5hdHRyaWJ1dGVOYW1lKCk7CisgICAgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6U2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBtX2FuaW1h
dGlvbkVsZW1lbnQuc2hvdWxkQXBwbHlBbmltYXRpb24oJm1fdGFyZ2V0RWxlbWVudCwgYXR0cmli
dXRlTmFtZSk7CisKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6
RG9udEFwcGx5QW5pbWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2hvdWxkQXBw
bHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXBwbHlYTUxBbmltYXRpb24gfHwgc2hvdWxkQXBw
bHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXBwbHlYTUxhbmRDU1NBbmltYXRpb24pIHsKKyAg
ICAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCisgICAgICAgIG1f
YW5pbWF0ZWRQcm9wZXJ0aWVzID0gYW5pbWF0b3IuZmluZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0
dHJpYnV0ZU5hbWUobV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgaWYg
KG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBBU1NFUlQocHJvcGVydHlUeXBlc0FyZUNvbnNpc3RlbnQobV9hbmltYXRlZFByb3Bl
cnR5VHlwZSwgbV9hbmltYXRlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGVk
VHlwZSkKKyAgICAgICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gYW5pbWF0b3Iuc3RhcnRBbmltVmFs
QW5pbWF0aW9uKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBhbmltYXRvci5yZXNldEFuaW1WYWxUb0Jhc2VWYWwobV9hbmltYXRlZFByb3BlcnRpZXMs
ICptX2FuaW1hdGVkVHlwZSk7CisgICAgICAgICAgICBhbmltYXRvci5hbmltVmFsRGlkQ2hhbmdl
KG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gQ1NTIHByb3BlcnRpZXMgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICBBU1NF
UlQobV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKTsKKyAgICBTdHJpbmcgYmFzZVZhbHVl
OworCisgICAgaWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFwcGx5Q1NT
QW5pbWF0aW9uKSB7CisgICAgICAgIEFTU0VSVChTVkdBbmltYXRpb25FbGVtZW50Ojppc1Rhcmdl
dEF0dHJpYnV0ZUNTU1Byb3BlcnR5KCZtX3RhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKTsK
KyAgICAgICAgbV9hbmltYXRpb25FbGVtZW50LmNvbXB1dGVDU1NQcm9wZXJ0eVZhbHVlKCZtX3Rh
cmdldEVsZW1lbnQsIGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSksIGJh
c2VWYWx1ZSk7CisgICAgfQorCisgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKKyAgICAgICAgbV9h
bmltYXRlZFR5cGUgPSBhbmltYXRvci5jb25zdHJ1Y3RGcm9tU3RyaW5nKGJhc2VWYWx1ZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2FuaW1hdGVkVHlwZS0+c2V0VmFsdWVBc1N0cmluZyhhdHRyaWJ1
dGVOYW1lLCBiYXNlVmFsdWUpOworfQorCit2b2lkIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5z
aWduZWQgcmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KQoreworICAg
IEFTU0VSVChyZXN1bHRFbGVtZW50KTsKKworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUgPSBtX2FuaW1hdGlvbkVsZW1lbnQuYXR0cmlidXRlTmFtZSgpOworICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OlNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gbV9hbmlt
YXRpb25FbGVtZW50LnNob3VsZEFwcGx5QW5pbWF0aW9uKCZtX3RhcmdldEVsZW1lbnQsIGF0dHJp
YnV0ZU5hbWUpOworICAgIAorICAgIGlmIChzaG91bGRBcHBseSA9PSBTVkdBbmltYXRpb25FbGVt
ZW50OjpEb250QXBwbHlBbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X2FuaW1hdGVkUHJvcGVydHlUeXBlID09IGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKG1f
YW5pbWF0aW9uRWxlbWVudCwgbV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKSk7CisKKyAg
ICBBU1NFUlQocGVyY2VudGFnZSA+PSAwICYmIHBlcmNlbnRhZ2UgPD0gMSk7CisgICAgQVNTRVJU
KG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0IHx8IG1fYW5p
bWF0aW9uRWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlVHJhbnNmb3JtVGFnKSk7
CisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duKTsK
KyAgICBBU1NFUlQobV9hbmltYXRvcik7CisgICAgQVNTRVJUKG1fYW5pbWF0b3ItPnR5cGUoKSA9
PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKKyAgICBBU1NFUlQobV9mcm9tVHlwZSk7CisgICAg
QVNTRVJUKG1fZnJvbVR5cGUtPnR5cGUoKSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKKyAg
ICBBU1NFUlQobV90b1R5cGUpOworCisgICAgaWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OkFwcGx5WE1MQW5pbWF0aW9uIHx8IHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OkFwcGx5WE1MYW5kQ1NTQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIFNWRyBET00g
YW5pbVZhbCBhbmltYXRpb24gY29kZS1wYXRoLgorICAgICAgICBpZiAobV9hbmltYXRvci0+Zmlu
ZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUobV90YXJnZXRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlJiByZXN1bHRBbmltYXRpb25FbGVtZW50ID0gZG93bmNhc3Q8
U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlPigqcmVzdWx0RWxlbWVudCk7CisgICAgU1ZHTGVnYWN5QXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlciYgcmVzdWx0QW5pbWF0aW9uQ29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXImPihyZXN1bHRB
bmltYXRpb25FbGVtZW50LmFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgCisgICAgQVNTRVJU
KHJlc3VsdEFuaW1hdGlvbkNvbnRyb2xsZXIubV9hbmltYXRlZFR5cGUpOworICAgIEFTU0VSVChy
ZXN1bHRBbmltYXRpb25Db250cm9sbGVyLm1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gbV9hbmlt
YXRlZFByb3BlcnR5VHlwZSk7CisKKyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50Lmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnNldFRhZykpCisgICAgICAgIHBlcmNlbnRhZ2UgPSAxOworCisgICAgaWYg
KG1fYW5pbWF0aW9uRWxlbWVudC5jYWxjTW9kZSgpID09IENhbGNNb2RlOjpEaXNjcmV0ZSkKKyAg
ICAgICAgcGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UgPCAwLjUgPyAwIDogMTsKKworICAgIC8vIFRh
cmdldCBlbGVtZW50IG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAgICBtX2FuaW1hdG9yLT5zZXRDb250
ZXh0RWxlbWVudCgmbV90YXJnZXRFbGVtZW50KTsKKworICAgIC8vIEJlIHN1cmUgdG8gZGV0YWNo
IGxpc3Qgd3JhcHBlcnMgYmVmb3JlIHdlIG1vZGZpeSB0aGVpciB1bmRlcmx5aW5nIHZhbHVlLiBJ
ZiB3ZSdkIGRvCisgICAgLy8gaWYgYWZ0ZXIgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIHJhbiB0
aGUgY2FjaGVkIHBvaW50ZXJzIGluIHRoZSBsaXN0IHByb3BlcnkgdGVhcgorICAgIC8vIG9mZnMg
d291bGQgcG9pbnQgbm93aGVyZSwgYW5kIHdlIGNvdWxkbid0IGNyZWF0ZSBjb3BpZXMgb2YgdGhv
c2UgdmFsdWVzIGFueW1vcmUsCisgICAgLy8gd2hpbGUgZGV0YWNoaW5nLiBUaGlzIGlzIGNvdmVy
ZWQgYnkgYXNzZXJ0aW9ucywgbW92aW5nIHRoaXMgZG93biB3b3VsZCBmaXJlIHRoZW0uCisgICAg
aWYgKCFtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIG1fYW5pbWF0b3It
PmFuaW1WYWxXaWxsQ2hhbmdlKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFZhbHVl
cy1hbmltYXRpb24gYWNjdW11bGF0ZXMgdXNpbmcgdGhlIGxhc3QgdmFsdWVzIGVudHJ5IGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGVuZCBvZiBkdXJhdGlvbiB0aW1lLgorICAgIFNWR0FuaW1hdGVkVHlw
ZSogdG9BdEVuZE9mRHVyYXRpb25UeXBlID0gbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUgPyBtX3Rv
QXRFbmRPZkR1cmF0aW9uVHlwZS5nZXQoKSA6IG1fdG9UeXBlLmdldCgpOworICAgIG1fYW5pbWF0
b3ItPmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUocGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIG1fZnJv
bVR5cGUuZ2V0KCksIG1fdG9UeXBlLmdldCgpLCB0b0F0RW5kT2ZEdXJhdGlvblR5cGUsIHJlc3Vs
dEFuaW1hdGlvbkNvbnRyb2xsZXIubV9hbmltYXRlZFR5cGUuZ2V0KCkpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0KFNWR0VsZW1lbnQmIHRhcmdldEVs
ZW1lbnQsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgQVNT
RVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7CisKKyAgICBpZiAoIXRhcmdl
dEVsZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkuc2V0UHJvcGVydHko
aWQsIHZhbHVlLCBmYWxzZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHRhcmdldEVsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9w
ZXJ0eUZyb21UYXJnZXQoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBp
ZCkKK3sKKyAgICBBU1NFUlQoIXRhcmdldEVsZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAg
ICB0YXJnZXRFbGVtZW50LmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLnJlbW92
ZVByb3BlcnR5KGlkKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2Vz
KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZykKK3sKKyAgICAvLyBGSVhNRTogRG8g
d2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBpc0Nvbm5lY3RlZCBhbmQgIXBhcmVudE5vZGU/
CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5p
c0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ1NTUHJvcGVydHlJRCBpZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFt
ZS5sb2NhbE5hbWUoKSk7CisKKyAgICBTVkdFbGVtZW50OjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIg
YmxvY2tlcih0YXJnZXRFbGVtZW50KTsKKyAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQodGFy
Z2V0RWxlbWVudCwgaWQsIHZhbHVlQXNTdHJpbmcpOworCisgICAgLy8gSWYgdGhlIHRhcmdldCBl
bGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJpbmcg
dGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KKyAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDog
dGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKKyAgICAgICAgYXBwbHlDU1NQcm9wZXJ0eVRvVGFy
Z2V0KCppbnN0YW5jZSwgaWQsIHZhbHVlQXNTdHJpbmcpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRh
cmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAg
Ly8gRklYTUU6IERvIHdlIHJlYWxseSBuZWVkIHRvIGNoZWNrIGJvdGggaXNDb25uZWN0ZWQgYW5k
ICFwYXJlbnROb2RlPworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwgIXRh
cmdldEVsZW1lbnQuaXNDb25uZWN0ZWQoKSB8fCAhdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIENTU1Byb3BlcnR5SUQgaWQgPSBjc3NQcm9wZXJ0eUlE
KGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpOworCisgICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VV
cGRhdGVCbG9ja2VyIGJsb2NrZXIodGFyZ2V0RWxlbWVudCk7CisgICAgcmVtb3ZlQ1NTUHJvcGVy
dHlGcm9tVGFyZ2V0KHRhcmdldEVsZW1lbnQsIGlkKTsKKworICAgIC8vIElmIHRoZSB0YXJnZXQg
ZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5n
IHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6
IHRhcmdldEVsZW1lbnQuaW5zdGFuY2VzKCkpCisgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJv
bVRhcmdldCgqaW5zdGFuY2UsIGlkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRh
cmdldEFib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQoreworICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVu
dC5tX2RlbGV0aW9uSGFzQmVndW4pOworICAgIHRhcmdldEVsZW1lbnQuc3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyaWJ1dGVOYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdl
dEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQoreworICAgIGlmIChhdHRyaWJ1
dGVOYW1lID09IGFueVFOYW1lKCkgfHwgIXRhcmdldEVsZW1lbnQuaXNDb25uZWN0ZWQoKSB8fCAh
dGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR0Vs
ZW1lbnQ6Okluc3RhbmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKHRhcmdldEVsZW1lbnQpOworICAg
IG5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lKTsKKworICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRh
dGUgdGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVp
bHQuCisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRhcmdldEVsZW1lbnQuaW5zdGFuY2VzKCkp
CisgICAgICAgIG5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSgqaW5zdGFuY2UsIGF0dHJp
YnV0ZU5hbWUpOworfQorCit2b2lkIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQobV9hbmltYXRlZFByb3Bl
cnR5VHlwZSAhPSBBbmltYXRlZFRyYW5zZm9ybUxpc3QgfHwgbV9hbmltYXRpb25FbGVtZW50Lmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKTsKKyAgICBBU1NFUlQobV9h
bmltYXRlZFByb3BlcnR5VHlwZSAhPSBBbmltYXRlZFVua25vd24pOworICAgIEFTU0VSVChtX2Fu
aW1hdG9yKTsKKworICAgIC8vIEVhcmx5IGV4aXQgaWYgb3VyIGFuaW1hdGVkIHR5cGUgZ290IGRl
c3Ryb3llZCBieSBhIHByZXZpb3VzIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKS4KKyAgICBpZiAoIW1f
YW5pbWF0ZWRUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lID0gbV9hbmltYXRpb25FbGVtZW50LmF0dHJpYnV0ZU5hbWUoKTsKKwor
ICAgIGlmIChtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQ1NT
IHByb3BlcnRpZXMgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICAgICAgLy8gQ29udmVydCB0aGUg
cmVzdWx0IG9mIHRoZSBhbmltYXRpb24gdG8gYSBTdHJpbmcgYW5kIGFwcGx5IGl0IGFzIENTUyBw
cm9wZXJ0eSBvbiB0aGUgdGFyZ2V0ICYgYWxsIGluc3RhbmNlcy4KKyAgICAgICAgYXBwbHlDU1NQ
cm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKG1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSwgbV9hbmltYXRlZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBXZSBkbyB1cGRhdGUgdGhlIHN0eWxlIGFuZCB0aGUgYW5pbWF0aW9uIHBy
b3BlcnR5IGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuCisgICAgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6U2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBtX2FuaW1hdGlvbkVsZW1lbnQu
c2hvdWxkQXBwbHlBbmltYXRpb24oJm1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7Cisg
ICAgaWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFwcGx5WE1MYW5kQ1NT
QW5pbWF0aW9uKQorICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMo
bV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0
cmluZygpKTsKKworICAgIC8vIFNWRyBET00gYW5pbVZhbCBhbmltYXRpb24gY29kZS1wYXRoLgor
ICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIFNWRyBET00gdmFsdWVzIGFyZSBhbHJlYWR5IGNoYW5n
ZWQsIHVubGlrZSBmb3IgQ1NTLgorICAgIC8vIFdlIG9ubHkgaGF2ZSB0byB0cmlnZ2VyIHVwZGF0
ZSBub3RpZmljYXRpb25zIGhlcmUuCisgICAgbV9hbmltYXRvci0+YW5pbVZhbERpZENoYW5nZSht
X2FuaW1hdGVkUHJvcGVydGllcyk7CisgICAgbm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRB
bmltVmFsQ2hhbmdlKG1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7Cit9CisKK3ZvaWQg
U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2xlYXJBbmltYXRlZFR5cGUo
U1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0ZWRUeXBlKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgU1ZHQW5pbWF0ZWRUeXBlIGlzIGEgbGlz
dCB0eXBlLCBlLmcuIFNWR0xlbmd0aExpc3RWYWx1ZXMsIHRoZSB3cmFwcGVycyBvZiB0aGUKKyAg
ICAvLyBhbmltYXRlZCBwcm9wZXJ0aWVzIGhhdmUgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgaXRl
bXMgaW4gdGhlIGxpc3QgYmVmb3JlIGl0J3MgZGVsZXRlZC4KKyAgICBpZiAoIW1fYW5pbWF0ZWRQ
cm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hbmltYXRvci0+YW5pbVZhbFdpbGxDaGFu
Z2UobV9hbmltYXRlZFByb3BlcnRpZXMpOworCisgICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7Cisg
ICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBtX2FuaW1hdGlvbkVs
ZW1lbnQuYXR0cmlidXRlTmFtZSgpOworCisgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRo
LgorICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdl
dEVsZW1lbnQsIG1fYW5pbWF0aW9uRWxlbWVudC5hdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICBt
X2FuaW1hdGVkVHlwZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
VkdBbmltYXRpb25FbGVtZW50OjpTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IG1f
YW5pbWF0aW9uRWxlbWVudC5zaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6
QXBwbHlYTUxhbmRDU1NBbmltYXRpb24pCisgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRh
cmdldEFuZEluc3RhbmNlcygqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisKKyAgICAv
LyBTVkcgRE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICBpZiAobV9hbmltYXRv
cikgeworICAgICAgICBtX2FuaW1hdG9yLT5zdG9wQW5pbVZhbEFuaW1hdGlvbihtX2FuaW1hdGVk
UHJvcGVydGllcyk7CisgICAgICAgIG5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5pbVZh
bENoYW5nZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisgICAgfQorCisgICAgbV9h
bmltYXRlZFByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBtX2FuaW1hdGVkVHlwZSA9IG51bGxwdHI7
Cit9CisKK2Zsb2F0IFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1
bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0
cmluZykKK3sKKyAgICByZXR1cm4gYW5pbWF0ZWRUeXBlQW5pbWF0b3IoKS5jYWxjdWxhdGVEaXN0
YW5jZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZWdhY3lBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUeXBlLmgiCisjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRUeXBlQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTVkdBdHRyaWJ1dGVBbmltYXRpb25D
b250cm9sbGVyQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0FuaW1h
dGlvbkVsZW1lbnQ7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZHU01JTEVsZW1lbnQ7CisK
K2NsYXNzIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgU1ZH
QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UgeworcHVibGljOgorICAgIFNWR0xlZ2Fj
eUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCYsIFNWR0Vs
ZW1lbnQmKTsKKworcHJpdmF0ZToKKyAgICBTVkdBbmltYXRlZFR5cGVBbmltYXRvciYgYW5pbWF0
ZWRUeXBlQW5pbWF0b3IoKTsKKworICAgIHZvaWQgcmVzZXRBbmltYXRlZFR5cGUoKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQp
IG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKSBvdmVycmlkZTsKKyAgICBib29sIGNhbGN1bGF0ZVRv
QXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmlu
Zykgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVy
Y2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVt
ZW50KSBvdmVycmlkZTsKKworICAgIHZvaWQgYXBwbHlSZXN1bHRzVG9UYXJnZXQoKSBvdmVycmlk
ZTsKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcs
IGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgaXNBZGRp
dGl2ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBjb25zdCBBbmltYXRlZFByb3BlcnR5VHlwZSBtX2FuaW1h
dGVkUHJvcGVydHlUeXBlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4g
bV9mcm9tVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvQXRFbmRPZkR1cmF0
aW9uVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX2FuaW1hdGVk
VHlwZTsKKworICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCBtX2FuaW1hdGVkUHJv
cGVydGllczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I+IG1f
YW5pbWF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjQy
OTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojpy
ZW1vdmVkRnJvbUFuY2VzdG9yCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rvcihy
ZW1vdmFsVHlwZSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKLWJvb2wgU1ZHU01JTEVs
ZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCitib29sIFNWR1NNSUxFbGVtZW50OjpoYXNW
YWxpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lKCkg
IT0gYW55UU5hbWUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEs
OCBAQCBwdWJsaWM6CiAgICAgSW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgaW5zZXJ0ZWRJbnRv
QW5jZXN0b3IoSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJy
aWRlOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpOworICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25BdHRyaWJ1dGVDaGFuZ2VkKCkgPSAwOwogCiAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVD
b250YWluZXIoKSB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
aW1pdGl2ZVByb3BlcnR5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5
LmgiCisjaW5jbHVkZSAiU1ZHUHJvcGVydHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBQcm9wZXJ0eVR5cGU+CitjbGFzcyBTVkdBbmltYXRlZFByaW1pdGl2
ZVByb3BlcnR5IDogcHVibGljIFNWR0FuaW1hdGVkUHJvcGVydHkgeworcHVibGljOgorICAgIHVz
aW5nIFZhbHVlVHlwZSA9IFByb3BlcnR5VHlwZTsKKworICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0
ZWRQcmltaXRpdmVQcm9wZXJ0eT4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQ
cm9wZXJ0eShjb250ZXh0RWxlbWVudCkpOworICAgIH0KKworICAgIHN0YXRpYyBSZWY8U1ZHQW5p
bWF0ZWRQcmltaXRpdmVQcm9wZXJ0eT4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
LCBjb25zdCBQcm9wZXJ0eVR5cGUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgdmFs
dWUpKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5IHRoZSBET00uCisgICAgRXhjZXB0aW9uT3I8
dm9pZD4gc2V0QmFzZVZhbChjb25zdCBQcm9wZXJ0eVR5cGUmIGJhc2VWYWwpCisgICAgeworICAg
ICAgICBtX2Jhc2VWYWwgPSBiYXNlVmFsOworICAgICAgICBjb21taXRQcm9wZXJ0eUNoYW5nZSgp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIC8vIFVzZWQgYnkgU1ZHRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoKS4KKyAgICB2b2lkIHNldEJhc2VWYWxJbnRlcm5hbChjb25zdCBQ
cm9wZXJ0eVR5cGUmIGJhc2VWYWwpIHsgbV9iYXNlVmFsID0gYmFzZVZhbDsgfQorICAgIGNvbnN0
IFByb3BlcnR5VHlwZSYgYmFzZVZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVZhbDsgfQorCisg
ICAgLy8gVXNlZCBieSBTVkdBdHRyaWJ1dGVBbmltYXRvcjo6cHJvZ3Jlc3MuCisgICAgdm9pZCBz
ZXRBbmltVmFsKGNvbnN0IFByb3BlcnR5VHlwZSYgYW5pbVZhbCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0FuaW1hdGluZygpKTsKKyAgICAgICAgbV9hbmltVmFsID0gYW5pbVZhbDsKKyAgICB9
CisKKyAgICBjb25zdCBQcm9wZXJ0eVR5cGUmIGFuaW1WYWwoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX0lNUExJRVMoaXNBbmltYXRpbmcoKSwgbV9hbmltVmFsKTsKKyAgICAgICAgcmV0
dXJuIGlzQW5pbWF0aW5nKCkgPyAqbV9hbmltVmFsIDogbV9iYXNlVmFsOworICAgIH0KKworICAg
IFByb3BlcnR5VHlwZSYgYW5pbVZhbCgpCisgICAgeworICAgICAgICBBU1NFUlRfSU1QTElFUyhp
c0FuaW1hdGluZygpLCBtX2FuaW1WYWwpOworICAgICAgICByZXR1cm4gaXNBbmltYXRpbmcoKSA/
ICptX2FuaW1WYWwgOiBtX2Jhc2VWYWw7CisgICAgfQorCisgICAgLy8gVXNlZCB3aGVuIGNvbW1p
dHRpbmcgYSBjaGFuZ2UgZnJvbSB0aGUgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSB0byB0aGUgYXR0cmli
dXRlLgorICAgIFN0cmluZyBiYXNlVmFsQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBTVkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+Ojp0b1N0cmluZyhtX2Jhc2VWYWwpOyB9
CisKKyAgICAvLyBVc2VkIHRvIGFwcGx5IHRoZSBTVkdBdHRyaWJ1dGVBbmltYXRvciBjaGFuZ2Ug
dG8gdGhlIHRhcmdldCBlbGVtZW50LgorICAgIFN0cmluZyBhbmltVmFsQXNTdHJpbmcoKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkgJiYgISFtX2Fu
aW1WYWwpOworICAgICAgICByZXR1cm4gU1ZHUHJvcGVydHlUcmFpdHM8UHJvcGVydHlUeXBlPjo6
dG9TdHJpbmcoKm1fYW5pbVZhbCk7CisgICAgfQorCisgICAgLy8gTWFuYWdpbmcgdGhlIHJlbGF0
aW9uc2hpcCB3aXRoIHRoZSBvd25lci4KKyAgICB2b2lkIHNldERpcnR5KCkgb3ZlcnJpZGUgeyBt
X3N0YXRlID0gU1ZHUHJvcGVydHlTdGF0ZTo6RGlydHk7IH0KKyAgICBib29sIGlzRGlydHkoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFNWR1Byb3BlcnR5U3RhdGU6OkRpcnR5
OyB9CisgICAgT3B0aW9uYWw8U3RyaW5nPiBzeW5jaHJvbml6ZSgpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAobV9zdGF0ZSA9PSBTVkdQcm9wZXJ0eVN0YXRlOjpDbGVhbikKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIG1fc3RhdGUgPSBTVkdQcm9wZXJ0eVN0
YXRlOjpDbGVhbjsKKyAgICAgICAgcmV0dXJuIGJhc2VWYWxBc1N0cmluZygpOworICAgIH0KKwor
ICAgIC8vIFVzZWQgYnkgUmVuZGVyU1ZHRWxlbWVudHMgYW5kIER1bXBSZW5kZXJUcmVlLgorICAg
IGNvbnN0IFByb3BlcnR5VHlwZSYgY3VycmVudFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVF9JTVBMSUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbCk7CisgICAgICAgIHJldHVy
biBpc0FuaW1hdGluZygpID8gKm1fYW5pbVZhbCA6IG1fYmFzZVZhbDsKKyAgICB9CisKKyAgICAv
LyBDb250cm9sbGluZyB0aGUgYW5pbWF0aW9uLgorICAgIHZvaWQgc3RhcnRBbmltYXRpb24oKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGlzQW5pbWF0aW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fYW5pbVZhbCA9IG1fYmFzZVZhbDsKKyAgICAgICAgU1ZHQW5pbWF0
ZWRQcm9wZXJ0eTo6c3RhcnRBbmltYXRpb24oKTsKKyAgICB9CisgICAgdm9pZCBzdG9wQW5pbWF0
aW9uKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghaXNBbmltYXRpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9hbmltVmFsID0gV1RGOjpudWxsb3B0OworICAgICAg
ICBTVkdBbmltYXRlZFByb3BlcnR5OjpzdG9wQW5pbWF0aW9uKCk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eShTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCkKKyAgICAgICAgOiBTVkdBbmltYXRlZFByb3BlcnR5KGNvbnRleHRFbGVtZW50KQor
ICAgICAgICAsIG1fYmFzZVZhbChTVkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+Ojppbml0
aWFsVmFsdWUoKSkKKyAgICB7CisgICAgfQorCisgICAgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9w
ZXJ0eShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUHJvcGVydHlUeXBlJiB2YWx1
ZSkKKyAgICAgICAgOiBTVkdBbmltYXRlZFByb3BlcnR5KGNvbnRleHRFbGVtZW50KQorICAgICAg
ICAsIG1fYmFzZVZhbCh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlIG1f
YmFzZVZhbDsKKyAgICBtdXRhYmxlIE9wdGlvbmFsPFByb3BlcnR5VHlwZT4gbV9hbmltVmFsOwor
ICAgIFNWR1Byb3BlcnR5U3RhdGUgbV9zdGF0ZSB7IFNWR1Byb3BlcnR5U3RhdGU6OkNsZWFuIH07
Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJv
cGVydHkuaCIKKworI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTVkdQcm9wZXJ0eU93bmVyKiBTVkdBbmltYXRlZFByb3BlcnR5Ojpvd25lcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY29udGV4dEVsZW1lbnQ7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eTo6Y29tbWl0UHJvcGVydHlDaGFuZ2UoKQoreworICAgIGlmICghbV9jb250ZXh0RWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dEVsZW1lbnQtPmNvbW1pdFByb3Bl
cnR5Q2hhbmdlKCp0aGlzKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHUHJvcGVy
dHlPd25lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0FuaW1hdGVkUHJv
cGVydHkgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdBbmltYXRlZFByb3BlcnR5PiwgcHVibGljIFNW
R1Byb3BlcnR5T3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkUHJvcGVy
dHkoKSA9IGRlZmF1bHQ7CisgICAgCisgICAgLy8gTWFuYWdlIHRoZSByZWxhdGlvbnNoaXAgd2l0
aCB0aGUgb3duZXIuCisgICAgYm9vbCBpc0F0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0RWxlbWVudDsgfQorICAgIHZvaWQgZGV0YWNoKCkgeyBtX2NvbnRleHRFbGVtZW50ID0gbnVs
bHB0cjsgfQorICAgIFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0RWxlbWVudDsgfQorICAgIAorICAgIHZpcnR1YWwgU3RyaW5nIGJhc2VWYWxBc1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFN0cmlu
ZyBhbmltVmFsQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisgICAg
CisgICAgLy8gQ29udHJvbCB0aGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGF0dHJpYnV0
ZSBhbmQgaXRzIHJlZmxlY3Rpb24gaW4gYmFzZVZhbC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldERpcnR5KCkg
eyB9CisgICAgdmlydHVhbCBPcHRpb25hbDxTdHJpbmc+IHN5bmNocm9uaXplKCkgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgCisgICAgLy8gQ29udHJvbCB0aGUgYW5pbWF0aW9uIGxpZmUg
Y3ljbGUuCisgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbmltYXRp
bmc7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb24oKSB7IG1faXNBbmltYXRpbmcg
PSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3BBbmltYXRpb24oKSB7IG1faXNBbmltYXRp
bmcgPSBmYWxzZTsgfQorICAgIAorICAgIC8vIEF0dGFjaC9EZXRhY2ggdGhlIGFuaW1WYWwgb2Yg
dGhlIHRyYWdldCBlbGVtZW50J3MgcHJvcGVydHkgYnkgdGhlIGluc3RhbmNlIGVsZW1lbnQncyBw
cm9wZXJ0eS4KKyAgICB2aXJ0dWFsIHZvaWQgaW5zdGFuY2VTdGFydEFuaW1hdGlvbihTVkdBbmlt
YXRlZFByb3BlcnR5JikgeyBtX2lzQW5pbWF0aW5nID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBpbnN0YW5jZVN0b3BBbmltYXRpb24oKSB7IG1faXNBbmltYXRpbmcgPSBmYWxzZTsgfQorICAg
IAorcHJvdGVjdGVkOgorICAgIFNWR0FuaW1hdGVkUHJvcGVydHkoU1ZHRWxlbWVudCogY29udGV4
dEVsZW1lbnQpCisgICAgICAgIDogbV9jb250ZXh0RWxlbWVudChjb250ZXh0RWxlbWVudCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFNWR1Byb3BlcnR5T3duZXIqIG93bmVyKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBjb21taXRQcm9wZXJ0eUNoYW5nZSgpIG92ZXJyaWRlOworICAgIAor
ICAgIFNWR0VsZW1lbnQqIG1fY29udGV4dEVsZW1lbnQgeyBudWxscHRyIH07CisgICAgYm9vbCBt
X2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFj
Y2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHTWVtYmVyQWNj
ZXNzb3JQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
d25lclR5cGUsIHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVydHlUeXBlPgorY2xhc3MgU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUFjY2Vzc29yIDogcHVibGljIFNWR01lbWJlckFjY2Vzc29yUHRyPE93bmVyVHlw
ZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGU+IHsKKyAgICB1c2luZyBCYXNlID0gU1ZHTWVtYmVyQWNj
ZXNzb3JQdHI8T3duZXJUeXBlLCBBbmltYXRlZFByb3BlcnR5VHlwZT47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworICAgIHVzaW5nIEJhc2U6OnNpbmdsZXRvbjsKKyAgICB1c2lu
ZyBCYXNlOjpwcm9wZXJ0eTsKKyAgICB1c2luZyBBbmltYXRlZFByb3BlcnR5ID0gQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGU7CisKKyAgICBib29sIG1hdGNoZXMoY29uc3QgT3duZXJUeXBlJiBvd25lciwg
Y29uc3QgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSYgYW5pbWF0ZWRQcm9wZXJ0eSkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eShvd25lcikucHRyKCkgPT0gJmFuaW1h
dGVkUHJvcGVydHk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgaXNBbmltYXRlZFByb3Bl
cnR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29ySW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHlBY2Nlc3NvckltcGwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3JJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUFjY2Vzc29yLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1h
dG9ySW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgiCisjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPd25lclR5cGU+CitjbGFzcyBTVkdBbmltYXRlZEludGVnZXJBY2Nlc3NvciBmaW5hbCA6IHB1
YmxpYyBTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3I8T3duZXJUeXBlLCBTVkdBbmltYXRlZElu
dGVnZXI+IHsKKyAgICB1c2luZyBCYXNlID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yPE93
bmVyVHlwZSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6
OkJhc2U7CisgICAgdXNpbmcgQmFzZTo6cHJvcGVydHk7CisgICAgdGVtcGxhdGU8UmVmPFNWR0Fu
aW1hdGVkSW50ZWdlcj4gT3duZXJUeXBlOjoqcHJvcGVydHk+CisgICAgY29uc3RleHByIHN0YXRp
YyBjb25zdCBTVkdNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGU+JiBzaW5nbGV0b24oKSB7IHJldHVy
biBCYXNlOjp0ZW1wbGF0ZSBzaW5nbGV0b248U1ZHQW5pbWF0ZWRJbnRlZ2VyQWNjZXNzb3IsIHBy
b3BlcnR5PigpOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0F0dHJpYnV0
ZUFuaW1hdG9yPiBjcmVhdGVBbmltYXRvcihPd25lclR5cGUmIG93bmVyLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNN
b2RlIGNhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6
Y3JlYXRlKGF0dHJpYnV0ZU5hbWUsIHByb3BlcnR5KG93bmVyKSwgYW5pbWF0aW9uTW9kZSwgY2Fs
Y01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpOworICAgIH0KKworICAgIHZvaWQgYXBw
ZW5kQW5pbWF0ZWRJbnN0YW5jZShPd25lclR5cGUmIG93bmVyLCBTVkdBdHRyaWJ1dGVBbmltYXRv
ciYgYW5pbWF0b3IpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxTVkdB
bmltYXRlZEludGVnZXJBbmltYXRvciY+KGFuaW1hdG9yKS5hcHBlbmRBbmltYXRlZEluc3RhbmNl
KHByb3BlcnR5KG93bmVyKSk7CisgICAgfQorfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1h
dG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZUFuaW1hdG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRWxlbWVudDsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QW5pbWF0ZWRQcm9wZXJ0eSwgdHlwZW5hbWUgQW5pbWF0aW9uRnVuY3Rpb24+CitjbGFzcyBTVkdB
bmltYXRlZFByb3BlcnR5QW5pbWF0b3IgOiBwdWJsaWMgU1ZHQXR0cmlidXRlQW5pbWF0b3Igewor
cHVibGljOgorICAgIHVzaW5nIEFuaW1hdG9yQW5pbWF0ZWRQcm9wZXJ0eSA9IEFuaW1hdGVkUHJv
cGVydHk7CisKKyAgICB2b2lkIGFwcGVuZEFuaW1hdGVkSW5zdGFuY2UoUmVmPEFuaW1hdGVkUHJv
cGVydHk+JiBhbmltYXRlZCkKKyAgICB7CisgICAgICAgIG1fYW5pbWF0ZWRJbnN0YW5jZXMuYXBw
ZW5kKGFuaW1hdGVkLmNvcHlSZWYoKSk7CisgICAgfQorCisgICAgYm9vbCBpc0Rpc2NyZXRlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mdW5jdGlvbi5pc0Rpc2NyZXRlKCk7IH0KKworICAg
IHZvaWQgc2V0RnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0
IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG1fZnVuY3Rpb24uc2V0RnJvbUFuZFRvVmFsdWVzKHRhcmdldEVsZW1lbnQsIGZyb20sIHRvKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldEZyb21BbmRCeVZhbHVlcyhTVkdFbGVtZW50KiB0YXJnZXRF
bGVtZW50LCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgYnkpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2Z1bmN0aW9uLnNldEZyb21BbmRCeVZhbHVlcyh0YXJnZXRFbGVtZW50
LCBmcm9tLCBieSk7CisgICAgfQorCisgICAgdm9pZCBzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVl
KGNvbnN0IFN0cmluZyYgdG9BdEVuZE9mRHVyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX2Z1bmN0aW9uLnNldFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUodG9BdEVuZE9mRHVyYXRpb24p
OworICAgIH0KKworICAgIHZvaWQgc3RhcnQoU1ZHRWxlbWVudCopIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBtX2FuaW1hdGVkLT5zdGFydEFuaW1hdGlvbigpOworICAgICAgICBmb3IgKGF1dG8m
IGluc3RhbmNlIDogbV9hbmltYXRlZEluc3RhbmNlcykKKyAgICAgICAgICAgIGluc3RhbmNlLT5p
bnN0YW5jZVN0YXJ0QW5pbWF0aW9uKG1fYW5pbWF0ZWQpOworICAgIH0KKworICAgIHZvaWQgYXBw
bHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGFw
cGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZSh0YXJnZXRFbGVtZW50KTsKKyAgICB9CisKKyAgICB2
b2lkIHN0b3AoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmICghbV9hbmltYXRlZC0+aXNBbmltYXRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX2FuaW1hdGVkLT5zdG9wQW5pbWF0aW9uKCk7CisgICAgICAgIGZvciAoYXV0
byYgaW5zdGFuY2UgOiBtX2FuaW1hdGVkSW5zdGFuY2VzKQorICAgICAgICAgICAgaW5zdGFuY2Ut
Pmluc3RhbmNlU3RvcEFuaW1hdGlvbigpOworCisgICAgICAgIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0
eUNoYW5nZSh0YXJnZXRFbGVtZW50KTsKKyAgICB9CisKKyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0
YW5jZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0
IFN0cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9mdW5j
dGlvbi5jYWxjdWxhdGVEaXN0YW5jZSh0YXJnZXRFbGVtZW50LCBmcm9tLCB0byk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFNW
R0FuaW1hdGVkUHJvcGVydHlBbmltYXRvcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lLCBSZWY8QW5pbWF0ZWRQcm9wZXJ0eT4mIGFuaW1hdGVkLCBBcmd1bWVudHMmJi4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogU1ZHQXR0cmlidXRlQW5pbWF0b3IoYXR0cmlidXRlTmFtZSkKKyAg
ICAgICAgLCBtX2FuaW1hdGVkKGFuaW1hdGVkLmNvcHlSZWYoKSkKKyAgICAgICAgLCBtX2Z1bmN0
aW9uKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCisgICAgeworICAgIH0K
KworICAgIFJlZjxBbmltYXRlZFByb3BlcnR5PiBtX2FuaW1hdGVkOworICAgIFZlY3RvcjxSZWY8
QW5pbWF0ZWRQcm9wZXJ0eT4+IG1fYW5pbWF0ZWRJbnN0YW5jZXM7CisgICAgQW5pbWF0aW9uRnVu
Y3Rpb24gbV9mdW5jdGlvbjsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3JJ
bXBsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvci5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvcjsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMSwgdHlwZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yMj4KK2NsYXNzIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I7CisKK2Ns
YXNzIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yIGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVk
UHJvcGVydHlBbmltYXRvcjxTVkdBbmltYXRlZEludGVnZXIsIFNWR0FuaW1hdGlvbkludGVnZXJG
dW5jdGlvbj4geworICAgIGZyaWVuZCBjbGFzcyBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1h
dG9yPFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yLCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRv
cj47CisgICAgZnJpZW5kIGNsYXNzIFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvcjsKKyAg
ICB1c2luZyBCYXNlID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yPFNWR0FuaW1hdGVkSW50
ZWdlciwgU1ZHQW5pbWF0aW9uSW50ZWdlckZ1bmN0aW9uPjsKKyAgICB1c2luZyBCYXNlOjpCYXNl
OworCitwdWJsaWM6CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIFJlZjxTVkdBbmltYXRlZEludGVnZXI+JiBhbmltYXRlZCwgQW5pbWF0
aW9uTW9kZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxh
dGVkLCBib29sIGlzQWRkaXRpdmUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yPihuZXcgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5p
bWF0b3IoYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWQsIGFuaW1hdGlvbk1vZGUsIGNhbGNNb2RlLCBp
c0FjY3VtdWxhdGVkLCBpc0FkZGl0aXZlKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
cHJvZ3Jlc3MoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgZmxvYXQgcGVyY2VudGFnZSwgdW5z
aWduZWQgcmVwZWF0Q291bnQpIGZpbmFsCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uLnByb2dy
ZXNzKHRhcmdldEVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBtX2FuaW1hdGVkLT5h
bmltVmFsKCkpOworICAgIH0KK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlNWR0FuaW1hdGVkQW5nbGUuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIK
KyNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aExpc3QuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlci5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdC5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUG9pbnRMaXN0LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmltaXRpdmVQ
cm9wZXJ0eS5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVjdC5oIgorI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgU1ZHQW5pbWF0ZWRJbnRlZ2VyID0gU1ZHQW5p
bWF0ZWRQcmltaXRpdmVQcm9wZXJ0eTxpbnQ+OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBh
aXJBY2Nlc3Nvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdNZW1iZXJBY2Nlc3Nvci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlw
ZW5hbWUgQWNjZXNzb3JUeXBlMSwgdHlwZW5hbWUgQWNjZXNzb3JUeXBlMj4KK2NsYXNzIFNWR0Fu
aW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3IgOiBwdWJsaWMgU1ZHTWVtYmVyQWNjZXNzb3I8T3du
ZXJUeXBlPiB7CisgICAgdXNpbmcgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUxID0gdHlwZW5hbWUgQWNj
ZXNzb3JUeXBlMTo6QW5pbWF0ZWRQcm9wZXJ0eTsKKyAgICB1c2luZyBBbmltYXRlZFByb3BlcnR5
VHlwZTIgPSB0eXBlbmFtZSBBY2Nlc3NvclR5cGUyOjpBbmltYXRlZFByb3BlcnR5OworICAgIHVz
aW5nIEJhc2UgPSBTVkdNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGU+OworCitwdWJsaWM6CisgICAg
U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvcihSZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUx
PiBPd25lclR5cGU6Oipwcm9wZXJ0eTEsIFJlZjxBbmltYXRlZFByb3BlcnR5VHlwZTI+IE93bmVy
VHlwZTo6KnByb3BlcnR5MikKKyAgICAgICAgOiBtX2FjY2Vzc29yMShwcm9wZXJ0eTEpCisgICAg
ICAgICwgbV9hY2Nlc3NvcjIocHJvcGVydHkyKQorICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBY2Nlc3NvclR5cGUsIFJlZjxBbmltYXRlZFByb3BlcnR5
VHlwZTE+IE93bmVyVHlwZTo6KnByb3BlcnR5MSwgUmVmPEFuaW1hdGVkUHJvcGVydHlUeXBlMj4g
T3duZXJUeXBlOjoqcHJvcGVydHkyPgorICAgIHN0YXRpYyBTVkdNZW1iZXJBY2Nlc3NvcjxPd25l
clR5cGU+JiBzaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEFjY2Vzc29yVHlwZT4gcHJvcGVydHlBY2Nlc3NvciB7IHByb3BlcnR5MSwgcHJvcGVydHkyIH07
CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc29yOworICAgIH0KKworICAgIGJvb2wgaXNB
bmltYXRlZFByb3BlcnR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
UmVmPEFuaW1hdGVkUHJvcGVydHlUeXBlMT4mIHByb3BlcnR5MShPd25lclR5cGUmIG93bmVyKSBj
b25zdCB7IHJldHVybiBtX2FjY2Vzc29yMS5wcm9wZXJ0eShvd25lcik7IH0KKyAgICBjb25zdCBS
ZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUxPiYgcHJvcGVydHkxKGNvbnN0IE93bmVyVHlwZSYgb3du
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzb3IxLnByb3BlcnR5KG93bmVyKTsgfQorCisgICAg
UmVmPEFuaW1hdGVkUHJvcGVydHlUeXBlMj4mIHByb3BlcnR5MihPd25lclR5cGUmIG93bmVyKSBj
b25zdCB7IHJldHVybiBtX2FjY2Vzc29yMi5wcm9wZXJ0eShvd25lcik7IH0KKyAgICBjb25zdCBS
ZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUyPiYgcHJvcGVydHkyKGNvbnN0IE93bmVyVHlwZSYgb3du
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzb3IyLnByb3BlcnR5KG93bmVyKTsgfQorCisgICAg
Ym9vbCBtYXRjaGVzKGNvbnN0IE93bmVyVHlwZSYgb3duZXIsIGNvbnN0IFNWR0FuaW1hdGVkUHJv
cGVydHkmIGFuaW1hdGVkUHJvcGVydHkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9hY2Nlc3NvcjEubWF0Y2hlcyhvd25lciwgYW5pbWF0ZWRQcm9wZXJ0eSkgfHwgbV9h
Y2Nlc3NvcjIubWF0Y2hlcyhvd25lciwgYW5pbWF0ZWRQcm9wZXJ0eSk7CisgICAgfQorCisgICAg
QWNjZXNzb3JUeXBlMSBtX2FjY2Vzc29yMTsKKyAgICBBY2Nlc3NvclR5cGUyIG1fYWNjZXNzb3Iy
OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29ySW1wbC5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVk
UHJvcGVydHlQYWlyQWNjZXNzb3JJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29ySW1wbC5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZFByb3BlcnR5SW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQWNjZXNzb3IuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1h
dG9ySW1wbC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlPgorY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
UGFpckFjY2Vzc29yIGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNz
b3I8T3duZXJUeXBlLCBTVkdBbmltYXRlZEludGVnZXJBY2Nlc3NvcjxPd25lclR5cGU+LCBTVkdB
bmltYXRlZEludGVnZXJBY2Nlc3NvcjxPd25lclR5cGU+PiB7CisgICAgdXNpbmcgQmFzZSA9IFNW
R0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3I8T3duZXJUeXBlLCBTVkdBbmltYXRlZEludGVn
ZXJBY2Nlc3NvcjxPd25lclR5cGU+LCBTVkdBbmltYXRlZEludGVnZXJBY2Nlc3NvcjxPd25lclR5
cGU+PjsKKyAgICB1c2luZyBCYXNlOjpwcm9wZXJ0eTE7CisgICAgdXNpbmcgQmFzZTo6cHJvcGVy
dHkyOworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKyAgICB0ZW1wbGF0ZTxSZWY8
U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBPd25lclR5cGU6Oipwcm9wZXJ0eTEsIFJlZjxTVkdBbmltYXRl
ZEludGVnZXI+IE93bmVyVHlwZTo6KnByb3BlcnR5Mj4KKyAgICBjb25zdGV4cHIgc3RhdGljIGNv
bnN0IFNWR01lbWJlckFjY2Vzc29yPE93bmVyVHlwZT4mIHNpbmdsZXRvbigpIHsgcmV0dXJuIEJh
c2U6OnRlbXBsYXRlIHNpbmdsZXRvbjxTVkdBbmltYXRlZEludGVnZXJQYWlyQWNjZXNzb3IsIHBy
b3BlcnR5MSwgcHJvcGVydHkyPigpOyB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBzeW5jaHJvbml6ZShjb25zdCBPd25lclR5cGUmIG93bmVyKSBjb25zdCBmaW5hbAorICAgIHsK
KyAgICAgICAgYm9vbCBkaXJ0eTEgPSBwcm9wZXJ0eTEob3duZXIpLT5pc0RpcnR5KCk7CisgICAg
ICAgIGJvb2wgZGlydHkyID0gcHJvcGVydHkyKG93bmVyKS0+aXNEaXJ0eSgpOworICAgICAgICBp
ZiAoIShkaXJ0eTEgfHwgZGlydHkyKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICAgICAgU3RyaW5nIHN0cmluZzEgPSBkaXJ0eTEgPyAqcHJvcGVydHkxKG93bmVyKS0+
c3luY2hyb25pemUoKSA6IHByb3BlcnR5MShvd25lciktPmJhc2VWYWxBc1N0cmluZygpOworICAg
ICAgICBTdHJpbmcgc3RyaW5nMiA9IGRpcnR5MiA/ICpwcm9wZXJ0eTIob3duZXIpLT5zeW5jaHJv
bml6ZSgpIDogcHJvcGVydHkyKG93bmVyKS0+YmFzZVZhbEFzU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiBzdHJpbmcxID09IHN0cmluZzIgPyBzdHJpbmcxIDogc3RyaW5nMSArICIsICIgKyBzdHJp
bmcyOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBdHRyaWJ1dGVBbmltYXRvcj4g
Y3JlYXRlQW5pbWF0b3IoT3duZXJUeXBlJiBvd25lciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSwgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9k
ZSwgYm9vbCBpc0FjY3VtdWxhdGVkLCBib29sIGlzQWRkaXRpdmUpIGNvbnN0IGZpbmFsCisgICAg
eworICAgICAgICByZXR1cm4gU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFuaW1hdG9yOjpjcmVhdGUo
YXR0cmlidXRlTmFtZSwgcHJvcGVydHkxKG93bmVyKSwgcHJvcGVydHkyKG93bmVyKSwgYW5pbWF0
aW9uTW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpOworICAgIH0KKwor
ICAgIHZvaWQgYXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShPd25lclR5cGUmIG93bmVyLCBTVkdBdHRy
aWJ1dGVBbmltYXRvciYgYW5pbWF0b3IpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBzdGF0
aWNfY2FzdDxTVkdBbmltYXRlZEludGVnZXJQYWlyQW5pbWF0b3ImPihhbmltYXRvcikuYXBwZW5k
QW5pbWF0ZWRJbnN0YW5jZShwcm9wZXJ0eTEob3duZXIpLCBwcm9wZXJ0eTIob3duZXIpKTsKKyAg
ICB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRlZFByb3BlcnR5UGFpckFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJTVkdBdHRyaWJ1dGVBbmltYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNWR0VsZW1lbnQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjEsIHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjI+CitjbGFz
cyBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yIDogcHVibGljIFNWR0F0dHJpYnV0ZUFu
aW1hdG9yIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBbmltYXRlZFByb3BlcnR5MSA9IHR5cGVuYW1l
IEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjE6OkFuaW1hdG9yQW5pbWF0ZWRQcm9wZXJ0eTsKKyAg
ICB1c2luZyBBbmltYXRlZFByb3BlcnR5MiA9IHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVydHlBbmlt
YXRvcjI6OkFuaW1hdG9yQW5pbWF0ZWRQcm9wZXJ0eTsKKworICAgIHZvaWQgYXBwZW5kQW5pbWF0
ZWRJbnN0YW5jZShSZWY8QW5pbWF0ZWRQcm9wZXJ0eTE+JiBhbmltYXRlZDEsIFJlZjxBbmltYXRl
ZFByb3BlcnR5Mj4mIGFuaW1hdGVkMikKKyAgICB7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yMS0+YXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShhbmltYXRlZDEpOworICAgICAgICBt
X2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjItPmFwcGVuZEFuaW1hdGVkSW5zdGFuY2UoYW5pbWF0
ZWQyKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFu
aW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIFJlZjxBbmltYXRlZFBy
b3BlcnR5MT4mIGFuaW1hdGVkMSwgUmVmPEFuaW1hdGVkUHJvcGVydHkyPiYgYW5pbWF0ZWQyLCBB
bmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNNb2RlIGNhbGNNb2RlLCBib29sIGlzQWNj
dW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkKKyAgICAgICAgOiBTVkdBdHRyaWJ1dGVBbmltYXRv
cihhdHRyaWJ1dGVOYW1lKQorICAgICAgICAsIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMShB
bmltYXRlZFByb3BlcnR5QW5pbWF0b3IxOjpjcmVhdGUoYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWQx
LCBhbmltYXRpb25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSkpCisg
ICAgICAgICwgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyKEFuaW1hdGVkUHJvcGVydHlBbmlt
YXRvcjI6OmNyZWF0ZShhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZDIsIGFuaW1hdGlvbk1vZGUsIGNh
bGNNb2RlLCBpc0FjY3VtdWxhdGVkLCBpc0FkZGl0aXZlKSkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBzdGFydChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IxLT5zdGFydCh0YXJnZXRFbGVtZW50KTsK
KyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyLT5zdGFydCh0YXJnZXRFbGVtZW50
KTsKKyAgICB9CisKKyAgICB2b2lkIHByb2dyZXNzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQs
IGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50KSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IxLT5wcm9ncmVzcyh0YXJnZXRFbGVt
ZW50LCBwZXJjZW50YWdlLCByZXBlYXRDb3VudCk7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yMi0+cHJvZ3Jlc3ModGFyZ2V0RWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291
bnQpOworICAgIH0KKworICAgIHZvaWQgYXBwbHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZSh0YXJn
ZXRFbGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3AoU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9y
MS0+c3RvcCh0YXJnZXRFbGVtZW50KTsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0
b3IyLT5zdG9wKHRhcmdldEVsZW1lbnQpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
bmltYXRlZFByb3BlcnR5QW5pbWF0b3IxPiBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjE7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjI+IG1fYW5pbWF0ZWRQ
cm9wZXJ0eUFuaW1hdG9yMjsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3JJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJB
bmltYXRvckltcGwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9ySW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVy
dHlJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oIgor
I2luY2x1ZGUgIlNWR01hcmtlclR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU1ZHRWxlbWVudDsKKworY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFuaW1hdG9yIGZp
bmFsIDogcHVibGljIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I8U1ZHQW5pbWF0ZWRJ
bnRlZ2VyQW5pbWF0b3IsIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yPiB7CisgICAgdXNpbmcg
QmFzZSA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I8U1ZHQW5pbWF0ZWRJbnRlZ2Vy
QW5pbWF0b3IsIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yPjsKKyAgICB1c2luZyBCYXNlOjpC
YXNlOworCitwdWJsaWM6CisgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZU5hbWUsIFJlZjxTVkdBbmltYXRlZEludGVnZXI+JiBhbmltYXRlZDEsIFJl
ZjxTVkdBbmltYXRlZEludGVnZXI+JiBhbmltYXRlZDIsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9u
TW9kZSwgQ2FsY01vZGUgY2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0
aXZlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZElu
dGVnZXJQYWlyQW5pbWF0b3I+KG5ldyBTVkdBbmltYXRlZEludGVnZXJQYWlyQW5pbWF0b3IoYXR0
cmlidXRlTmFtZSwgYW5pbWF0ZWQxLCBhbmltYXRlZDIsIGFuaW1hdGlvbk1vZGUsIGNhbGNNb2Rl
LCBpc0FjY3VtdWxhdGVkLCBpc0FkZGl0aXZlKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgc2V0RnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGZyb20sIGNv
bnN0IFN0cmluZyYgdG8pIGZpbmFsCisgICAgeworICAgICAgICBhdXRvIHBhaXJGcm9tID0gU1ZH
UHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGludCwgaW50Pj46OmZyb21TdHJpbmcoZnJvbSk7Cisg
ICAgICAgIGF1dG8gcGFpclRvID0gU1ZHUHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGludCwgaW50
Pj46OmZyb21TdHJpbmcodG8pOworCisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9y
MS0+bV9mdW5jdGlvbi5tX2Zyb20gPSBwYWlyRnJvbS5maXJzdDsKKyAgICAgICAgbV9hbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3IxLT5tX2Z1bmN0aW9uLm1fdG8gPSBwYWlyVG8uZmlyc3Q7CisKKyAg
ICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyLT5tX2Z1bmN0aW9uLm1fZnJvbSA9IHBh
aXJGcm9tLnNlY29uZDsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyLT5tX2Z1
bmN0aW9uLm1fdG8gPSBwYWlyVG8uc2Vjb25kOworICAgIH0KKworICAgIHZvaWQgc2V0RnJvbUFu
ZEJ5VmFsdWVzKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYg
YnkpIGZpbmFsCisgICAgeworICAgICAgICBhdXRvIHBhaXJGcm9tID0gU1ZHUHJvcGVydHlUcmFp
dHM8c3RkOjpwYWlyPGludCwgaW50Pj46OmZyb21TdHJpbmcoZnJvbSk7CisgICAgICAgIGF1dG8g
cGFpckJ5ID0gU1ZHUHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGludCwgaW50Pj46OmZyb21TdHJp
bmcoYnkpOworCisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMS0+bV9mdW5jdGlv
bi5tX2Zyb20gPSBwYWlyRnJvbS5maXJzdDsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5p
bWF0b3IxLT5tX2Z1bmN0aW9uLm1fdG8gPSBwYWlyRnJvbS5maXJzdCArIHBhaXJCeS5maXJzdDsK
KworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjItPm1fZnVuY3Rpb24ubV9mcm9t
ID0gcGFpckZyb20uc2Vjb25kOworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjIt
Pm1fZnVuY3Rpb24ubV90byA9IHBhaXJGcm9tLnNlY29uZCArIHBhaXJCeS5zZWNvbmQ7CisgICAg
fQorCisgICAgdm9pZCBzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0cmluZyYgdG9B
dEVuZE9mRHVyYXRpb24pIGZpbmFsCisgICAgeworICAgICAgICBhdXRvIHBhaXJUb0F0RW5kT2ZE
dXJhdGlvbiA9IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIGludD4+Ojpmcm9tU3Ry
aW5nKHRvQXRFbmRPZkR1cmF0aW9uKTsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0
b3IxLT5tX2Z1bmN0aW9uLm1fdG9BdEVuZE9mRHVyYXRpb24gPSBwYWlyVG9BdEVuZE9mRHVyYXRp
b24uZmlyc3Q7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMi0+bV9mdW5jdGlv
bi5tX3RvQXRFbmRPZkR1cmF0aW9uID0gcGFpclRvQXRFbmRPZkR1cmF0aW9uLnNlY29uZDsKKyAg
ICB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJTVkdBbmltYXRpb25GdW5jdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9uRnVu
Y3Rpb24geworcHVibGljOgorICAgIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24oQW5pbWF0
aW9uTW9kZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxh
dGVkLCBib29sIGlzQWRkaXRpdmUpCisgICAgICAgIDogU1ZHQW5pbWF0aW9uRnVuY3Rpb24oYW5p
bWF0aW9uTW9kZSkKKyAgICAgICAgLCBtX2NhbGNNb2RlKGNhbGNNb2RlKQorICAgICAgICAsIG1f
aXNBY2N1bXVsYXRlZChpc0FjY3VtdWxhdGVkKQorICAgICAgICAsIG1faXNBZGRpdGl2ZShpc0Fk
ZGl0aXZlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldEZyb21BbmRCeVZhbHVlcyhTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYg
YnkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzZXRGcm9tQW5kVG9WYWx1ZXModGFyZ2V0RWxl
bWVudCwgZnJvbSwgYnkpOworICAgICAgICBhZGRGcm9tQW5kVG9WYWx1ZXModGFyZ2V0RWxlbWVu
dCk7CisgICAgfQorCisgICAgdm9pZCBzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICBmbG9hdCBwcm9ncmVzcyhmbG9hdCBwZXJjZW50YWdlLCB1
bnNpZ25lZCByZXBlYXRDb3VudCwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGZsb2F0IHRvQXRFbmRP
ZkR1cmF0aW9uLCBmbG9hdCBhbmltYXRlZCkKKyAgICB7CisgICAgICAgIGZsb2F0IG51bWJlcjsK
KyAgICAgICAgaWYgKG1fY2FsY01vZGUgPT0gQ2FsY01vZGU6OkRpc2NyZXRlKQorICAgICAgICAg
ICAgbnVtYmVyID0gcGVyY2VudGFnZSA8IDAuNSA/IGZyb20gOiB0bzsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbnVtYmVyID0gKHRvIC0gZnJvbSkgKiBwZXJjZW50YWdlICsgZnJvbTsKKwor
ICAgICAgICBpZiAobV9pc0FjY3VtdWxhdGVkICYmIHJlcGVhdENvdW50KQorICAgICAgICAgICAg
bnVtYmVyICs9IHRvQXRFbmRPZkR1cmF0aW9uICogcmVwZWF0Q291bnQ7CisKKyAgICAgICAgaWYg
KG1faXNBZGRpdGl2ZSAmJiBtX2FuaW1hdGlvbk1vZGUgIT0gQW5pbWF0aW9uTW9kZTo6VG8pCisg
ICAgICAgICAgICBudW1iZXIgKz0gYW5pbWF0ZWQ7CisKKyAgICAgICAgcmV0dXJuIG51bWJlcjsK
KyAgICB9CisKKyAgICBDYWxjTW9kZSBtX2NhbGNNb2RlOworICAgIGJvb2wgbV9pc0FjY3VtdWxh
dGVkOworICAgIGJvb2wgbV9pc0FkZGl0aXZlOworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRk
aXRpdmVWYWx1ZUZ1bmN0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0aW9u
QWRkaXRpdmVGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlv
biA6IHB1YmxpYyBTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB1
c2luZyBTVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uOjpTVkdBbmltYXRpb25BZGRpdGl2ZUZ1
bmN0aW9uOworICAgIAorcHJvdGVjdGVkOgorICAgIFZhbHVlVHlwZSB0b0F0RW5kT2ZEdXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdG9BdEVuZE9mRHVyYXRpb24gPyAqbV90b0F0RW5kT2ZEdXJh
dGlvbiA6IG1fdG87IH0KKworICAgIFZhbHVlVHlwZSBtX2Zyb207CisgICAgVmFsdWVUeXBlIG1f
dG87CisgICAgT3B0aW9uYWw8VmFsdWVUeXBlPiBtX3RvQXRFbmRPZkR1cmF0aW9uOworfTsKKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmgi
CisjaW5jbHVkZSAiU1ZHUHJvcGVydHlUcmFpdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTVkdBbmltYXRpb25JbnRlZ2VyRnVuY3Rpb24gOiBwdWJsaWMgU1ZHQW5pbWF0aW9u
QWRkaXRpdmVWYWx1ZUZ1bmN0aW9uPGludD4geworICAgIGZyaWVuZCBjbGFzcyBTVkdBbmltYXRl
ZEludGVnZXJQYWlyQW5pbWF0b3I7CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uPGludD47CisgICAgdXNpbmcgQmFzZTo6QmFzZTsK
KworICAgIHZvaWQgc2V0RnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcm
IGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2Zyb20g
PSBTVkdQcm9wZXJ0eVRyYWl0czxpbnQ+Ojpmcm9tU3RyaW5nKGZyb20pOworICAgICAgICBtX3Rv
ID0gU1ZHUHJvcGVydHlUcmFpdHM8aW50Pjo6ZnJvbVN0cmluZyh0byk7CisgICAgfQorCisgICAg
dm9pZCBzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0cmluZyYgdG9BdEVuZE9mRHVy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3RvQXRFbmRPZkR1cmF0aW9uID0gU1ZH
UHJvcGVydHlUcmFpdHM8aW50Pjo6ZnJvbVN0cmluZyh0b0F0RW5kT2ZEdXJhdGlvbik7CisgICAg
fQorCisgICAgdm9pZCBwcm9ncmVzcyhTVkdFbGVtZW50KiwgZmxvYXQgcGVyY2VudGFnZSwgdW5z
aWduZWQgcmVwZWF0Q291bnQsIGludCYgYW5pbWF0ZWQpCisgICAgeworICAgICAgICBhbmltYXRl
ZCA9IHN0YXRpY19jYXN0PGludD4ocm91bmRmKEJhc2U6OnByb2dyZXNzKHBlcmNlbnRhZ2UsIHJl
cGVhdENvdW50LCBtX2Zyb20sIG1fdG8sIHRvQXRFbmRPZkR1cmF0aW9uKCksIGFuaW1hdGVkKSkp
OworICAgIH0KKworICAgIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQqLCBjb25z
dCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICByZXR1cm4gc3RkOjphYnModG8udG9JbnRTdHJpY3QoKSAtIGZyb20udG9JbnRTdHJp
Y3QoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNW
R0VsZW1lbnQqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV90byArPSBtX2Zyb207CisgICAg
fQorfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25GdW5jdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNW
R0FuaW1hdGlvbkZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TVkdBbmltYXRpb25G
dW5jdGlvbigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0Rpc2NyZXRlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9tQW5kVG9WYWx1
ZXMoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9tQW5kQnlWYWx1ZXMoU1ZHRWxlbWVudCog
dGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0cmluZyYpID0gMDsK
KworICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoU1ZHRWxlbWVudCosIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIC0xOyB9Citwcm90ZWN0ZWQ6
CisgICAgU1ZHQW5pbWF0aW9uRnVuY3Rpb24oQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlKQor
ICAgICAgICA6IG1fYW5pbWF0aW9uTW9kZShhbmltYXRpb25Nb2RlKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSB7IH0KKwor
ICAgIEFuaW1hdGlvbk1vZGUgbV9hbmltYXRpb25Nb2RlOworfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9y
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
dHRyaWJ1dGVBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdBdHRyaWJ1dGVBbmltYXRvci5oIgorCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQ
YXJzZXIuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBTVkdBdHRyaWJ1dGVBbmltYXRvcjo6YXBwbHlBbmltYXRlZFByb3BlcnR5Q2hhbmdl
KFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUp
Cit7CisgICAgQVNTRVJUKCFlbGVtZW50LT5tX2RlbGV0aW9uSGFzQmVndW4pOworICAgIGVsZW1l
bnQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlTmFtZSk7Cit9CisKK3ZvaWQgU1ZHQXR0
cmlidXRlQW5pbWF0b3I6OmFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZShTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50KQoreworICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKKyAgICBBU1NFUlQo
bV9hdHRyaWJ1dGVOYW1lICE9IGFueVFOYW1lKCkpOworCisgICAgLy8gRklYTUU6IERvIHdlIHJl
YWxseSBuZWVkIHRvIGNoZWNrIGJvdGggaXNDb25uZWN0ZWQgYW5kICFwYXJlbnROb2RlPworICAg
IGlmICghdGFyZ2V0RWxlbWVudC0+aXNDb25uZWN0ZWQoKSB8fCAhdGFyZ2V0RWxlbWVudC0+cGFy
ZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTVkdFbGVtZW50OjpJbnN0YW5jZVVw
ZGF0ZUJsb2NrZXIgYmxvY2tlcigqdGFyZ2V0RWxlbWVudCk7CisgICAgYXBwbHlBbmltYXRlZFBy
b3BlcnR5Q2hhbmdlKHRhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CisKKyAgICAvLyBJ
ZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBkYXRlIHRoZW0gYXMgd2VsbCwg
dy9vIHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1aWx0LgorICAgIGZvciAoYXV0
byogaW5zdGFuY2UgOiB0YXJnZXRFbGVtZW50LT5pbnN0YW5jZXMoKSkKKyAgICAgICAgYXBwbHlB
bmltYXRlZFByb3BlcnR5Q2hhbmdlKGluc3RhbmNlLCBtX2F0dHJpYnV0ZU5hbWUpOworfQorCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJp
YnV0ZUFuaW1hdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
UXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0Vs
ZW1lbnQ7CisKK2VudW0gY2xhc3MgQW5pbWF0aW9uTW9kZSA6IHVpbnQ4X3QgeyBOb25lLCBGcm9t
VG8sIEZyb21CeSwgVG8sIEJ5LCBWYWx1ZXMsIFBhdGggfTsKK2VudW0gY2xhc3MgQ2FsY01vZGUg
OiB1aW50OF90IHsgRGlzY3JldGUsIExpbmVhciwgUGFjZWQsIFNwbGluZSB9OworCitjbGFzcyBT
VkdBdHRyaWJ1dGVBbmltYXRvciB7CitwdWJsaWM6CisgICAgU1ZHQXR0cmlidXRlQW5pbWF0b3Io
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICAgICAgOiBtX2F0dHJpYnV0
ZU5hbWUoYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+U1ZHQXR0
cmlidXRlQW5pbWF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXNjcmV0
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbUFu
ZFRvVmFsdWVzKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbUFuZEJ5VmFsdWVzKFNWR0VsZW1lbnQqLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9BdEVuZE9m
RHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFy
dChTVkdFbGVtZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcm9ncmVzcyhTVkdFbGVtZW50
KiwgZmxvYXQsIHVuc2lnbmVkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KFNWR0VsZW1l
bnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCkgPSAwOworCisgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50
KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgY29uc3QgeyByZXR1cm4gLTE7IH0KKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5QW5pbWF0ZWRQcm9wZXJ0eUNoYW5nZShT
VkdFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCisgICAgdm9pZCBhcHBseUFuaW1h
dGVkUHJvcGVydHlDaGFuZ2UoU1ZHRWxlbWVudCopOworCisgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbV9hdHRyaWJ1dGVOYW1lOworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHAJKHJldmlz
aW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0
ZU93bmVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHQXR0cmlidXRlT3duZXJQcm94eS5oIgogCisjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0F0dHJpYnV0
ZU93bmVyUHJveHk6OlNWR0F0dHJpYnV0ZU93bmVyUHJveHkoU1ZHRWxlbWVudCYgZWxlbWVudCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRy
aWJ1dGVPd25lclByb3h5LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJp
YnV0ZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQXR0cmlidXRlUmVnaXN0cnkuaAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRCb29sZWFuLmgiCiAj
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
SW50ZWdlci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKQEAg
LTgwLDIwICs3OSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmVnaXN0ZXJBdHRyaWJ1dGUoU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbkF0dHJpYnV0ZUFjY2Vzc29yPE93bmVyVHlwZSwgRW51bVR5cGU+Ojp0
ZW1wbGF0ZSBzaW5nbGV0b248YXR0cmlidXRlTmFtZSwgYXR0cmlidXRlPigpKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTxjb25zdCBMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgUXVhbGlmaWVkTmFt
ZT4mIGF0dHJpYnV0ZU5hbWUsIFNWR0FuaW1hdGVkSW50ZWdlckF0dHJpYnV0ZSBPd25lclR5cGU6
OiphdHRyaWJ1dGU+Ci0gICAgdm9pZCByZWdpc3RlckF0dHJpYnV0ZSgpCi0gICAgewotICAgICAg
ICByZWdpc3RlckF0dHJpYnV0ZShTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGVBY2Nlc3NvcjxP
d25lclR5cGU+Ojp0ZW1wbGF0ZSBzaW5nbGV0b248YXR0cmlidXRlTmFtZSwgYXR0cmlidXRlPigp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjb25zdCBMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
UXVhbGlmaWVkTmFtZT4mIGF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgKCppZGVudGlmaWVyKSgpLCBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgT3duZXJUeXBl
OjoqYXR0cmlidXRlLAotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmICgqb3B0aW9uYWxJZGVu
dGlmaWVyKSgpLCBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1dGUgT3duZXJUeXBlOjoqb3B0aW9u
YWxBdHRyaWJ1dGU+Ci0gICAgdm9pZCByZWdpc3RlckF0dHJpYnV0ZSgpCi0gICAgewotICAgICAg
ICByZWdpc3RlckF0dHJpYnV0ZShTVkdBbmltYXRlZE9wdGlvbmFsSW50ZWdlckF0dHJpYnV0ZUFj
Y2Vzc29yPE93bmVyVHlwZT46OnRlbXBsYXRlIHNpbmdsZXRvbjxhdHRyaWJ1dGVOYW1lLCBpZGVu
dGlmaWVyLCBhdHRyaWJ1dGUsIG9wdGlvbmFsSWRlbnRpZmllciwgb3B0aW9uYWxBdHRyaWJ1dGU+
KCkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPGNvbnN0IExhenlOZXZlckRlc3Ryb3llZDxjb25z
dCBRdWFsaWZpZWROYW1lPiYgYXR0cmlidXRlTmFtZSwgU1ZHQW5pbWF0ZWRMZW5ndGhBdHRyaWJ1
dGUgT3duZXJUeXBlOjoqYXR0cmlidXRlPgogICAgIHZvaWQgcmVnaXN0ZXJBdHRyaWJ1dGUoKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR01lbWJlckFjY2Vz
c29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTWVt
YmVyQWNjZXNzb3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdNZW1iZXJBY2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJTVkdBdHRy
aWJ1dGVBbmltYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0FuaW1h
dGVkUHJvcGVydHk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZT4KK2NsYXNzIFNWR01l
bWJlckFjY2Vzc29yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5TVkdNZW1iZXJBY2Nlc3NvcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2goY29uc3QgT3duZXJUeXBlJikgY29uc3QgeyB9CisgICAgdmlydHVhbCBib29s
IGlzQW5pbWF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzQW5pbWF0ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBib29sIG1hdGNoZXMoY29uc3QgT3duZXJUeXBlJiwgY29uc3QgU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBPcHRpb25hbDxT
dHJpbmc+IHN5bmNocm9uaXplKGNvbnN0IE93bmVyVHlwZSYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQXR0cmlidXRlQW5p
bWF0b3I+IGNyZWF0ZUFuaW1hdG9yKE93bmVyVHlwZSYsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBB
bmltYXRpb25Nb2RlLCBDYWxjTW9kZSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKE93bmVyVHlwZSYs
IFNWR0F0dHJpYnV0ZUFuaW1hdG9yJikgY29uc3QgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBTVkdN
ZW1iZXJBY2Nlc3NvcigpID0gZGVmYXVsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR01lbWJlckFjY2Vzc29yUHRy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTWVtYmVy
QWNjZXNzb3JQdHIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdNZW1iZXJBY2Nlc3NvclB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR01lbWJlckFjY2Vzc29yLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBQcm9w
ZXJ0eVR5cGU+CitjbGFzcyBTVkdNZW1iZXJBY2Nlc3NvclB0ciA6IHB1YmxpYyBTVkdNZW1iZXJB
Y2Nlc3NvcjxPd25lclR5cGU+IHsKKyAgICB1c2luZyBCYXNlID0gU1ZHTWVtYmVyQWNjZXNzb3I8
T3duZXJUeXBlPjsKKworcHVibGljOgorICAgIFNWR01lbWJlckFjY2Vzc29yUHRyKFJlZjxQcm9w
ZXJ0eVR5cGU+IE93bmVyVHlwZTo6KnByb3BlcnR5KQorICAgICAgICA6IG1fcHJvcGVydHkocHJv
cGVydHkpCisgICAgeworICAgIH0KKworICAgIFJlZjxQcm9wZXJ0eVR5cGU+JiBwcm9wZXJ0eShP
d25lclR5cGUmIG93bmVyKSBjb25zdCB7IHJldHVybiBvd25lci4qbV9wcm9wZXJ0eTsgfQorICAg
IGNvbnN0IFJlZjxQcm9wZXJ0eVR5cGU+JiBwcm9wZXJ0eShjb25zdCBPd25lclR5cGUmIG93bmVy
KSBjb25zdCB7IHJldHVybiBvd25lci4qbV9wcm9wZXJ0eTsgfQorCisgICAgdm9pZCBkZXRhY2go
Y29uc3QgT3duZXJUeXBlJiBvd25lcikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHBy
b3BlcnR5KG93bmVyKS0+ZGV0YWNoKCk7CisgICAgfQorCisgICAgT3B0aW9uYWw8U3RyaW5nPiBz
eW5jaHJvbml6ZShjb25zdCBPd25lclR5cGUmIG93bmVyKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHByb3BlcnR5KG93bmVyKS0+c3luY2hyb25pemUoKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBY2Nlc3NvclR5cGUsIFJlZjxQcm9w
ZXJ0eVR5cGU+IE93bmVyVHlwZTo6KnByb3BlcnR5PgorICAgIHN0YXRpYyBjb25zdCBTVkdNZW1i
ZXJBY2Nlc3NvcjxPd25lclR5cGU+JiBzaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEFjY2Vzc29yVHlwZT4gcHJvcGVydHlBY2Nlc3NvciB7IHByb3BlcnR5
IH07CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2Vzc29yOworICAgIH0KKworICAgIFJlZjxQ
cm9wZXJ0eVR5cGU+IE93bmVyVHlwZTo6Km1fcHJvcGVydHk7Cit9OworCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFNWR1Byb3BlcnR5QWNjZXNzIDog
dWludDhfdCB7IFJlYWRXcml0ZSwgUmVhZE9ubHkgfTsKK2VudW0gY2xhc3MgU1ZHUHJvcGVydHlT
dGF0ZSA6IHVpbnQ4X3QgeyBDbGVhbiwgRGlydHkgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVy
dHlPd25lci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR1Byb3BlcnR5T3duZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUHJvcGVydHlPd25lciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+U1ZHUHJvcGVydHlPd25lcigpID0gZGVmYXVsdDsKKworICAg
IHZpcnR1YWwgU1ZHUHJvcGVydHlPd25lciogb3duZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRy
OyB9CisgICAgCisgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBhdHRyaWJ1dGVDb250ZXh0
RWxlbWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW93bmVyKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG93bmVyKCktPmF0dHJpYnV0ZUNvbnRl
eHRFbGVtZW50KCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBjb21taXRQcm9wZXJ0
eUNoYW5nZSgpCisgICAgeworICAgICAgICBpZiAoIW93bmVyKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG93bmVyKCktPmNvbW1pdFByb3BlcnR5Q2hhbmdlKCk7CisgICAgfQorICAg
IAorcHJvdGVjdGVkOgorICAgIFNWR1Byb3BlcnR5T3duZXIoKSA9IGRlZmF1bHQ7Cit9OworCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVyUmVn
aXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0
eUFjY2Vzc29ySW1wbC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNz
b3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHUHJvcGVydHlSZWdpc3RyeS5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHQXR0cmlidXRl
QW5pbWF0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUuLi4gQmFz
ZVR5cGVzPgorY2xhc3MgU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5IDogcHVibGljIFNWR1Byb3Bl
cnR5UmVnaXN0cnkgeworcHVibGljOgorICAgIFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeShPd25l
clR5cGUmIG93bmVyKQorICAgICAgICA6IG1fb3duZXIob3duZXIpCisgICAgeworICAgIH0KKwor
ICAgIHRlbXBsYXRlPGNvbnN0IExhenlOZXZlckRlc3Ryb3llZDxjb25zdCBRdWFsaWZpZWROYW1l
PiYgYXR0cmlidXRlTmFtZSwgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4gT3duZXJUeXBlOjoqcHJv
cGVydHk+CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJQcm9wZXJ0eSgpCisgICAgeworICAgICAg
ICByZWdpc3RlclByb3BlcnR5KGF0dHJpYnV0ZU5hbWUsIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vz
c29yPE93bmVyVHlwZT46OnRlbXBsYXRlIHNpbmdsZXRvbjxwcm9wZXJ0eT4oKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8Y29uc3QgTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IFF1YWxpZmllZE5h
bWU+JiBhdHRyaWJ1dGVOYW1lLCBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBPd25lclR5cGU6Oipw
cm9wZXJ0eTEsIFJlZjxTVkdBbmltYXRlZEludGVnZXI+IE93bmVyVHlwZTo6KnByb3BlcnR5Mj4K
KyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIHJlZ2lz
dGVyUHJvcGVydHkoYXR0cmlidXRlTmFtZSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFjY2Vzc29y
PE93bmVyVHlwZT46OnRlbXBsYXRlIHNpbmdsZXRvbjxwcm9wZXJ0eTEsIHByb3BlcnR5Mj4oKSk7
CisgICAgfQorICAgIC8vIEVudW1lcmF0ZSBhbGwgdGhlIFNWR01lbWJlckFjY2Vzc29ycyByZWN1
cnNpdmVseS4gVGhlIGZ1bmN0b3Igd2lsbCBiZSBjYWxsZWQgYW5kIHdpbGwKKyAgICAvLyBiZSBn
aXZlbiB0aGUgcGFpcjxRdWFsaWZpZWROYW1lLCBTVkdNZW1iZXJBY2Nlc3Nvcj4gdGlsbCB0aGUg
ZnVuY3RvciByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgc3RhdGljIGJvb2wgZW51bWVyYXRlUmVjdXJzaXZlbHkoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBhdHRyaWJ1dGVOYW1l
VG9BY2Nlc3Nvck1hcCgpKSB7CisgICAgICAgICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZW51
bWVyYXRlUmVjdXJzaXZlbHlCYXNlVHlwZXMoZnVuY3Rvcik7CisgICAgfQorCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIE93bmVyVHlwZSBvd25zIGEgcHJvcGVydHkgd2hvc2UgbmFtZSBpcyBhdHRy
aWJ1dGVOYW1lLgorICAgIHN0YXRpYyBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kQWNjZXNz
b3IoYXR0cmlidXRlTmFtZSk7CisgICAgfQorCisgICAgUXVhbGlmaWVkTmFtZSBhbmltYXRlZFBy
b3BlcnR5QXR0cmlidXRlTmFtZShjb25zdCBTVkdBbmltYXRlZFByb3BlcnR5JiBhbmltYXRlZFBy
b3BlcnR5KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRy
aWJ1dGVOYW1lID0gbnVsbFFOYW1lKCk7CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KFsm
XShjb25zdCBhdXRvJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoIWVudHJ5LnZh
bHVlLT5tYXRjaGVzKG1fb3duZXIsIGFuaW1hdGVkUHJvcGVydHkpKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IGVudHJ5LmtleTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBhdHRy
aWJ1dGVOYW1lOworICAgIH0KKworICAgIC8vIERldGFjaCBhbGwgdGhlIHByb3BlcnRpZXMgcmVj
dXJzaXZlbHkgZnJvbSB0aGVpciBPd25lclR5cGVzLgorICAgIHZvaWQgZGV0YWNoQWxsUHJvcGVy
dGllcygpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBlbnVtZXJhdGVSZWN1cnNpdmVs
eShbJl0oY29uc3QgYXV0byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgZW50cnkudmFs
dWUtPmRldGFjaChtX293bmVyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICAvLyBGaW5kcyB0aGUgcHJvcGVydHkgd2hvc2UgbmFtZSBpcyBhdHRy
aWJ1dGVOYW1lIGFuZCByZXR1cm5zIHRoZSBzeW5jaHJvbml6ZQorICAgIC8vIHN0cmluZyB0aHJv
dWdoIHRoZSBhc3NvY2lhdGVkIFNWR01lbWJlckFjY2Vzc29yLgorICAgIE9wdGlvbmFsPFN0cmlu
Zz4gc3luY2hyb25pemUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gdmFsdWU7CisgICAgICAg
IGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KFsmXShjb25zdCBhdXRvJiBlbnRyeSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICBpZiAoIWVudHJ5LmtleS5tYXRjaGVzKGF0dHJpYnV0ZU5hbWUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgdmFsdWUgPSBlbnRyeS52YWx1ZS0+
c3luY2hyb25pemUobV9vd25lcik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgLy8gRW51bWVyYXRlIHJl
Y3Vyc2l2ZWx5IHRoZSBTVkdNZW1iZXJBY2Nlc3NvcnMgb2YgdGhlIE93bmVyVHlwZSBhbmQgYWxs
IGl0cyBCYXNlVHlwZXMuCisgICAgLy8gQ29sbGVjdCBhbGwgdGhlIHBhaXJzIDxBdHRyaWJ1dGVO
YW1lLCBTdHJpbmc+IG9ubHkgZm9yIHRoZSBkaXJ0eSBwcm9wZXJ0aWVzLgorICAgIEhhc2hNYXA8
UXVhbGlmaWVkTmFtZSwgU3RyaW5nPiBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBTdHJpbmc+IG1h
cDsKKyAgICAgICAgZW51bWVyYXRlUmVjdXJzaXZlbHkoWyZdKGNvbnN0IGF1dG8mIGVudHJ5KSAt
PiBib29sIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHN0cmluZyA9IGVudHJ5LnZhbHVlLT5zeW5j
aHJvbml6ZShtX293bmVyKSkKKyAgICAgICAgICAgICAgICBtYXAuYWRkKGVudHJ5LmtleSwgKnN0
cmluZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiBtYXA7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBhIHZpcnR1YWwgZnVuY3Rpb24gYmVj
YXVzZSBTVkdFbGVtZW50IHdpbGwgYWNjZXNzIGl0IHRocm91Z2ggdGhlIGJhc2UgY2xhc3MuCisg
ICAgYm9vbCBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGJvb2wgaXNBbmlt
YXRlZFByb3BlcnR5QXR0cmlidXRlID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2
ZWx5KFsmYXR0cmlidXRlTmFtZSwgJmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZV0oY29uc3Qg
YXV0byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKCFlbnRyeS5rZXkubWF0Y2hl
cyhhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIGlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZSA9IGVudHJ5LnZhbHVlLT5pc0FuaW1hdGVk
UHJvcGVydHkoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGU7CisgICAgfQorCisgICAgLy8g
Q3JlYXRlcyBhbiBTVkdBdHRyaWJ1dGVBbmltYXRvciBmb3IgYSBnaXZlbiBhdHRyaWJ1dGVOYW1l
LgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBdHRyaWJ1dGVBbmltYXRvcj4gY3JlYXRlQW5pbWF0
b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0aW9uTW9kZSBhbmlt
YXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxhdGVkLCBib29sIGlz
QWRkaXRpdmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQXR0cmlidXRlQW5pbWF0b3I+IGFuaW1hdG9yOworICAgICAgICBlbnVtZXJhdGVSZWN1cnNp
dmVseShbJl0oY29uc3QgYXV0byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKCFl
bnRyeS5rZXkubWF0Y2hlcyhhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIGFuaW1hdG9yID0gZW50cnkudmFsdWUtPmNyZWF0ZUFuaW1hdG9y
KG1fb3duZXIsIGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGlvbk1vZGUsIGNhbGNNb2RlLCBpc0FjY3Vt
dWxhdGVkLCBpc0FkZGl0aXZlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBhbmltYXRvcjsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEFu
aW1hdGVkSW5zdGFuY2UoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgU1ZHQXR0
cmlidXRlQW5pbWF0b3ImIGFuaW1hdG9yKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
ZW51bWVyYXRlUmVjdXJzaXZlbHkoWyZdKGNvbnN0IGF1dG8mIGVudHJ5KSAtPiBib29sIHsKKyAg
ICAgICAgICAgIGlmICghZW50cnkua2V5Lm1hdGNoZXMoYXR0cmlidXRlTmFtZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBlbnRyeS52YWx1ZS0+YXBwZW5kQW5p
bWF0ZWRJbnN0YW5jZShtX293bmVyLCBhbmltYXRvcik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBTaW5nbGV0b24gbWFw
IGZvciBldmVyeSBPd25lclR5cGUuCisgICAgc3RhdGljIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwg
Y29uc3QgU1ZHTWVtYmVyQWNjZXNzb3I8T3duZXJUeXBlPio+JiBhdHRyaWJ1dGVOYW1lVG9BY2Nl
c3Nvck1hcCgpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxR
dWFsaWZpZWROYW1lLCBjb25zdCBTVkdNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGU+Kj4+IGF0dHJp
YnV0ZU5hbWVUb0FjY2Vzc29yTWFwOworICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZVRvQWNj
ZXNzb3JNYXA7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTVkdNZW1iZXJBY2Nlc3NvcjxP
d25lclR5cGU+JiBwcm9wZXJ0eUFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgYXR0cmlidXRlTmFt
ZVRvQWNjZXNzb3JNYXAoKS5hZGQoYXR0cmlidXRlTmFtZSwgJnByb3BlcnR5QWNjZXNzb3IpOwor
ICAgIH0KKworICAgIC8vIFRoaXMgaXMgYSB0ZW1wbGF0ZSBmdW5jdGlvbiB3aXRoIHBhcmFtZXRl
ciAnSScgd2hvc2UgZGVmYXVsdCB2YWx1ZSA9IDAuIFNvIHlvdSBjYW4gY2FsbCBpdCB3aXRob3V0
IGFueSBwYXJhbWV0ZXIKKyAgICAvLyBmcm9tIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KCkuIEl0IHJl
dHVybnMgdHJ1ZSBhbmQgaXMgZW5hYmxlX2lmPEkgPT0gc2l6ZW9mLi4uKEJhc2VUeXBlcyk+LiBT
byBpdCBpcyBtYWlubHkgZm9yCisgICAgLy8gYnJlYWtpbmcgdGhlIHJlY3Vyc2lvbi4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCBzaXplX3QgSSA9IDA+CisgICAgc3RhdGljIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPEkgPT0gc2l6ZW9mLi4uKEJhc2VUeXBlcyksIGJvb2w+Ojp0eXBl
IGVudW1lcmF0ZVJlY3Vyc2l2ZWx5QmFzZVR5cGVzKGNvbnN0IEZ1bmN0b3ImKSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICAvLyBUaGlzIHZlcnNpb24gb2YgYW5pbWF0ZWRUeXBlc0Jhc2VUeXBlcygp
IGlzIGVuYWJsZV9pZjxJIDwgc2l6ZW9mLi4uKEJhc2VUeXBlcyk+LgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3IsIHNpemVfdCBJID0gMD4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SSA8IHNpemVvZi4uLihCYXNlVHlwZXMpLCBib29sPjo6dHlwZSBlbnVtZXJhdGVS
ZWN1cnNpdmVseUJhc2VUeXBlcyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgLy8gR2V0IHRoZSBiYXNlIHR5cGUgYXQgaW5kZXggJ0knIHVzaW5nIHN0ZDo6dHVwbGUgYW5k
IHN0ZDo6dHVwbGVfZWxlbWVudC4KKyAgICAgICAgdXNpbmcgQmFzZVR5cGUgPSB0eXBlbmFtZSBz
dGQ6OnR1cGxlX2VsZW1lbnQ8SSwgdHlwZW5hbWUgc3RkOjp0dXBsZTxCYXNlVHlwZXMuLi4+Pjo6
dHlwZTsKKyAgICAgICAgaWYgKCFCYXNlVHlwZTo6UHJvcGVydHlSZWdpc3RyeTo6ZW51bWVyYXRl
UmVjdXJzaXZlbHkoZnVuY3RvcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IC8vIEJhc2VUeXBlIGRvZXMgbm90IHdhbnQgdG8gYnJlYWsgdGhlIHJlY3Vyc2lvbi4gU28gcmVj
dXJzZSB0byB0aGUgbmV4dCBCYXNlVHlwZS4KKyAgICAgICAgcmV0dXJuIGVudW1lcmF0ZVJlY3Vy
c2l2ZWx5QmFzZVR5cGVzPEZ1bmN0b3IsIEkgKyAxPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3QgU1ZHTWVtYmVyQWNjZXNzb3I8T3duZXJUeXBlPiogZmluZEFjY2Vzc29yKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICAvLyBIZXJl
IHdlIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRyaWVzIGluIHRoZSBtYXAgYW5kIHVzZSBt
YXRjaGVzKCkgdG8gY29tcGFyZSB0aGVtIHdpdGggYXR0cmlidXRlTmFtZS4KKyAgICAgICAgLy8g
bV9tYXAuY29udGFpbnMoKSB1c2VzIFF1YWxpZmllZE5hbWU6Om9wZXJhdG9yPT0oKSB3aGljaCBj
b21wYXJlcyB0aGUgaW1wbCBwb2ludGVycyBvbmx5IHdoaWxlIG1hdGNoZXMoKQorICAgICAgICAv
LyBjb21wYXJlcyB0aGUgY29udGVudHMgaWYgdGhlIGltcGwgcG9pbnRlcnMgZGlmZmVyLgorICAg
ICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKGF0dHJpYnV0ZU5hbWVUb0FjY2Vzc29yTWFwKCku
YmVnaW4oKSwgYXR0cmlidXRlTmFtZVRvQWNjZXNzb3JNYXAoKS5lbmQoKSwgWyZhdHRyaWJ1dGVO
YW1lXShjb25zdCBhdXRvJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gZW50
cnkua2V5Lm1hdGNoZXMoYXR0cmlidXRlTmFtZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gaXQgIT0gYXR0cmlidXRlTmFtZVRvQWNjZXNzb3JNYXAoKS5lbmQoKSA/IGl0LT52YWx1ZSA6
IG51bGxwdHI7CisgICAgfQorCisgICAgT3duZXJUeXBlJiBtX293bmVyOworfTsKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlSZWdpc3RyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5UmVn
aXN0cnkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdQcm9wZXJ0eVJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTVkdBbmltYXRlZFByb3BlcnR5OworCitjbGFzcyBTVkdQcm9wZXJ0
eVJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBTVkdQcm9wZXJ0eVJlZ2lzdHJ5KCkgPSBkZWZhdWx0
OworICAgIHZpcnR1YWwgflNWR1Byb3BlcnR5UmVnaXN0cnkoKSA9IGRlZmF1bHQ7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoQWxsUHJvcGVydGllcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFF1YWxpZmllZE5hbWUgYW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZU5hbWUoY29uc3QgU1ZHQW5p
bWF0ZWRQcm9wZXJ0eSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFN0cmluZz4g
c3luY2hyb25pemUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgU3RyaW5nPiBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBbmltYXRlZFByb3BlcnR5QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHQXR0cmlidXRlQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBBbmltYXRpb25Nb2RlLCBDYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxhdGVkLCBi
b29sIGlzQWRkaXRpdmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQW5pbWF0
ZWRJbnN0YW5jZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBTVkdBdHRyaWJ1
dGVBbmltYXRvciYpIGNvbnN0ID0gMDsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364897</attachid>
            <date>2019-03-15 18:22:11 -0700</date>
            <delta_ts>2019-03-16 00:42:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195722-20190315182210.patch</filename>
            <type>text/plain</type>
            <size>229559</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzAyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4NyBAQAorMjAxOS0wMy0xNSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0
aGUgU1ZHIHByb3BlcnR5IHRlYXIgb2ZmIG9iamVjdHMgZm9yIFNWR0FuaW1hdGVkSW50ZWdlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIEluc3RlYWQgb2Yg
c2F2aW5nIGEgcmF3IGludGVnZXIgdmFsdWUgaW4gdGhlIFNWR0VsZW1lbnQgYW5kIHRoZW4gd3Jh
cHBpbmcKKyAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhpcyByYXcgZGF0YSBpbiBhIHRlYXIgb2Zm
IG9iamVjdCwgd2Ugd2lsbCByZXByZXNlbnQgdGhlCisgICAgICAgIGludGVnZXIgYXMgUmVmPFNW
R0FuaW1hdGVkSW50ZWdlcj4gaW4gU1ZHRWxlbWVudC4gVGhpcyB3aWxsIG1ha2UgdGhlIAorICAg
ICAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvcGVydHkgaW4gSURMIGZpbGUgbWF0Y2ggdGhl
IEMrKyBoZWFkZXIgZmlsZS4KKworICAgICAgICBXaGVuIHRoZSBET00gcmVxdWVzdHMgdGhlIFNW
R0FuaW1hdGVkSW50ZWdlciwgd2UgZ2V0IHJldHVybiBhIHJlZmVyZW5jZQorICAgICAgICB0byB0
aGUgbmV3IGFuaW1hdGVkIHByb3BlcnR5LiBXaGVuIHRoZSByZW5kZXJpbmcgY29kZSBhc2tzIGZv
ciB0aGUgY3VycmVudAorICAgICAgICB2YWx1ZSBvZiB0aGUgdGhpcyBhbmltYXRlZCBwcm9wZXJ0
eSwgd2UgcmV0dXJuIHRoZSBhbmltVmFsKCkgb3IgdGhlCisgICAgICAgIGJhc2VWYWwoKSBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYW5pbWF0aW5nIG9yIG5vdC4KKworICAg
ICAgICBBIHBvaW50ZXIgdG8gYSBtZW1iZXIgaW4gdGhlIFNWR0VsZW1lbnQgd2lsbCBiZSByZWdp
c3RlcmVkIGFsb25nIHdpdGggdGhlCisgICAgICAgIGFzc29jaWF0ZWQgYXR0cmlidXRlIG5hbWUg
aW4gU1ZHUHJvcGVydHlSZWdpc3RyeS4gUmVnaXN0ZXJpbmcgdGhlIHByb3BlcnR5CisgICAgICAg
IGNyZWF0ZXMgYW4gU1ZHTWVtYmVyQWNjZXNzb3IgYW5kIGxpbmtzIHRvIHRoZSBhc3NvY2lhdGVk
IGF0dHJpYnV0ZS4gVGhlCisgICAgICAgIGZ1bmN0aW9uIG9mIFNWR01lbWJlckFjY2Vzc29yIGlz
IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKKyAgICAgICAgZ2l2ZW4gYSBw
b2ludGVyIHRvIGFuIFNWR0VsZW1lbnQuCisKKyAgICAgICAgU1ZHUHJvcGVydHlSZWdpc3RyeSBt
YW5hZ2VzIGFsbCB0aGUgcHJvcGVydGllcyBvZiBTVkdFbGVtZW50LiBJdCB0YWtlcworICAgICAg
ICBpbnRvIGFjY291bnQgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFzIHdlbGwuCisKKyAgICAg
ICAgU1ZHRWxlbWVudCB3aWxsIGhhdmUgYSB2aXJ0dWFsIG1ldGhvZCBjYWxsZWQgcHJvcGVydHlS
ZWdpc3RyeSgpLiBFdmVyeQorICAgICAgICBzdXBlcmNsYXNzIHdpbGwgb3ZlcnJpZGUgdGhpcyBt
ZXRob2QgdG8gcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGl0cyByZWdpc3RyeQorICAgICAgICB3aGlj
aCBpbmNsdWRlcyBhbGwgdGhlIHJlZ2lzdGVyZWQgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzIGFu
ZCBpdHMgYmFzZXMuCisKKyAgICAgICAgT25lIGltcG9ydGFudCBmdW5jdGlvbiBvZiB0aGUgU1ZH
UHJvcGVydHlSZWdpc3RyeSBhbmQgU1ZHQWNjZXNzb3IgaXMgdGhleQorICAgICAgICBjcmVhdGUg
dGhlIGFwcHJvcHJpYXRlIFNWR0F0dHJpYnV0ZUFuaW1hdG9yIGZvciB0aGlzIHByb3BlcnR5Lgor
CisgICAgICAgIFNWR0F0dHJpYnV0ZUFuaW1hdG9yIGlzIGp1c3QgYSBjb25uZWN0aW9uIGJldHdl
ZW4gdGhlIGFuaW1hdGVkIHByb3BlcnR5CisgICAgICAgIGFuZCBTVkdBbmltYXRpb25GdW5jdGlv
bi4gU1ZHQW5pbWF0aW9uRnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgdmFsdWVzIG9mCisgICAgICAg
IHRoZSBhbmltYXRlZCBwcm9wZXJ0eSB3aXRoaW4gYSB0aW1lIGludGVydmFsLiBTVkdBbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3IKKyAgICAgICAgdXBkYXRlcyBhbmltVmFsIG9mIHRoZSBhbmltYXRl
ZCBwcm9wZXJ0eSBhbmQgaW52YWxpZGF0ZXMgdGhlIGFzc29jaWF0ZWQKKyAgICAgICAgU1ZHRWxl
bWVudCBhbmQgYWxsIHRoZSBpbnN0YW5jZXMgdGhhdCByZWZlcmVuY2VzIHRoaXMgZWxlbWVudC4K
KworICAgICAgICBUaGUgcGxhbiBpcyB0byByZW1vdmUgYWxsIHRoZSBTVkcgdGVhciBvZmYgb2Jq
ZWN0cyBsaWtlIHdoYXQgdGhpcyBwYXRjaAorICAgICAgICBkb2VzIGZvciBTVkdBbmltYXRlZElu
dGVnZXIuIFNvIGZvciBhIHBlcmlvZCBvZiB0aW1lIHRoZSBvbGQgY29kZSBhbmQgdGhlCisgICAg
ICAgIG5ldyBjb2RlIHdpbGwgY28tZXhpc3QgdG9nZXRoZXIuIFRoZXNlIHRoaW5ncyB0byBjb25z
aWRlciB3aGVuIHJldmlld2luZworICAgICAgICB0aGlzIHBhdGNoOgorCisgICAgICAgIC0tIFNW
R0FuaW1hdGVkRWxlbWVudEJhc2Ugd2FzIHJlLWZhY3RvcmVkIHRvIHVzZSBTVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyQmFzZQorICAgICAgICB3aGljaCBpcyBpbmhlcml0ZWQgYnkgU1ZH
TGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlciBhbmQKKyAgICAgICAgU1ZHQXR0cmli
dXRlQW5pbWF0aW9uQ29udHJvbGxlci4gVGhlIHRlYXItb2ZmIHByb3BlcnRpZXMgY29kZSB3aGlj
aCB1c2VzCisgICAgICAgIFNWR0FuaW1hdGVkVHlwZSBub3cgbGl2ZXMgaW4gU1ZHTGVnYWN5QXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci4gVGhlCisgICAgICAgIG5ldyBjb2RlIHdhcyBhZGRl
ZCB0byBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLiBUaGUgcGxhbiBpcyB0byAKKyAg
ICAgICAgcmVtb3ZlIHRoZSB0aHJlZSBhbmltYXRpb24gY29udHJvbGxlcnMgYW5kIHRvIG1vdmUg
dGhlIGNvZGUgb2YKKyAgICAgICAgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlciB0byBT
VkdBbmltYXRlZEVsZW1lbnRCYXNlIHdoZW4gYWxsIHRoZSB0ZWFyCisgICAgICAgIG9mZiBjb2Rl
IGlzIHJlbW92ZWQuCisKKyAgICAgICAgLS0gU1ZHRWxlbWVudCBub3cga2VlcHMgdHdvIHJlZ2lz
dHJpZXMgb25lIGZvciB0aGUgdGVhci1vZmYgd29ybGQgYW5kIHRoZQorICAgICAgICBvdGhlciBm
b3IgdGhlIG5ldyB3b3JsZC4gRXZlbnR1YWxseSB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdGVhci1v
ZmYgcmVnaXN0cnkuCisKKyAgICAgICAgLS0gU1ZHRWxlbWVudCB3aWxsIGRpZmZlcmVudGlhdGUg
YmV0d2VlbiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgYnkgdGhlCisgICAgICAgIHRoZSBtZXRo
b2QgaXNBbmltYXRlZEF0dHJpYnV0ZSgpLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIp
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpTVkdBbmltYXRlRWxlbWVudEJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjphdHRyaWJ1dGVBbmltYXRpb25D
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6YXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVFbGVtZW50QmFzZTo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6ZGV0ZXJtaW5lQW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNl
OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVF
bGVtZW50QmFzZTo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZUZyb21B
bmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OnJl
c2V0QW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFz
ZTo6Y2xlYXJBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1l
bnRCYXNlOjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlRWxlbWVudEJhc2U6OmlzQWRkaXRpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OnNldFRhcmdldEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpzZXRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpoYXNJbnZhbGlkQ1NTQXR0cmlidXRl
VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6Omhh
c1ZhbGlkQXR0cmlidXRlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0
eVR5cGVzQXJlQ29uc2lzdGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcHBseUNT
U1Byb3BlcnR5VG9UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQ1NT
UHJvcGVydHlGcm9tVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q1NT
UHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6bm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENo
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6
OmFuaW1hdGVkUHJvcGVydHlUeXBlU3VwcG9ydHNBZGRpdGlvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OnJlc2V0QW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnRC
YXNlOjplbnN1cmVBbmltYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVF
bGVtZW50QmFzZS5oOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRy
aWJ1dGVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1
dGVOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRl
VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRJbnRlZ2Vy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmg6IFJlbW92
ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5oOgorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNoZWNr
SW52YWxpZENTU0F0dHJpYnV0ZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdBbmlt
YXRpb25FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojph
dHRyaWJ1dGVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1l
bnQ6Omhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0b3JGYWN0b3J5Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRv
ckZhY3Rvcnk6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1h
dGlvbkNvbnRyb2xsZXI6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0b3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6
aXNEaXNjcmV0ZUFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQWRkaXRpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRl
VG9BdEVuZE9mRHVyYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyOjpyZXNldEFuaW1hdGVkVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmFw
cGx5UmVzdWx0c1RvVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNsZWFyQW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZURpc3RhbmNlKToKKyAgICAg
ICAgKiBzdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdG9ySWZF
eGlzdHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9s
bGVyQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlckJhc2U6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlOjpk
ZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSk6CisgICAgICAgICogc3ZnL1NWR0F0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXplQWxsQW5p
bWF0ZWRTVkdBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c3luY2hy
b25pemVBbmltYXRlZFNWR0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50Ojpjb21taXRQcm9wZXJ0eUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50Ojppc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6aXNBbmltYXRlZEF0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50OjpjcmVhdGVBbmltYXRvcik6CisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnByb3BlcnR5UmVnaXN0cnkgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6U1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQ6OnJlZ2lzdGVyQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjpvcmRlclhJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpvcmRlcllJZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnJlZ2lzdGVyQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0xlZ2Fj
eUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OlNWR0xlZ2FjeUF0dHJp
YnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0ZWRUeXBlQW5pbWF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBZGRp
dGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRp
b25Db250cm9sbGVyOjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJv
bUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVUb0F0
RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5VHlwZXNBcmVD
b25zaXN0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlc2V0QW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xl
Z2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OnJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldCk6CisgICAgICAgIChXZWJDb3Jl
OjphcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6Om5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpub3RpZnlUYXJnZXRBbmRJbnN0YW5jZXNBYm91dEFuaW1WYWxDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6YXBwbHlSZXN1
bHRzVG9UYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y2xlYXJBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRGlzdGFuY2UpOgor
ICAgICAgICAqIHN2Zy9TVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVOYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5Ojpz
ZXRCYXNlVmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVy
dHk6OnNldEJhc2VWYWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBy
aW1pdGl2ZVByb3BlcnR5OjpiYXNlVmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6OnNldEFuaW1WYWwpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eTo6YW5pbVZhbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5OjphbmltVmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHk6OmN1cnJlbnRWYWx1ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5OjpTVkdB
bmltYXRlZFByaW1pdGl2ZVByb3BlcnR5KToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFByb3BlcnR5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
ZFByb3BlcnR5Ojpvd25lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBy
b3BlcnR5Ojpjb21taXRQcm9wZXJ0eUNoYW5nZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkUHJvcGVydHk6OmlzQXR0YWNoZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZWRQcm9wZXJ0eTo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJv
cGVydHk6OmNvbnRleHRFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkUHJvcGVydHk6OmJhc2VWYWxBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFByb3BlcnR5OjphbmltVmFsQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6aXNEaXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5OjpzZXREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFByb3BlcnR5OjpzeW5jaHJvbml6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlZFByb3BlcnR5Ojppc0FuaW1hdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFByb3BlcnR5OjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFByb3BlcnR5OjpzdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVkUHJvcGVydHk6Omluc3RhbmNlU3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6aW5zdGFuY2VTdG9wQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6OlNWR0FuaW1hdGVkUHJvcGVydHkpOgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nvci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNjZXNz
b3JJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJv
cGVydHlBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjo6YXBwZW5kQW5pbWF0ZWRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3I6OlNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRv
cik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3Bl
cnR5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
b3BlcnR5UGFpckFjY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvcjo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvcik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29yOjpzaW5n
bGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nv
cjo6cHJvcGVydHkxIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQWNjZXNzb3I6OnByb3BlcnR5MiBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaDogQWRkZWQuCisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3I6OmFw
cGVuZEFuaW1hdGVkSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVBhaXJBbmltYXRvcjo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvcik6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvckltcGwu
aDogQWRkZWQuCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVG
dW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkFkZGl0aXZl
RnVuY3Rpb246OlNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbjo6cHJvZ3Jlc3MpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbjo6dG9B
dEVuZE9mRHVyYXRpb24gY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRpb25JbnRlZ2VyRnVuY3Rpb246OnByb2dyZXNzKToKKyAgICAgICAgKiBzdmcv
cHJvcGVydGllcy9TVkdBbmltYXRpb25GdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkZ1bmN0aW9uOjppc0Rpc2NyZXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkZ1bmN0aW9uOjpjYWxjdWxhdGVEaXN0YW5jZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25GdW5jdGlvbjo6U1ZHQW5pbWF0aW9uRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRnVuY3Rpb246OmFkZEZyb21BbmRU
b1ZhbHVlcyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0dHJpYnV0ZUFuaW1hdG9yOjphcHBs
eUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0
dHJpYnV0ZUFuaW1hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRl
QW5pbWF0b3I6OlNWR0F0dHJpYnV0ZUFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0F0
dHJpYnV0ZUFuaW1hdG9yOjppc0Rpc2NyZXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0F0dHJpYnV0ZUFuaW1hdG9yOjpzZXRGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQXR0cmlidXRlQW5pbWF0b3I6OnNldEZyb21BbmRCeVZhbHVlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRvcjo6c2V0VG9BdEVuZE9mRHVyYXRpb25WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1dGVBbmltYXRvcjo6Y2FsY3VsYXRlRGlzdGFu
Y2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJv
eHkuY3BwOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHku
aDoKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVSZWdpc3RyeS5oOgorICAg
ICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR01lbWJlckFjY2Vzc29yLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTWVtYmVyQWNjZXNzb3I6OmRldGFjaCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdNZW1iZXJBY2Nlc3Nvcjo6aXNBbmltYXRlZFByb3BlcnR5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR01lbWJlckFjY2Vzc29yOjppc0FuaW1hdGVkTGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01lbWJlckFjY2Vzc29yOjptYXRjaGVzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR01lbWJlckFjY2Vzc29yOjpzeW5jaHJvbml6ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdNZW1iZXJBY2Nlc3Nvcjo6Y3JlYXRlQW5pbWF0b3IgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWVtYmVyQWNjZXNzb3I6OmFwcGVuZEFuaW1hdGVk
SW5zdGFuY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1BvaW50ZXJNZW1i
ZXJBY2Nlc3Nvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvaW50ZXJNZW1iZXJB
Y2Nlc3Nvcjo6U1ZHUG9pbnRlck1lbWJlckFjY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BvaW50ZXJNZW1iZXJBY2Nlc3Nvcjo6cHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUG9pbnRlck1lbWJlckFjY2Vzc29yOjpzaW5nbGV0b24pOgorICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR1Byb3BlcnR5Lmg6IEFkZGVkLgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVz
L1NWR1Byb3BlcnR5T3duZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eU93bmVyOjpvd25lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eU93bmVy
OjphdHRyaWJ1dGVDb250ZXh0RWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eU93bmVyOjpjb21taXRQcm9wZXJ0eUNoYW5nZSk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5OjpTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5OjpyZWdpc3RlclByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTo6ZW51bWVy
YXRlUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlPd25lclJlZ2lz
dHJ5Ojppc0tub3duQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5T3du
ZXJSZWdpc3RyeTo6ZW51bWVyYXRlUmVjdXJzaXZlbHlCYXNlVHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5OjpmaW5kQWNjZXNzb3IpOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5UmVnaXN0cnkuaDogQWRkZWQuCisKIDIwMTktMDMt
MTUgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgWyBNb2phdmUg
V0sxIF0gTGF5b3V0IFRlc3Qgc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2Utb2RkLW5hbWVzLmh0
bWwgaXMgZmFpbGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMjczLDggKzIyNzMs
NiBAQCBzdmcvU1ZHQW5pbWF0ZWRBbmdsZS5jcHAKIHN2Zy9TVkdBbmltYXRlZEJvb2xlYW4uY3Bw
CiBzdmcvU1ZHQW5pbWF0ZWRDb2xvci5jcHAKIHN2Zy9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNw
cAotc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKLXN2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRp
b25hbEludGVnZXIuY3BwCiBzdmcvU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCiBzdmcvU1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0LmNwcAogc3ZnL1NWR0FuaW1hdGVkTnVtYmVyLmNwcApAQCAtMjI4OCw2ICsy
Mjg2LDggQEAgc3ZnL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAogc3ZnL1NWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdC5jcHAKIHN2Zy9TVkdBbmltYXRlZFR5cGVBbmltYXRvci5jcHAKIHN2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAorc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CitzdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuY3BwCiBzdmcvU1ZHQ2ly
Y2xlRWxlbWVudC5jcHAKIHN2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCiBzdmcvU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCkBAIC0yMzQ1LDYgKzIzNDUsNyBAQCBzdmcv
U1ZHSEtlcm5FbGVtZW50LmNwcAogc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFn
ZUxvYWRlci5jcHAKIHN2Zy9TVkdMYW5nU3BhY2UuY3BwCitzdmcvU1ZHTGVnYWN5QXR0cmlidXRl
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKIHN2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAogc3ZnL1NW
R0xlbmd0aExpc3RWYWx1ZXMuY3BwCiBzdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCkBAIC0yNDI0LDYg
KzI0MjUsOCBAQCBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAogCiBzdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAorc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRQcm9wZXJ0eS5jcHAKK3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmNw
cAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5jcHAKIHN2Zy9wcm9wZXJ0
aWVzL1NWR0xlZ2FjeUFuaW1hdGVkUHJvcGVydHkuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mjk3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw2IEBACiAJCTA4MTY2OERBMTI1NjAzRDUwMDZG
MjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExh
eW91dEVuZ2luZS5oICovOyB9OwogCQkwODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxl
bWVudFJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87
IH07CiAJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0
RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovOyB9OwotCQkwODIzRDE1OTEyN0FE
NkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIzRDE1ODEyN0FENkFDMDAwRUJDOTUgLyogU1ZH
QW5pbWF0ZWRJbnRlZ2VyLmggKi87IH07CiAJCTA4MjUwOTM5MTI4QkQ0RDgwMEUyRUQ4RSAvKiBT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MjUwOTM4MTI4QkQ0RDgwMEUyRUQ4RSAvKiBTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3QuaCAqLzsgfTsKIAkJMDgyREU0MkQxMjkyNjIxNjAwRDkyM0RGIC8qIFNWR1Bh
dGhTZWdXaXRoQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDgyREU0MkMxMjkyNjIxNjAwRDkyM0RGIC8qIFNWR1BhdGhTZWdXaXRoQ29udGV4
dC5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oICovOyB9OwpAQCAtMjEzNiw3ICsyMTM1LDYgQEAKIAkJNzFEQ0I3MDIxNTY4MTk3NjAwODYy
MjcxIC8qIEpTU1ZHWm9vbUFuZFBhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzFEQ0I3MDAxNTY4MTk3NjAwODYyMjcxIC8qIEpTU1ZHWm9vbUFuZFBh
bi5oICovOyB9OwogCQk3MUUyMTgzQTE3MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFMjE4
MzgxNzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLzsgfTsKIAkJNzFFMkM0
MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUUyQzQyNDIxQzkzNTFEMDAyNEY4
QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQk3MUU2MjNEMTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5p
bWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUU2MjNDRjE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmggKi87IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1
QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIz
OEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzFGQjk2N0IxMzgzRDY0NjAwQUM4QTRDIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb25Q
cm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcxRkI5NjdBMTM4M0Q2NDYwMEFDOEE0QyAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9u
UHJvcGVydHlUZWFyT2ZmLmggKi87IH07CkBAIC01NjAyLDcgKzU2MDAsNiBAQAogCQkwODFBQThE
OTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWls
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxRUJGMzkwRkQzNEY0MTAw
REE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
ODIzRDE1ODEyN0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkSW50ZWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwODI1MDkzODEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODJE
RTQyQzEyOTI2MjE2MDBEOTIzREYgLyogU1ZHUGF0aFNlZ1dpdGhDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTZWdXaXRoQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzY4OSw3ICs3Njg2LDYgQEAKIAkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5
IC8qIEltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNFREQ2N0Mx
QjQ4NURCRjAwNjQwRTc1IC8qIENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNFREQ2N0QxQjQ4NURCRjAwNjQwRTc1IC8q
IENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbWJpbmVkRmlsdGVyc0FscGhhYmV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQzRjZGRDk1MTNCQ0QwQjEwMDIyNDA1MiAvKiBTVkdBbmltYXRlZEludGVnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQw
IC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NDE1MjkyRDBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQyOTU2Q0EyMThBNkQz
MDAwODBEQjU0IC8qIERpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBEaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtODY2OSwxMSArODY2NSwzNSBAQAogCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVBRjE0RTMx
RUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVU
SVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVBRjE0RTQxRUFB
QzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVUSVJlZ2lzdHJ5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkUwMjU3MjIzQjI5QzAwMDMyRjA4
QSAvKiBTVkdQcm9wZXJ0eVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5UmVn
aXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCRTAyNTkyMjNCMjlDMTAw
MzJGMDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUJFMDI1QTIyM0IyOUMyMDAzMkYwOEEgLyogU1ZHUG9p
bnRlck1lbWJlckFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BvaW50ZXJNZW1iZXJBY2Nl
c3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJFMDI1QjIyM0IyOUMyMDAz
MkYwOEEgLyogU1ZHQW5pbWF0aW9uRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
aW9uRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCRTAyNUMyMjNC
MjlDMzAwMzJGMDhBIC8qIFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTVCRTAyNUQyMjNCMjlDNDAwMzJGMDhBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1QkUwMjVFMjIzQjI5QzQwMDMyRjA4QSAvKiBTVkdBbmltYXRlZFBy
b3BlcnR5UGFpckFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQ
YWlyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCRTAyNUYyMjNC
MjlDNTAwMzJGMDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ3MEQyMDIyM0IwMDkxMDAwNDRCOEUgLyogU1ZH
TGVnYWN5QW5pbWF0ZWRQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdMZWdhY3lBbmltYXRlZFByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU1RDcwRDIxMjIzQjAwQkIwMDA0NEI4RSAvKiBTVkdMZWdhY3lBbmltYXRlZFByb3BlcnR5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlZ2FjeUFuaW1hdGVkUHJvcGVydHkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ3MEQyMjIyM0IwMEVBMDAwNDRCOEUgLyog
U1ZHTGVnYWN5UHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
TGVnYWN5UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFQzk1OTcy
MDY5QzkyRDAwN0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTVFRTUzNTQyMjNCMjlFOTAwRkJBOTQ0IC8qIFNWR01lbWJlckFjY2Vzc29yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01lbWJlckFjY2Vzc29yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzU2MjIzQjI5RjcwMEZCQTk0NCAvKiBTVkdBbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTVFRTUzNTcyMjNCMjlGODAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJpbWl0aXZl
UHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQ
cmltaXRpdmVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUVFNTM1
ODIyM0IyOUY5MDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29ySW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNz
b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzU5MjIzQjI5RkEw
MEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzVBMjIzQjI5RkIwMEZCQTk0NCAvKiBTVkdBbmlt
YXRlZFByb3BlcnR5QW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU1RUU1MzVCMjIzQjJBMEMwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFu
aW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFByb3BlcnR5UGFpckFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1NUVFNTM1QzIyM0IyQTBEMDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVFRTUzNUQyMjNCMkEwRDAwRkJBOTQ0
IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3JJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3JJbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzVFMjIzQjJBMEUwMEZCQTk0NCAv
KiBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzVGMjIzQjJBMEYwMEZCQTk0NCAvKiBTVkdB
bmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3du
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlPd25lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUVFNTM2MTIyM0IyQTIyMDBGQkE5NDQg
LyogU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NUVFNTM2MjIyM0IyQTIzMDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAv
KiBTVkdQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9w
ZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUVFNTM2NDIyM0IyQTI0MDBG
QkE5NDQgLyogU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQXR0cmlidXRlQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVGQTdGRUYyMTBGQTM4NjAwNUFFRkU3IC8qIFNWR0F0dHJpYnV0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdBdHRyaWJ1dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVG
QTdGRjQyMTBGQjY4ODAwNUFFRkU3IC8qIFNWR0F0dHJpYnV0ZUFjY2Vzc29yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0F0dHJpYnV0ZUFjY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RkE3RkY2MjEwRkJFM0UwMDVBRUZFNyAvKiBTVkdBdHRy
aWJ1dGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBdHRyaWJ1dGVSZWdpc3RyeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ3Niw4ICs5NDk2LDYgQEAKIAkJNzFFMjE4
MzgxNzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IG5hbWUgPSBQbHVnSW5zUmVzb3VyY2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL1BsdWdJbnNSZXNvdXJjZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJNzFFMjE4MzkxNzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXNE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBuYW1lID0gUGx1Z0luc1Jlc291
cmNlc0RhdGEuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9QbHVnSW5zUmVzb3Vy
Y2VzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTcxRTJD
NDI0MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25FZmZlY3RQaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk3MUU2MjNDRTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcxRTYyM0NGMTUxRjcyQTYwMDM2RTJGNCAvKiBTVkdBbmlt
YXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlcklELmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRUQ2MjAyQjM4OEMwMEQ3QzQxMSAvKiBBbmltYXRpb25F
ZmZlY3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFuaW1hdGlvbkVmZmVjdC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDg1LDYgKzk1MDMs
MTIgQEAKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9u
RWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2Rjcx
REQ0Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzFGQjk2N0ExMzgzRDY0NjAwQUM4QTRDIC8qIFNWR0FuaW1hdGVkRW51
bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjNGOTdCQzIyMzhFRTA4MDA3RjA3OUMgLyogU1ZHQXR0cmlidXRl
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdBdHRyaWJ1dGVB
bmltYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
Rjk3QkQyMjM4RUUwODAwN0YwNzlDIC8qIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjNGOTdCRTIyMzk1MTJEMDA3RjA3OUMgLyogU1ZH
TGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QkYyMjM5NTEyRDAwN0YwNzlDIC8qIFNWR0xlZ2FjeUF0
dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTGVnYWN5QXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjNGOTdDMDIyMzk2Qjg4MDA3RjA3OUMgLyogU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxl
ckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzRjk3QzEyMjM5NzcyNTAw
N0YwNzlDIC8qIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVY
VEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkEx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTYxNzgsMTMgKzE2MjAyLDMxIEBACiAJCQkJMDg4QTBERkIxMjZFRjFEQjAw
OTc4RjdBIC8qIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oICovLAogCQkJCTU1RkE3
RkZDMjExMEY4MTMwMDVBRUZFNyAvKiBTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmLmNwcCAqLywKIAkJCQkwODlBOEUwNjEyOEQ4QjNEMDBFN0E1MzQgLyogU1ZHQW5pbWF0ZWRQ
YXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oICovLAorCQkJCTU1RUU1MzU3MjIzQjI5RjgwMEZC
QTk0NCAvKiBTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5LmggKi8sCisJCQkJNTVCRTAyNUQy
MjNCMjlDNDAwMzJGMDhBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHkuY3BwICovLAorCQkJCTU1RUU1
MzYyMjIzQjJBMjMwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5LmggKi8sCisJCQkJNTVF
RTUzNTkyMjNCMjlGQTAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nvci5oICov
LAorCQkJCTU1RUU1MzU4MjIzQjI5RjkwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5QWNj
ZXNzb3JJbXBsLmggKi8sCisJCQkJNTVFRTUzNUEyMjNCMjlGQjAwRkJBOTQ0IC8qIFNWR0FuaW1h
dGVkUHJvcGVydHlBbmltYXRvci5oICovLAorCQkJCTU1RUU1MzU2MjIzQjI5RjcwMEZCQTk0NCAv
KiBTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3JJbXBsLmggKi8sCiAJCQkJMDg4QTBERkQxMjZF
RjFEQjAwOTc4RjdBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlEZXNjcmlwdGlvbi5oICovLAorCQkJ
CTU1RUU1MzVDMjIzQjJBMEQwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5SW1wbC5oICov
LAorCQkJCTU1QkUwMjVFMjIzQjI5QzQwMDMyRjA4QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5UGFp
ckFjY2Vzc29yLmggKi8sCisJCQkJNTVFRTUzNUQyMjNCMkEwRDAwRkJBOTQ0IC8qIFNWR0FuaW1h
dGVkUHJvcGVydHlQYWlyQWNjZXNzb3JJbXBsLmggKi8sCisJCQkJNTVFRTUzNUYyMjNCMkEwRjAw
RkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IuaCAqLywKKwkJCQk1NUVF
NTM1QjIyM0IyQTBDMDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvcklt
cGwuaCAqLywKIAkJCQkwODhBMERGRjEyNkVGMURCMDA5NzhGN0EgLyogU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVRlYXJPZmYuaCAqLywKIAkJCQk1NUZBN0ZGRTIxMTEwRTZFMDA1QUVGRTcgLyogU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVR5cGUuaCAqLywKIAkJCQkwODUyNUU2MjEyNzhDMDAxMDBBODQ3NzggLyog
U1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCAqLywKIAkJCQkwODVBMTU5MjEyODlB
OEREMDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgg
Ki8sCisJCQkJNTVCRTAyNUYyMjNCMjlDNTAwMzJGMDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZl
RnVuY3Rpb24uaCAqLywKKwkJCQk1NUVFNTM1RTIyM0IyQTBFMDBGQkE5NDQgLyogU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uLmggKi8sCisJCQkJNTVCRTAyNTkyMjNCMjlDMTAwMzJG
MDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaCAqLywKKwkJCQk1
NUJFMDI1QjIyM0IyOUMyMDAzMkYwOEEgLyogU1ZHQW5pbWF0aW9uRnVuY3Rpb24uaCAqLywKIAkJ
CQk1NUZBN0ZFRjIxMEZBMzg2MDA1QUVGRTcgLyogU1ZHQXR0cmlidXRlLmggKi8sCiAJCQkJNTVG
QTdGRjQyMTBGQjY4ODAwNUFFRkU3IC8qIFNWR0F0dHJpYnV0ZUFjY2Vzc29yLmggKi8sCisJCQkJ
NTVFRTUzNjEyMjNCMkEyMjAwRkJBOTQ0IC8qIFNWR0F0dHJpYnV0ZUFuaW1hdG9yLmNwcCAqLywK
KwkJCQk1NUVFNTM2NDIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCAq
LywKIAkJCQk3QTNFQkVBQzIxQkYwOTIxMDAwRDA0M0QgLyogU1ZHQXR0cmlidXRlT3duZXJQcm94
eS5jcHAgKi8sCiAJCQkJNTUzNDZBRjAyMTE1MEZBRjAwNTlCQ0REIC8qIFNWR0F0dHJpYnV0ZU93
bmVyUHJveHkuaCAqLywKIAkJCQk1NTM0NkFGQTIxMTdGRkFGMDA1OUJDREQgLyogU1ZHQXR0cmli
dXRlT3duZXJQcm94eUltcGwuaCAqLywKQEAgLTE2MTk1LDYgKzE2MjM3LDEyIEBACiAJCQkJMDgx
MDc2NDMxMjgyODU1NjAwN0M2M0JBIC8qIFNWR0xpc3RQcm9wZXJ0eS5oICovLAogCQkJCTA4OEEw
RTAwMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmLmggKi8sCiAJCQkJ
MDhDQTNENDMxMjg5NEEzODAwRkZGMjYwIC8qIFNWR01hdHJpeFRlYXJPZmYuaCAqLywKKwkJCQk1
NUVFNTM1NDIyM0IyOUU5MDBGQkE5NDQgLyogU1ZHTWVtYmVyQWNjZXNzb3IuaCAqLywKKwkJCQk1
NUJFMDI1QTIyM0IyOUMyMDAzMkYwOEEgLyogU1ZHUG9pbnRlck1lbWJlckFjY2Vzc29yLmggKi8s
CisJCQkJNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi8sCisJCQkJ
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLywKKwkJCQk1
NUJFMDI1QzIyM0IyOUMzMDAzMkYwOEEgLyogU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5LmggKi8s
CisJCQkJNTVCRTAyNTcyMjNCMjlDMDAwMzJGMDhBIC8qIFNWR1Byb3BlcnR5UmVnaXN0cnkuaCAq
LywKIAkJCQkwODhBMEUwMjEyNkVGMURCMDA5NzhGN0EgLyogU1ZHUHJvcGVydHlUZWFyT2ZmLmgg
Ki8sCiAJCQkJMDg4QTBFMDMxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VHJhaXRzLmgg
Ki8sCiAJCQkJMDg4MEY3MEQxMjgyQjQ2RDAwOTQ4NTA1IC8qIFNWR1N0YXRpY0xpc3RQcm9wZXJ0
eVRlYXJPZmYuaCAqLywKQEAgLTI0MDYyLDExICsyNDExMCw3IEBACiAJCQkJNzFDQzdBMUYxNTJB
MEJGRTAwOUVFQUY5IC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwICovLAogCQkJCTA4RDQ2
Q0UyMTI3QUQ1RkMwMDg5Njk0QiAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmggKi8sCiAJCQkJ
QjIyMjc3RTgwRDAwQkYxRjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb24uaWRsICov
LAotCQkJCTQzRjZGRDk1MTNCQ0QwQjEwMDIyNDA1MiAvKiBTVkdBbmltYXRlZEludGVnZXIuY3Bw
ICovLAotCQkJCTA4MjNEMTU4MTI3QUQ2QUMwMDBFQkM5NSAvKiBTVkdBbmltYXRlZEludGVnZXIu
aCAqLywKIAkJCQlCMjIyNzdFOTBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZWRJbnRlZ2Vy
LmlkbCAqLywKLQkJCQk3MUU2MjNDRTE1MUY3MkE2MDAzNkUyRjQgLyogU1ZHQW5pbWF0ZWRJbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCAqLywKLQkJCQk3MUU2MjNDRjE1MUY3MkE2MDAzNkUyRjQg
LyogU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmggKi8sCiAJCQkJNDM4MTc2M0Ex
M0E2OTdENDAwN0QxMTg3IC8qIFNWR0FuaW1hdGVkTGVuZ3RoLmNwcCAqLywKIAkJCQkwODkwMjFB
ODEyNkVGNURFMDA5MkQ1RUEgLyogU1ZHQW5pbWF0ZWRMZW5ndGguaCAqLywKIAkJCQlCMjIyNzdF
QTBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZWRMZW5ndGguaWRsICovLApAQCAtMjQxMTUs
NiArMjQxNTksMTAgQEAKIAkJCQlCMjIyNzgwMjBEMDBCRjFGMDA3MUI3ODIgLyogU1ZHQW5pbWF0
aW9uRWxlbWVudC5oICovLAogCQkJCUIyMjI3ODAzMEQwMEJGMUYwMDcxQjc4MiAvKiBTVkdBbmlt
YXRpb25FbGVtZW50LmlkbCAqLywKIAkJCQk0MzlEMzM0MjEzQTY5MTFDMDBDMjBGNEYgLyogU1ZH
QW5pbWF0b3JGYWN0b3J5LmggKi8sCisJCQkJNzIzRjk3QkMyMjM4RUUwODAwN0YwNzlDIC8qIFNW
R0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovLAorCQkJCTcyM0Y5N0JEMjIzOEVF
MDgwMDdGMDc5QyAvKiBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmggKi8sCisJCQkJ
NzIzRjk3QzEyMjM5NzcyNTAwN0YwNzlDIC8qIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xs
ZXJCYXNlLmNwcCAqLywKKwkJCQk3MjNGOTdDMDIyMzk2Qjg4MDA3RjA3OUMgLyogU1ZHQXR0cmli
dXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaCAqLywKIAkJCQlCMjIyNzgwNDBEMDBCRjFGMDA3
MUI3ODIgLyogc3ZnYXR0cnMuaW4gKi8sCiAJCQkJQjIyMjc4MDUwRDAwQkYxRjAwNzFCNzgyIC8q
IFNWR0NpcmNsZUVsZW1lbnQuY3BwICovLAogCQkJCUIyMjI3ODA2MEQwMEJGMUYwMDcxQjc4MiAv
KiBTVkdDaXJjbGVFbGVtZW50LmggKi8sCkBAIC0yNDI4NCw2ICsyNDMzMiw4IEBACiAJCQkJQjI4
QzZBMjEwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0ltYWdlTG9hZGVyLmggKi8sCiAJCQkJQjIyMjc4
OTkwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xhbmdTcGFjZS5jcHAgKi8sCiAJCQkJQjIyMjc4OUEw
RDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xhbmdTcGFjZS5oICovLAorCQkJCTcyM0Y5N0JFMjIzOTUx
MkQwMDdGMDc5QyAvKiBTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcCAq
LywKKwkJCQk3MjNGOTdCRjIyMzk1MTJEMDA3RjA3OUMgLyogU1ZHTGVnYWN5QXR0cmlidXRlQW5p
bWF0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTdDRTU4RDUxMUREN0IwOTMwMDEyODU1MiAvKiBT
VkdMZW5ndGguaCAqLywKIAkJCQlCMjIyNzg5RTBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHTGVuZ3Ro
LmlkbCAqLywKIAkJCQk3MTM0NDk2QjE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4
dC5jcHAgKi8sCkBAIC0zMTg0OCw4ICszMTg5OCw2IEBACiAJCQkJNDNBNjI1RjgxM0IzMzA0MDAw
QUM5NEI4IC8qIFNWR0FuaW1hdGVkQ29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RDQ2Q0Uz
MTI3QUQ1RkMwMDg5Njk0QiAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3MUZCOTY3QjEzODNENjQ2MDBBQzhBNEMgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
blByb3BlcnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgyM0QxNTkxMjdBRDZBQzAw
MEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzFFNjIz
RDExNTFGNzJBNjAwMzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDg5MDIxQTkxMjZFRjVERTAwOTJENUVBIC8qIFNWR0FuaW1h
dGVkTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODkwMjFBRDEyNkVGNUU5MDA5MkQ1RUEg
LyogU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhBMEUwNDEy
NkVGMURCMDA5NzhGN0EgLyogU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjQ5
OSw4ICsyNDk5LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDEgaWYgJGhhc1BhcmVudCAm
JiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3R9OwotCiAgICAgJGhlYWRlckluY2x1ZGVzeyJTVkdFbGVtZW50LmgifSA9IDEgaWYgJGNsYXNz
TmFtZSA9fiAvXkpTU1ZHLzsKIAogICAgIG15ICRpbXBsVHlwZSA9IEdldEltcGxDbGFzc05hbWUo
JGludGVyZmFjZSk7CkBAIC0yNTEyLDggKzI1MTAsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwogCiAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkaW50ZXJmYWNlLT50eXBl
KSkgewotICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7Cisg
ICAgICAgICRoZWFkZXJJbmNsdWRlc3siU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaCJ9ID0gMTsK
ICAgICB9IGVsc2UgeworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgi
fSA9IDEgaWYgJGhhc1BhcmVudCAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntK
U0dlbmVyYXRlVG9OYXRpdmVPYmplY3R9OwogICAgICAgICAjIEltcGxlbWVudGF0aW9uIGNsYXNz
IGZvcndhcmQgZGVjbGFyYXRpb24KICAgICAgICAgaWYgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRl
cmZhY2UpKSB7CiAgICAgICAgICAgICBBZGRDbGFzc0ZvcndhcmRJZk5lZWRlZCgkaW50ZXJmYWNl
LT50eXBlKTsKQEAgLTI1NjMsNyArMjU2Miw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsgIAogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEFkZEluY2x1ZGVzRm9ySW1wbGVtZW50YXRpb25UeXBlSW5IZWFkZXIoJGltcGxUeXBlKTsK
KyAgICAgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFj
ZS0+dHlwZSkpIHsKKyAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9ySW1wbGVtZW50YXRpb25UeXBl
SW5IZWFkZXIoJGltcGxUeXBlKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPCRpbXBsVHlwZT4mJiBp
bXBsKVxuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4oZ2xvYmFsT2JqZWN0LT52bSgp
LmhlYXApKSAkY2xhc3NOYW1lKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSk7XG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJh
c2UuY3BwCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjQsMTQgKzI0
LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUVsZW1lbnRC
YXNlLmgiCiAKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTUHJv
cGVydHlQYXJzZXIuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0b3JGYWN0b3J5LmgiCisjaW5jbHVkZSAi
U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
MCwzODEgKzM3LDEwMSBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoU1ZHQW5pbWF0ZUVs
CiAKIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IFNWR0FuaW1h
dGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2FuaW1hdGVkUHJvcGVydHlU
eXBlKEFuaW1hdGVkU3RyaW5nKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjph
bmltYXRlVGFnKSB8fCBoYXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpIHx8IGhhc1RhZ05hbWUo
U1ZHTmFtZXM6OmFuaW1hdGVDb2xvclRhZykgfHwgaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0
ZVRyYW5zZm9ybVRhZykpOwogfQogCiBTVkdBbmltYXRlRWxlbWVudEJhc2U6On5TVkdBbmltYXRl
RWxlbWVudEJhc2UoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKQorU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJh
c2UmIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6YXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcigp
CiB7Ci0gICAgaWYgKCF0aGlzLT50YXJnZXRFbGVtZW50KCkpCisgICAgQVNTRVJUKHRhcmdldEVs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKCFoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpKTsKKwor
ICAgIGlmICghbV9hdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyKSB7CisgICAgICAgIGlmICh0
YXJnZXRFbGVtZW50KCktPmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1l
KCkpKQorICAgICAgICAgICAgbV9hdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyPigqdGhpcywgKnRhcmdl
dEVsZW1lbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlcj4oKnRoaXMsICp0YXJnZXRFbGVtZW50KCkpOworICAgIH0KKworICAgIHJl
dHVybiAqbV9hdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOworfQorCitib29sIFNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAo
IXRhcmdldEVsZW1lbnQoKSB8fCBoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5VHlwZSAhPSBB
bmltYXRlZFVua25vd24gJiYgIWhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKCk7CisgICAgaWYg
KGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKCp0YXJnZXRFbGVtZW50KCkpICE9IEFuaW1h
dGVkVW5rbm93bikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gdGFyZ2V0RWxl
bWVudCgpLT5pc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSgpKTsKIH0K
IAogQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpkZXRlcm1pbmVB
bmltYXRlZFByb3BlcnR5VHlwZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBjb25zdAogewot
ICAgIGF1dG8gcHJvcGVydHlUeXBlcyA9IHRhcmdldEVsZW1lbnQuYW5pbWF0ZWRQcm9wZXJ0eVR5
cGVzRm9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgaWYgKHByb3BlcnR5VHlwZXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQW5pbWF0ZWRVbmtub3duOwotCi0gICAgQVNTRVJU
KHByb3BlcnR5VHlwZXMuc2l6ZSgpIDw9IDIpOwotICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5
cGUgPSBwcm9wZXJ0eVR5cGVzWzBdOwotICAgIGlmIChoYXNUYWdOYW1lKFNWR05hbWVzOjphbmlt
YXRlQ29sb3JUYWcpICYmIHR5cGUgIT0gQW5pbWF0ZWRDb2xvcikKLSAgICAgICAgcmV0dXJuIEFu
aW1hdGVkVW5rbm93bjsKLQotICAgIC8vIEFuaW1hdGlvbnMgb2YgdHJhbnNmb3JtIGxpc3RzIGFy
ZSBub3QgYWxsb3dlZCBmb3IgPGFuaW1hdGU+IG9yIDxzZXQ+Ci0gICAgLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHL2FuaW1hdGUuaHRtbCNBbmltYXRpb25BdHRyaWJ1dGVzQW5kUHJvcGVydGll
cwotICAgIGlmICh0eXBlID09IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCAmJiAhaGFzVGFnTmFtZShT
VkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykpCi0gICAgICAgIHJldHVybiBBbmltYXRlZFVu
a25vd247Ci0KLSAgICAvLyBGb3J0dW5hdGVseSB0aGVyZSdzIGp1c3Qgb25lIHNwZWNpYWwgY2Fz
ZSBuZWVkZWQgaGVyZTogU1ZHTWFya2VyRWxlbWVudHMgb3JpZW50QXR0ciwgd2hpY2gKLSAgICAv
LyBjb3JyZXNwb25kcyB0byBTVkdBbmltYXRlZEFuZ2xlIG9yaWVudEFuZ2xlIGFuZCBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uIG9yaWVudFR5cGUuIFdlIGhhdmUgdG8KLSAgICAvLyBmaWd1cmUgb3V0
IHdob3NlIHZhbHVlIHRvIGNoYW5nZSBoZXJlLgotICAgIGlmICh0YXJnZXRFbGVtZW50Lmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6Om1hcmtlclRhZykgJiYgdHlwZSA9PSBBbmltYXRlZEFuZ2xlKSB7Ci0g
ICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzLnNpemUoKSA9PSAyKTsKLSAgICAgICAgQVNTRVJU
KHByb3BlcnR5VHlwZXNbMF0gPT0gQW5pbWF0ZWRBbmdsZSk7Ci0gICAgICAgIEFTU0VSVChwcm9w
ZXJ0eVR5cGVzWzFdID09IEFuaW1hdGVkRW51bWVyYXRpb24pOwotICAgIH0gZWxzZSBpZiAocHJv
cGVydHlUeXBlcy5zaXplKCkgPT0gMikKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5VHlwZXNbMF0g
PT0gcHJvcGVydHlUeXBlc1sxXSk7Ci0KLSAgICByZXR1cm4gdHlwZTsKKyAgICByZXR1cm4gU1ZH
QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJvcGVy
dHlUeXBlKCp0aGlzLCB0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpOwogfQogCiB2b2lk
IFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1l
bnQpCiB7Ci0gICAgQVNTRVJUKHJlc3VsdEVsZW1lbnQpOwotICAgIGF1dG8gdGFyZ2V0RWxlbWVu
dCA9IG1ha2VSZWZQdHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKLSAgICBpZiAoIXRhcmdldEVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgU2hvdWxkQXBwbHlBbmltYXRp
b24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LmdldCgp
LCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAKLSAgICBpZiAoc2hvdWxkQXBwbHkgPT0gRG9udEFwcGx5
QW5pbWF0aW9uKQorICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBkZXRlcm1pbmVBbmltYXRlZFBy
b3BlcnR5VHlwZSgqdGFyZ2V0RWxlbWVudCkpOwotCi0gICAgQVNTRVJUKHBlcmNlbnRhZ2UgPj0g
MCAmJiBwZXJjZW50YWdlIDw9IDEpOwotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBl
ICE9IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCB8fCBoYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRl
VHJhbnNmb3JtVGFnKSk7Ci0gICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5p
bWF0ZWRVbmtub3duKTsKLSAgICBBU1NFUlQobV9hbmltYXRvcik7Ci0gICAgQVNTRVJUKG1fYW5p
bWF0b3ItPnR5cGUoKSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKLSAgICBBU1NFUlQobV9m
cm9tVHlwZSk7Ci0gICAgQVNTRVJUKG1fZnJvbVR5cGUtPnR5cGUoKSA9PSBtX2FuaW1hdGVkUHJv
cGVydHlUeXBlKTsKLSAgICBBU1NFUlQobV90b1R5cGUpOwotCi0gICAgaWYgKHNob3VsZEFwcGx5
ID09IEFwcGx5WE1MQW5pbWF0aW9uIHx8IHNob3VsZEFwcGx5ID09IEFwcGx5WE1MYW5kQ1NTQW5p
bWF0aW9uKSB7Ci0gICAgICAgIC8vIFNWRyBET00gYW5pbVZhbCBhbmltYXRpb24gY29kZS1wYXRo
LgotICAgICAgICBpZiAobV9hbmltYXRvci0+ZmluZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJp
YnV0ZU5hbWUoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTVkdBbmltYXRlRWxlbWVudEJhc2UmIHJlc3Vs
dEFuaW1hdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxTVkdBbmltYXRlRWxlbWVudEJhc2U+KCpyZXN1
bHRFbGVtZW50KTsKLSAgICBBU1NFUlQocmVzdWx0QW5pbWF0aW9uRWxlbWVudC5tX2FuaW1hdGVk
VHlwZSk7Ci0gICAgQVNTRVJUKHJlc3VsdEFuaW1hdGlvbkVsZW1lbnQubV9hbmltYXRlZFByb3Bl
cnR5VHlwZSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKLQotICAgIGlmIChoYXNUYWdOYW1l
KFNWR05hbWVzOjpzZXRUYWcpKQotICAgICAgICBwZXJjZW50YWdlID0gMTsKLQotICAgIGlmIChj
YWxjTW9kZSgpID09IENhbGNNb2RlOjpEaXNjcmV0ZSkKLSAgICAgICAgcGVyY2VudGFnZSA9IHBl
cmNlbnRhZ2UgPCAwLjUgPyAwIDogMTsKLQotICAgIC8vIFRhcmdldCBlbGVtZW50IG1pZ2h0IGhh
dmUgY2hhbmdlZC4KLSAgICBtX2FuaW1hdG9yLT5zZXRDb250ZXh0RWxlbWVudCh0YXJnZXRFbGVt
ZW50LmdldCgpKTsKLQotICAgIC8vIEJlIHN1cmUgdG8gZGV0YWNoIGxpc3Qgd3JhcHBlcnMgYmVm
b3JlIHdlIG1vZGZpeSB0aGVpciB1bmRlcmx5aW5nIHZhbHVlLiBJZiB3ZSdkIGRvCi0gICAgLy8g
aWYgYWZ0ZXIgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIHJhbiB0aGUgY2FjaGVkIHBvaW50ZXJz
IGluIHRoZSBsaXN0IHByb3BlcnkgdGVhcgotICAgIC8vIG9mZnMgd291bGQgcG9pbnQgbm93aGVy
ZSwgYW5kIHdlIGNvdWxkbid0IGNyZWF0ZSBjb3BpZXMgb2YgdGhvc2UgdmFsdWVzIGFueW1vcmUs
Ci0gICAgLy8gd2hpbGUgZGV0YWNoaW5nLiBUaGlzIGlzIGNvdmVyZWQgYnkgYXNzZXJ0aW9ucywg
bW92aW5nIHRoaXMgZG93biB3b3VsZCBmaXJlIHRoZW0uCi0gICAgaWYgKCFtX2FuaW1hdGVkUHJv
cGVydGllcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fYW5pbWF0b3ItPmFuaW1WYWxXaWxsQ2hhbmdl
KG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLQotICAgIC8vIFZhbHVlcy1hbmltYXRpb24gYWNjdW11
bGF0ZXMgdXNpbmcgdGhlIGxhc3QgdmFsdWVzIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVu
ZCBvZiBkdXJhdGlvbiB0aW1lLgotICAgIFNWR0FuaW1hdGVkVHlwZSogdG9BdEVuZE9mRHVyYXRp
b25UeXBlID0gbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUgPyBtX3RvQXRFbmRPZkR1cmF0aW9uVHlw
ZS5nZXQoKSA6IG1fdG9UeXBlLmdldCgpOwotICAgIG1fYW5pbWF0b3ItPmNhbGN1bGF0ZUFuaW1h
dGVkVmFsdWUocGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIG1fZnJvbVR5cGUuZ2V0KCksIG1fdG9U
eXBlLmdldCgpLCB0b0F0RW5kT2ZEdXJhdGlvblR5cGUsIHJlc3VsdEFuaW1hdGlvbkVsZW1lbnQu
bV9hbmltYXRlZFR5cGUuZ2V0KCkpOworICAgIGF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5jYWxjdWxhdGVBbmltYXRlZFZhbHVlKHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCByZXN1bHRF
bGVtZW50KTsKIH0KIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNhbGN1bGF0ZVRvQXRF
bmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZykK
IHsKLSAgICBpZiAodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcuaXNFbXB0eSgpKQorICAgIGlmICgh
dGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90b0F0RW5kT2ZE
dXJhdGlvblR5cGUgPSBlbnN1cmVBbmltYXRvcigpLT5jb25zdHJ1Y3RGcm9tU3RyaW5nKHRvQXRF
bmRPZkR1cmF0aW9uU3RyaW5nKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYXR0cmli
dXRlQW5pbWF0aW9uQ29udHJvbGxlcigpLmNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUo
dG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpOwogfQogCiBib29sIFNWR0FuaW1hdGVFbGVtZW50QmFz
ZTo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAgICBpZiAoIXRoaXMtPnRhcmdldEVsZW1lbnQoKSkK
KyAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKLSAgICBl
bnN1cmVBbmltYXRvcigpLT5jYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMobV9mcm9tVHlwZSwgbV90
b1R5cGUsIGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKLSAgICBBU1NFUlQobV9hbmltYXRlZFByb3Bl
cnR5VHlwZSA9PSBtX2FuaW1hdG9yLT50eXBlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBhdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyKCkuY2FsY3VsYXRlRnJvbUFuZFRvVmFs
dWVzKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKIH0KIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudEJh
c2U6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNv
bnN0IFN0cmluZyYgYnlTdHJpbmcpCiB7CiAgICAgaWYgKCF0aGlzLT50YXJnZXRFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhbmltYXRpb25Nb2RlKCkgPT0gQW5p
bWF0aW9uTW9kZTo6QnkgJiYgIWlzQWRkaXRpdmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gZnJvbS1ieSBhbmltYXRpb24gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGF0dHJpYnV0
ZXMgdGhhdCBzdXBwb3J0IGFkZGl0aW9uIChlLmcuIG1vc3QgbnVtZXJpYyBhdHRyaWJ1dGVzKS4K
LSAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OkZyb21CeSAmJiAhYW5p
bWF0ZWRQcm9wZXJ0eVR5cGVTdXBwb3J0c0FkZGl0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEFTU0VSVCghaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSk7Ci0KLSAgICBk
ZXRlcm1pbmVQcm9wZXJ0eVZhbHVlVHlwZXMoZnJvbVN0cmluZywgYnlTdHJpbmcpOwotICAgIGVu
c3VyZUFuaW1hdG9yKCktPmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhtX2Zyb21UeXBlLCBtX3Rv
VHlwZSwgZnJvbVN0cmluZywgYnlTdHJpbmcpOwotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVy
dHlUeXBlID09IG1fYW5pbWF0b3ItPnR5cGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNp
Zm5kZWYgTkRFQlVHCi1zdGF0aWMgaW5saW5lIGJvb2wgcHJvcGVydHlUeXBlc0FyZUNvbnNpc3Rl
bnQoQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgZXhwZWN0ZWRQcm9wZXJ0eVR5cGUsIGNvbnN0IFNWR0Vs
ZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBmb3IgKGF1
dG8mIHR5cGUgOiBhbmltYXRlZFR5cGVzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkg
OiB0eXBlLnByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlw
ZSAhPSBwcm9wZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSkgewotICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIG9ubHkgYWxsb3dlZCBpbmNvbnNpc3RlbmN5LiBTVkdBbmltYXRlZEFu
Z2xlQW5pbWF0b3IgaGFuZGxlcyBib3RoIFNWR0FuaW1hdGVkQW5nbGUgJiBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uIGZvciBtYXJrZXJzIG9yaWVudCBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgICAg
aWYgKGV4cGVjdGVkUHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYgcHJvcGVydHktPmFu
aW1hdGVkUHJvcGVydHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoKS5jYWxjdWxhdGVGcm9tQW5kQnlWYWx1
ZXMoZnJvbVN0cmluZywgYnlTdHJpbmcpOwogfQotI2VuZGlmCiAKIHZvaWQgU1ZHQW5pbWF0ZUVs
ZW1lbnRCYXNlOjpyZXNldEFuaW1hdGVkVHlwZSgpCiB7Ci0gICAgU1ZHQW5pbWF0ZWRUeXBlQW5p
bWF0b3IqIGFuaW1hdG9yID0gZW5zdXJlQW5pbWF0b3IoKTsKLSAgICBBU1NFUlQobV9hbmltYXRl
ZFByb3BlcnR5VHlwZSA9PSBhbmltYXRvci0+dHlwZSgpKTsKLQotICAgIGF1dG8gdGFyZ2V0RWxl
bWVudCA9IG1ha2VSZWZQdHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKLSAgICBpZiAoIXRhcmdl
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgU2hvdWxkQXBwbHlBbmlt
YXRpb24gc2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50Lmdl
dCgpLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgIGlmIChzaG91bGRBcHBseSA9PSBEb250QXBwbHlB
bmltYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzaG91bGRBcHBseSA9PSBBcHBs
eVhNTEFuaW1hdGlvbiB8fCBzaG91bGRBcHBseSA9PSBBcHBseVhNTGFuZENTU0FuaW1hdGlvbikg
ewotICAgICAgICAvLyBTVkcgRE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0aC4KLSAgICAg
ICAgbV9hbmltYXRlZFByb3BlcnRpZXMgPSBhbmltYXRvci0+ZmluZEFuaW1hdGVkUHJvcGVydGll
c0ZvckF0dHJpYnV0ZU5hbWUoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAg
ICBpZiAobV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzQXJlQ29uc2lzdGVudChtX2FuaW1hdGVk
UHJvcGVydHlUeXBlLCBtX2FuaW1hdGVkUHJvcGVydGllcykpOwotICAgICAgICBpZiAoIW1fYW5p
bWF0ZWRUeXBlKQotICAgICAgICAgICAgbV9hbmltYXRlZFR5cGUgPSBhbmltYXRvci0+c3RhcnRB
bmltVmFsQW5pbWF0aW9uKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBhbmltYXRvci0+cmVzZXRBbmltVmFsVG9CYXNlVmFsKG1fYW5pbWF0ZWRQcm9w
ZXJ0aWVzLCAqbV9hbmltYXRlZFR5cGUpOwotICAgICAgICAgICAgYW5pbWF0b3ItPmFuaW1WYWxE
aWRDaGFuZ2UobV9hbmltYXRlZFByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRoLgot
ICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpOwotICAgIFN0cmluZyBi
YXNlVmFsdWU7Ci0KLSAgICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlDU1NBbmltYXRpb24pIHsK
LSAgICAgICAgQVNTRVJUKFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NT
UHJvcGVydHkodGFyZ2V0RWxlbWVudC5nZXQoKSwgYXR0cmlidXRlTmFtZSkpOwotICAgICAgICBj
b21wdXRlQ1NTUHJvcGVydHlWYWx1ZSh0YXJnZXRFbGVtZW50LmdldCgpLCBjc3NQcm9wZXJ0eUlE
KGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpLCBiYXNlVmFsdWUpOwotICAgIH0KLQotICAgIGlm
ICghbV9hbmltYXRlZFR5cGUpCi0gICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gYW5pbWF0b3ItPmNv
bnN0cnVjdEZyb21TdHJpbmcoYmFzZVZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYW5pbWF0
ZWRUeXBlLT5zZXRWYWx1ZUFzU3RyaW5nKGF0dHJpYnV0ZU5hbWUsIGJhc2VWYWx1ZSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQoU1ZHRWxlbWVudCYg
dGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBBU1NFUlQoIXRhcmdldEVsZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKLQotICAgIGlm
ICghdGFyZ2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5zZXRQ
cm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0
RWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbW92
ZUNTU1Byb3BlcnR5RnJvbVRhcmdldChTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBDU1NQcm9w
ZXJ0eUlEIGlkKQotewotICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC5tX2RlbGV0aW9uSGFzQmVn
dW4pOwotICAgIHRhcmdldEVsZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVz
KCkucmVtb3ZlUHJvcGVydHkoaWQpOwotICAgIHRhcmdldEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJ
bnN0YW5jZXMoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nKQotewotICAgIC8vIEZJ
WE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBjaGVjayBib3RoIGlzQ29ubmVjdGVkIGFuZCAhcGFy
ZW50Tm9kZT8KLSAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8ICF0YXJnZXRF
bGVtZW50LmlzQ29ubmVjdGVkKCkgfHwgIXRhcmdldEVsZW1lbnQucGFyZW50Tm9kZSgpKQorICAg
IGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NQcm9wZXJ0
eUlEIGlkID0gY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKTsKLQotICAg
IFNWR0VsZW1lbnQ6Okluc3RhbmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKHRhcmdldEVsZW1lbnQp
OwotICAgIGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldCh0YXJnZXRFbGVtZW50LCBpZCwgdmFsdWVB
c1N0cmluZyk7Ci0KLSAgICAvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3RhbmNlcywg
dXBkYXRlIHRoZW0gYXMgd2VsbCwgdy9vIHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0byBiZSBy
ZWJ1aWx0LgotICAgIGZvciAoYXV0byogaW5zdGFuY2UgOiB0YXJnZXRFbGVtZW50Lmluc3RhbmNl
cygpKQotICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQoKmluc3RhbmNlLCBpZCwgdmFs
dWVBc1N0cmluZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eUZy
b21UYXJnZXRBbmRJbnN0YW5jZXMoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKLXsKLSAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5
IG5lZWQgdG8gY2hlY2sgYm90aCBpc0Nvbm5lY3RlZCBhbmQgIXBhcmVudE5vZGU/Ci0gICAgaWYg
KGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5pc0Nvbm5lY3Rl
ZCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ1NTUHJvcGVydHlJRCBpZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5h
bWUoKSk7Ci0KLSAgICBTVkdFbGVtZW50OjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIgYmxvY2tlcih0
YXJnZXRFbGVtZW50KTsKLSAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQodGFyZ2V0RWxl
bWVudCwgaWQpOwotCi0gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMs
IHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUg
cmVidWlsdC4KLSAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxlbWVudC5pbnN0YW5j
ZXMoKSkKLSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0KCppbnN0YW5jZSwgaWQp
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hhbmdl
KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUpCi17Ci0gICAgQVNTRVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7
Ci0gICAgdGFyZ2V0RWxlbWVudC5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUpOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmlt
VmFsQ2hhbmdlKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8
fCAhdGFyZ2V0RWxlbWVudC5pc0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVC
bG9ja2VyIGJsb2NrZXIodGFyZ2V0RWxlbWVudCk7Ci0gICAgbm90aWZ5VGFyZ2V0QWJvdXRBbmlt
VmFsQ2hhbmdlKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgLy8gSWYgdGhl
IHRhcmdldCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyBy
ZXF1aXJpbmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KLSAgICBmb3IgKGF1dG8qIGlu
c3RhbmNlIDogdGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKLSAgICAgICAgbm90aWZ5VGFyZ2V0
QWJvdXRBbmltVmFsQ2hhbmdlKCppbnN0YW5jZSwgYXR0cmlidXRlTmFtZSk7CisgICAgYXR0cmli
dXRlQW5pbWF0aW9uQ29udHJvbGxlcigpLnJlc2V0QW5pbWF0ZWRUeXBlKCk7CiB9CiAKIHZvaWQg
U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KQogewotICAgIGlmICghbV9hbmltYXRlZFR5cGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIElmIHRoZSBTVkdBbmltYXRlZFR5cGUgaXMgYSBsaXN0IHR5cGUsIGUuZy4gU1ZH
TGVuZ3RoTGlzdFZhbHVlcywgdGhlIHdyYXBwZXJzIG9mIHRoZQotICAgIC8vIGFuaW1hdGVkIHBy
b3BlcnRpZXMgaGF2ZSB0byBiZSBkZXRhY2hlZCBmcm9tIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBi
ZWZvcmUgaXQncyBkZWxldGVkLgotICAgIGlmICghbV9hbmltYXRlZFByb3BlcnRpZXMuaXNFbXB0
eSgpKQotICAgICAgICBtX2FuaW1hdG9yLT5hbmltVmFsV2lsbENoYW5nZShtX2FuaW1hdGVkUHJv
cGVydGllcyk7Ci0KLSAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgbV9hbmltYXRl
ZFR5cGUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYW5p
bWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBh
bmltYXRpb24gY29kZS1wYXRoLgotICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRB
bmRJbnN0YW5jZXMoKnRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgICAgIG1f
YW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9
IHNob3VsZEFwcGx5QW5pbWF0aW9uKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSk7Ci0g
ICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5WE1MYW5kQ1NTQW5pbWF0aW9uKQotICAgICAgICBy
ZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdldEVsZW1lbnQsIGF0
dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICAvLyBTVkcgRE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUt
cGF0aC4KLSAgICBpZiAobV9hbmltYXRvcikgewotICAgICAgICBtX2FuaW1hdG9yLT5zdG9wQW5p
bVZhbEFuaW1hdGlvbihtX2FuaW1hdGVkUHJvcGVydGllcyk7Ci0gICAgICAgIG5vdGlmeVRhcmdl
dEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENoYW5nZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRl
TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBtX2FuaW1hdGVkUHJvcGVydGllcy5jbGVhcigpOwotICAg
IG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byogY29udHJvbGxlciA9IGF0
dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICBjb250cm9sbGVy
LT5jbGVhckFuaW1hdGVkVHlwZSh0YXJnZXRFbGVtZW50KTsKIH0KIAogdm9pZCBTVkdBbmltYXRl
RWxlbWVudEJhc2U6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKIHsKLSAgICBBU1NFUlQobV9hbmlt
YXRlZFByb3BlcnR5VHlwZSAhPSBBbmltYXRlZFRyYW5zZm9ybUxpc3QgfHwgaGFzVGFnTmFtZShT
VkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykpOwotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJv
cGVydHlUeXBlICE9IEFuaW1hdGVkVW5rbm93bik7Ci0gICAgQVNTRVJUKG1fYW5pbWF0b3IpOwot
Ci0gICAgLy8gRWFybHkgZXhpdCBpZiBvdXIgYW5pbWF0ZWQgdHlwZSBnb3QgZGVzdHJveWVkIGJ5
IGEgcHJldmlvdXMgZW5kZWRBY3RpdmVJbnRlcnZhbCgpLgotICAgIGlmICghbV9hbmltYXRlZFR5
cGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gdGFyZ2V0RWxlbWVudCA9IG1ha2VSZWZQ
dHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOwotCi0gICAgQVNTRVJUKHRhcmdldEVs
ZW1lbnQpOwotCi0gICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRoLgotICAgICAgICAvLyBD
b252ZXJ0IHRoZSByZXN1bHQgb2YgdGhlIGFuaW1hdGlvbiB0byBhIFN0cmluZyBhbmQgYXBwbHkg
aXQgYXMgQ1NTIHByb3BlcnR5IG9uIHRoZSB0YXJnZXQgJiBhbGwgaW5zdGFuY2VzLgotICAgICAg
ICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdldEVsZW1lbnQsIGF0
dHJpYnV0ZU5hbWUsIG1fYW5pbWF0ZWRUeXBlLT52YWx1ZUFzU3RyaW5nKCkpOworICAgIGlmICgh
dGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8g
dXBkYXRlIHRoZSBzdHlsZSBhbmQgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSBpbmRlcGVuZGVudCBv
ZiBlYWNoIG90aGVyLgotICAgIFNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gc2hv
dWxkQXBwbHlBbmltYXRpb24odGFyZ2V0RWxlbWVudC5nZXQoKSwgYXR0cmlidXRlTmFtZSk7Ci0g
ICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5WE1MYW5kQ1NTQW5pbWF0aW9uKQotICAgICAgICBh
cHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdldEVsZW1lbnQsIGF0dHJp
YnV0ZU5hbWUsIG1fYW5pbWF0ZWRUeXBlLT52YWx1ZUFzU3RyaW5nKCkpOwotCi0gICAgLy8gU1ZH
IERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCi0gICAgLy8gQXQgdGhpcyBwb2ludCB0
aGUgU1ZHIERPTSB2YWx1ZXMgYXJlIGFscmVhZHkgY2hhbmdlZCwgdW5saWtlIGZvciBDU1MuCi0g
ICAgLy8gV2Ugb25seSBoYXZlIHRvIHRyaWdnZXIgdXBkYXRlIG5vdGlmaWNhdGlvbnMgaGVyZS4K
LSAgICBtX2FuaW1hdG9yLT5hbmltVmFsRGlkQ2hhbmdlKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsK
LSAgICBub3RpZnlUYXJnZXRBbmRJbnN0YW5jZXNBYm91dEFuaW1WYWxDaGFuZ2UoKnRhcmdldEVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwotfQotCi1ib29sIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6
YW5pbWF0ZWRQcm9wZXJ0eVR5cGVTdXBwb3J0c0FkZGl0aW9uKCkgY29uc3QKLXsKLSAgICAvLyBT
cGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvYW5pbWF0ZS5odG1sI0FuaW1hdGlvbkF0dHJp
YnV0ZXNBbmRQcm9wZXJ0aWVzLgotICAgIHN3aXRjaCAobV9hbmltYXRlZFByb3BlcnR5VHlwZSkg
ewotICAgIGNhc2UgQW5pbWF0ZWRCb29sZWFuOgotICAgIGNhc2UgQW5pbWF0ZWRFbnVtZXJhdGlv
bjoKLSAgICBjYXNlIEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzoKLSAgICBjYXNlIEFuaW1h
dGVkU3RyaW5nOgotICAgIGNhc2UgQW5pbWF0ZWRVbmtub3duOgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSBBbmltYXRlZEFuZ2xlOgotICAgIGNhc2UgQW5pbWF0ZWRDb2xvcjoKLSAg
ICBjYXNlIEFuaW1hdGVkSW50ZWdlcjoKLSAgICBjYXNlIEFuaW1hdGVkSW50ZWdlck9wdGlvbmFs
SW50ZWdlcjoKLSAgICBjYXNlIEFuaW1hdGVkTGVuZ3RoOgotICAgIGNhc2UgQW5pbWF0ZWRMZW5n
dGhMaXN0OgotICAgIGNhc2UgQW5pbWF0ZWROdW1iZXI6Ci0gICAgY2FzZSBBbmltYXRlZE51bWJl
ckxpc3Q6Ci0gICAgY2FzZSBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyOgotICAgIGNhc2Ug
QW5pbWF0ZWRQYXRoOgotICAgIGNhc2UgQW5pbWF0ZWRQb2ludHM6Ci0gICAgY2FzZSBBbmltYXRl
ZFJlY3Q6Ci0gICAgY2FzZSBBbmltYXRlZFRyYW5zZm9ybUxpc3Q6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBhdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyKCkuYXBwbHlSZXN1bHRzVG9UYXJnZXQoKTsKIH0KIAogYm9vbCBTVkdBbmltYXRlRWxl
bWVudEJhc2U6OmlzQWRkaXRpdmUoKSBjb25zdAogewogICAgIGlmIChhbmltYXRpb25Nb2RlKCkg
PT0gQW5pbWF0aW9uTW9kZTo6QnkgfHwgYW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6
OkZyb21CeSkgewotICAgICAgICBpZiAoIWFuaW1hdGVkUHJvcGVydHlUeXBlU3VwcG9ydHNBZGRp
dGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYXV0byogY29u
dHJvbGxlciA9IGF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpKSB7CisgICAg
ICAgICAgICBpZiAoIWNvbnRyb2xsZXItPmlzQWRkaXRpdmUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aXNBZGRpdGl2ZSgpOwpAQCAtNDIzLDQyICsxNDAsNDAgQEAgYm9vbCBTVkdBbmlt
YXRlRWxlbWVudEJhc2U6OmlzQWRkaXRpdmUoKQogZmxvYXQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNl
OjpjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdG9TdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IEEgcmV0dXJuIHZhbHVlIG9mIGZsb2F0IGlz
IG5vdCBlbm91Z2ggdG8gc3VwcG9ydCBwYWNlZCBhbmltYXRpb25zIG9uIGxpc3RzLgotICAgIGlm
ICghdGhpcy0+dGFyZ2V0RWxlbWVudCgpKQorICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAg
ICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gZW5zdXJlQW5pbWF0b3IoKS0+Y2FsY3VsYXRl
RGlzdGFuY2UoZnJvbVN0cmluZywgdG9TdHJpbmcpOworICAgIHJldHVybiBhdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyKCkuY2FsY3VsYXRlRGlzdGFuY2UoZnJvbVN0cmluZywgdG9TdHJpbmcp
OwogfQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6c2V0VGFyZ2V0RWxlbWVudChTVkdF
bGVtZW50KiB0YXJnZXQpCiB7CiAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0RWxl
bWVudCh0YXJnZXQpOwotICAgIHJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKTsKKyAgICByZXNl
dEFuaW1hdGlvbigpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6c2V0QXR0cmli
dXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIFNWR1NN
SUxFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpOwotICAgIGNoZWNrSW52
YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCgpKTsKLSAgICByZXNldEFuaW1hdGVk
UHJvcGVydHlUeXBlKCk7CisgICAgcmVzZXRBbmltYXRpb24oKTsKIH0KIAotdm9pZCBTVkdBbmlt
YXRlRWxlbWVudEJhc2U6OnJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKQordm9pZCBTVkdBbmlt
YXRlRWxlbWVudEJhc2U6OnJlc2V0QW5pbWF0aW9uKCkKIHsKLSAgICBTVkdBbmltYXRpb25FbGVt
ZW50OjpyZXNldEFuaW1hdGVkUHJvcGVydHlUeXBlKCk7Ci0gICAgQVNTRVJUKCFtX2FuaW1hdGVk
VHlwZSk7Ci0gICAgbV9mcm9tVHlwZSA9IG51bGxwdHI7Ci0gICAgbV90b1R5cGUgPSBudWxscHRy
OwotICAgIG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlID0gbnVsbHB0cjsKLSAgICBtX2FuaW1hdG9y
ID0gbnVsbHB0cjsKLSAgICBtX2FuaW1hdGVkUHJvcGVydHlUeXBlID0gdGFyZ2V0RWxlbWVudCgp
ID8gZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKnRhcmdldEVsZW1lbnQoKSkgOiBBbmlt
YXRlZFN0cmluZzsKKyAgICBTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFuaW1hdGlvbigpOwor
ICAgIG1fYXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlciA9IG51bGxwdHI7CisgICAgbV9oYXNJ
bnZhbGlkQ1NTQXR0cmlidXRlVHlwZSA9IFdURjo6bnVsbG9wdDsKIH0KIAotU1ZHQW5pbWF0ZWRU
eXBlQW5pbWF0b3IqIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6ZW5zdXJlQW5pbWF0b3IoKQorYm9v
bCBTVkdBbmltYXRlRWxlbWVudEJhc2U6Omhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fYW5pbWF0b3IpCi0gICAgICAgIG1fYW5pbWF0b3IgPSBTVkdBbmlt
YXRvckZhY3Rvcnk6OmNyZWF0ZSh0aGlzLCB0YXJnZXRFbGVtZW50KCksIG1fYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUpOwotICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IG1fYW5pbWF0
b3ItPnR5cGUoKSk7Ci0gICAgcmV0dXJuIG1fYW5pbWF0b3IuZ2V0KCk7CisgICAgaWYgKCF0YXJn
ZXRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9oYXNJbnZh
bGlkQ1NTQXR0cmlidXRlVHlwZSkKKyAgICAgICAgbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlw
ZSA9IGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpICYmIGF0dHJpYnV0ZVR5cGUoKSA9PSBBdHRyaWJ1
dGVUeXBlOjpDU1MgJiYgIWlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVu
dCgpLCBhdHRyaWJ1dGVOYW1lKCkpOworCisgICAgcmV0dXJuIG1faGFzSW52YWxpZENTU0F0dHJp
YnV0ZVR5cGUudmFsdWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuaAkocmV2aXNpb24gMjQyOTc4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywyMyArMjMsMjggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFR5cGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIgog
I2luY2x1ZGUgIlNWR0FuaW1hdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRy
b2xsZXJCYXNlOworCiBjbGFzcyBTVkdBbmltYXRlRWxlbWVudEJhc2UgOiBwdWJsaWMgU1ZHQW5p
bWF0aW9uRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdBbmltYXRlRWxl
bWVudEJhc2UpOwogcHVibGljOgogICAgIHZpcnR1YWwgflNWR0FuaW1hdGVFbGVtZW50QmFzZSgp
OwogCisgICAgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UmIGF0dHJpYnV0ZUFu
aW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVy
QmFzZSogYXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcklmRXhpc3RzKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisKICAgICBBbmltYXRl
ZFByb3BlcnR5VHlwZSBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShTVkdFbGVtZW50Jikg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRlRWxlbWVudEJhc2UoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKKyAgICBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlw
ZSgpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgdm9pZCByZXNldEFuaW1hdGVkVHlwZSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgY2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCkgb3ZlcnJpZGU7CiAKQEAgLTUzLDIzICs1OCwxMyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lk
IHNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0QXR0
cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNl
dEFuaW1hdGVkUHJvcGVydHlUeXBlKCkgb3ZlcnJpZGU7Ci0KLSAgICBBbmltYXRlZFByb3BlcnR5
VHlwZSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlOworICAgIHZvaWQgcmVzZXRBbmltYXRpb24oKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBTVkdBbmltYXRlZFR5cGVBbmltYXRvciogZW5zdXJl
QW5pbWF0b3IoKTsKLSAgICBib29sIGFuaW1hdGVkUHJvcGVydHlUeXBlU3VwcG9ydHNBZGRpdGlv
bigpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBvdmVycmlkZTsK
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IG1fZnJvbVR5cGU7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gbV90b1R5cGU7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gbV90b0F0RW5kT2ZEdXJhdGlvblR5cGU7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gbV9hbmltYXRlZFR5cGU7CisgICAgYm9vbCBo
YXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpIGNvbnN0OwogCi0gICAgU1ZHRWxlbWVudEFuaW1h
dGVkUHJvcGVydHlMaXN0IG1fYW5pbWF0ZWRQcm9wZXJ0aWVzOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTVkdBbmltYXRlZFR5cGVBbmltYXRvcj4gbV9hbmltYXRvcjsKKyAgICBtdXRhYmxlIE9wdGlv
bmFsPGJvb2w+IG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlPiBtX2F0dHJpYnV0ZUFuaW1h
dGlvbkNvbnRyb2xsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9u
IDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgUmVmPFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50PiBTVkdBbmltYXRlTQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpCitib29sIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAogewogICAgIGF1dG8gdGFy
Z2V0RWxlbWVudCA9IG1ha2VSZWZQdHIodGhpcy0+dGFyZ2V0RWxlbWVudCgpKTsKICAgICBpZiAo
IXRhcmdldEVsZW1lbnQpCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6Omhhc1ZhbGlkQXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCitib29sIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSBjb25zdAogewogICAgIC8vIEFu
aW1hdGVNb3Rpb24gZG9lcyBub3QgdXNlIGF0dHJpYnV0ZU5hbWUgc28gaXQgaXMgYWx3YXlzIHZh
bGlkLgogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICsz
Niw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBib29sIGhhc1ZhbGlkQXR0cmli
dXRlVHlwZSgpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVOYW1lKCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3Ry
aW5nJikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNyArNDMsNyBAQCBSZWY8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+IFNWR0FuaW1h
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKCF0aGlzLT50YXJnZXRF
bGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxLDcgKzUxLDcgQEAgYm9vbCBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzVmFsaQogICAgIGlmIChhdHRyaWJ1dGVUeXBl
KCkgPT0gQXR0cmlidXRlVHlwZTo6Q1NTKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBBbmltYXRlZFRyYW5zZm9ybUxpc3Q7Cisg
ICAgcmV0dXJuIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCk7
CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAko
cmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQmKTsKICAgICAKLSAgICBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGZp
bmFsOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QgZmluYWw7CiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3Ry
aW5nJikgZmluYWw7CiAKICAgICBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBt
X3R5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAko
cmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdl
ci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEludGVnZXIuaCIKLQotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVFbGVtZW50QmFzZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVt
YmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1TVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0
b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCogYW5pbWF0aW9uRWxlbWVudCwgU1ZHRWxlbWVudCogY29u
dGV4dEVsZW1lbnQpCi0gICAgOiBTVkdBbmltYXRlZFR5cGVBbmltYXRvcihBbmltYXRlZEludGVn
ZXIsIGFuaW1hdGlvbkVsZW1lbnQsIGNvbnRleHRFbGVtZW50KQotewotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y29uc3Ry
dWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICByZXR1cm4gU1ZHQW5p
bWF0ZWRUeXBlOjpjcmVhdGUoU1ZHUHJvcGVydHlUcmFpdHM8aW50Pjo6ZnJvbVN0cmluZyhzdHJp
bmcpKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJ
bnRlZ2VyQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5p
bWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0gICAgcmV0dXJuIGNvbnN0cnVj
dEZyb21CYXNlVmFsdWU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQot
dm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6c3RvcEFuaW1WYWxBbmltYXRpb24oY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQotewotICAg
IHN0b3BBbmltVmFsQW5pbWF0aW9uRm9yVHlwZTxTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVk
VHlwZXMpOwotfQotCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yOjpyZXNldEFuaW1W
YWxUb0Jhc2VWYWwoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRl
ZFR5cGVzLCBTVkdBbmltYXRlZFR5cGUmIHR5cGUpCi17Ci0gICAgcmVzZXRGcm9tQmFzZVZhbHVl
PFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcywgdHlwZSk7Ci19Ci0KLXZvaWQgU1ZH
QW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmFuaW1WYWxXaWxsQ2hhbmdlKGNvbnN0IFNWR0VsZW1l
bnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsKLSAgICBhbmltVmFsV2ls
bENoYW5nZUZvclR5cGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsKLX0KLQot
dm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6YW5pbVZhbERpZENoYW5nZShjb25zdCBT
VkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCi17Ci0gICAgYW5p
bVZhbERpZENoYW5nZUZvclR5cGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzKTsK
LX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6YWRkQW5pbWF0ZWRUeXBlcyhT
VkdBbmltYXRlZFR5cGUqIGZyb20sIFNWR0FuaW1hdGVkVHlwZSogdG8pCi17Ci0gICAgQVNTRVJU
KGZyb20tPnR5cGUoKSA9PSBBbmltYXRlZEludGVnZXIpOwotICAgIEFTU0VSVChmcm9tLT50eXBl
KCkgPT0gdG8tPnR5cGUoKSk7Ci0KLSAgICB0by0+YXM8aW50PigpICs9IGZyb20tPmFzPGludD4o
KTsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0
ZWRJbnRlZ2VyKFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQsIGZsb2F0IHBl
cmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBpbnQgZnJvbUludGVnZXIsIGludCB0b0lu
dGVnZXIsIGludCB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXIsIGludCYgYW5pbWF0ZWRJbnRlZ2Vy
KQotewotICAgIGZsb2F0IGFuaW1hdGVkTnVtYmVyID0gYW5pbWF0ZWRJbnRlZ2VyOwotICAgIGFu
aW1hdGlvbkVsZW1lbnQtPmFuaW1hdGVBZGRpdGl2ZU51bWJlcihwZXJjZW50YWdlLCByZXBlYXRD
b3VudCwgZnJvbUludGVnZXIsIHRvSW50ZWdlciwgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyLCBh
bmltYXRlZE51bWJlcik7Ci0gICAgYW5pbWF0ZWRJbnRlZ2VyID0gc3RhdGljX2Nhc3Q8aW50Pihy
b3VuZGYoYW5pbWF0ZWROdW1iZXIpKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJBbmlt
YXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCBy
ZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdBbmltYXRlZFR5cGUqIHRvLCBT
VkdBbmltYXRlZFR5cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdBbmltYXRlZFR5cGUqIGFuaW1h
dGVkKQotewotICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQpOwotICAgIEFTU0VSVChtX2Nv
bnRleHRFbGVtZW50KTsKLQotICAgIGNvbnN0IGF1dG8gZnJvbUludGVnZXIgPSAobV9hbmltYXRp
b25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBhbmltYXRl
ZCA6IGZyb20pLT5hczxpbnQ+KCk7Ci0gICAgY29uc3QgYXV0byB0b0ludGVnZXIgPSB0by0+YXM8
aW50PigpOwotICAgIGNvbnN0IGF1dG8gdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyID0gdG9BdEVu
ZE9mRHVyYXRpb24tPmFzPGludD4oKTsKLSAgICBhdXRvJiBhbmltYXRlZEludGVnZXIgPSBhbmlt
YXRlZC0+YXM8aW50PigpOwotCi0gICAgY2FsY3VsYXRlQW5pbWF0ZWRJbnRlZ2VyKG1fYW5pbWF0
aW9uRWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIGZyb21JbnRlZ2VyLCB0b0ludGVn
ZXIsIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlciwgYW5pbWF0ZWRJbnRlZ2VyKTsKLX0KLQotZmxv
YXQgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0
cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKLXsKLSAgICBBU1NFUlQo
bV9jb250ZXh0RWxlbWVudCk7Ci0gICAgaW50IGZyb20gPSBmcm9tU3RyaW5nLnRvSW50U3RyaWN0
KCk7Ci0gICAgaW50IHRvID0gdG9TdHJpbmcudG9JbnRTdHJpY3QoKTsKLSAgICByZXR1cm4gYWJz
KHRvIC0gZnJvbSk7Ci19Ci0KLX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEludGVnZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZEludGVnZXIuaAkocmV2aXNpb24g
MjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5oCShub25l
eGlzdGVudCkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIgotI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZUFjY2Vz
c29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVu
dDsKLQotdXNpbmcgU1ZHQW5pbWF0ZWRJbnRlZ2VyID0gU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0
eVRlYXJPZmY8aW50PjsKLXVzaW5nIFNWR0FuaW1hdGVkSW50ZWdlckF0dHJpYnV0ZSA9IFNWR0Fu
aW1hdGVkQXR0cmlidXRlPFNWR0FuaW1hdGVkSW50ZWdlcj47Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE93bmVyVHlwZT4KLXVzaW5nIFNWR0FuaW1hdGVkSW50ZWdlckF0dHJpYnV0ZUFjY2Vzc29yID0g
U1ZHQW5pbWF0ZWRBdHRyaWJ1dGVBY2Nlc3NvcjxPd25lclR5cGUsIFNWR0FuaW1hdGVkSW50ZWdl
ckF0dHJpYnV0ZSwgQW5pbWF0ZWRJbnRlZ2VyPjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJU
eXBlPgotdXNpbmcgU1ZHQW5pbWF0ZWRPcHRpb25hbEludGVnZXJBdHRyaWJ1dGVBY2Nlc3NvciA9
IFNWR0FuaW1hdGVkT3B0aW9uYWxBdHRyaWJ1dGVBY2Nlc3NvcjxPd25lclR5cGUsIFNWR0FuaW1h
dGVkSW50ZWdlckF0dHJpYnV0ZSwgQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyPjsKLQot
Y2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3IgZmluYWwgOiBwdWJsaWMgU1ZHQW5pbWF0
ZWRUeXBlQW5pbWF0b3IgewotcHVibGljOgotICAgIFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9y
KFNWR0FuaW1hdGlvbkVsZW1lbnQqLCBTVkdFbGVtZW50Kik7Ci0KLSAgICBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVBbmltYXRlZEludGVnZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCosIGZsb2F0IHBlcmNl
bnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBpbnQgZnJvbUludGVnZXIsIGludCB0b0ludGVn
ZXIsIGludCB0b0F0RW5kT2ZEdXJhdGlvbkludGVnZXIsIGludCYgYW5pbWF0ZWRJbnRlZ2VyKTsK
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IGNvbnN0cnVjdEZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1h
dGVkVHlwZT4gc3RhcnRBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFBy
b3BlcnR5TGlzdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcEFuaW1WYWxBbmltYXRpb24oY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZXNldEFuaW1WYWxUb0Jhc2VWYWwoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0
JiwgU1ZHQW5pbWF0ZWRUeXBlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhbmltVmFsV2lsbENoYW5n
ZShjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFuaW1WYWxEaWRDaGFuZ2UoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZEFuaW1hdGVkVHlwZXMoU1ZHQW5pbWF0ZWRUeXBl
KiwgU1ZHQW5pbWF0ZWRUeXBlKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBTVkdBbmltYXRl
ZFR5cGUqLCBTVkdBbmltYXRlZFR5cGUqLCBTVkdBbmltYXRlZFR5cGUqLCBTVkdBbmltYXRlZFR5
cGUqKSBvdmVycmlkZTsKLSAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcm
IGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpIG92ZXJyaWRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkSW50ZWdlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHls
ZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlci5jcHAJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwCShub25leGlzdGVudCkK
QEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oIgotCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2Vy
LmgiCi0jaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OlNWR0FuaW1h
dGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFu
aW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQotICAgIDogU1ZHQW5p
bWF0ZWRUeXBlQW5pbWF0b3IoQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLCBhbmltYXRp
b25FbGVtZW50LCBjb250ZXh0RWxlbWVudCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNWR0Fu
aW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNv
bnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlKFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIGlu
dD4+Ojpmcm9tU3RyaW5nKHN0cmluZykpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6c3RhcnRB
bmltVmFsQW5pbWF0aW9uKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5p
bWF0ZWRUeXBlcykKLXsKLSAgICByZXR1cm4gY29uc3RydWN0RnJvbUJhc2VWYWx1ZXM8U1ZHQW5p
bWF0ZWRJbnRlZ2VyLCBTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwotfQotCi12
b2lkIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjpzdG9wQW5pbVZh
bEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVk
VHlwZXMpCi17Ci0gICAgc3RvcEFuaW1WYWxBbmltYXRpb25Gb3JUeXBlczxTVkdBbmltYXRlZElu
dGVnZXIsIFNWR0FuaW1hdGVkSW50ZWdlcj4oYW5pbWF0ZWRUeXBlcyk7Ci19Ci0KLXZvaWQgU1ZH
QW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OnJlc2V0QW5pbVZhbFRvQmFz
ZVZhbChjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMs
IFNWR0FuaW1hdGVkVHlwZSYgdHlwZSkKLXsKLSAgICByZXNldEZyb21CYXNlVmFsdWVzPFNWR0Fu
aW1hdGVkSW50ZWdlciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyPihhbmltYXRlZFR5cGVzLCB0eXBlKTsK
LX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcjo6YW5p
bVZhbFdpbGxDaGFuZ2UoY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmlt
YXRlZFR5cGVzKQotewotICAgIGFuaW1WYWxXaWxsQ2hhbmdlRm9yVHlwZXM8U1ZHQW5pbWF0ZWRJ
bnRlZ2VyLCBTVkdBbmltYXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwotfQotCi12b2lkIFNW
R0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjphbmltVmFsRGlkQ2hhbmdl
KGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKLXsK
LSAgICBhbmltVmFsRGlkQ2hhbmdlRm9yVHlwZXM8U1ZHQW5pbWF0ZWRJbnRlZ2VyLCBTVkdBbmlt
YXRlZEludGVnZXI+KGFuaW1hdGVkVHlwZXMpOwotfQotCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdl
ck9wdGlvbmFsSW50ZWdlckFuaW1hdG9yOjphZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlw
ZSogZnJvbSwgU1ZHQW5pbWF0ZWRUeXBlKiB0bykKLXsKLSAgICBBU1NFUlQoZnJvbS0+dHlwZSgp
ID09IEFuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlcik7Ci0gICAgQVNTRVJUKGZyb20tPnR5
cGUoKSA9PSB0by0+dHlwZSgpKTsKLQotICAgIGNvbnN0IGF1dG8mIGZyb21JbnRlZ2VyUGFpciA9
IGZyb20tPmFzPHN0ZDo6cGFpcjxpbnQsIGludD4+KCk7Ci0gICAgYXV0byYgdG9JbnRlZ2VyUGFp
ciA9IHRvLT5hczxzdGQ6OnBhaXI8aW50LCBpbnQ+PigpOwotCi0gICAgdG9JbnRlZ2VyUGFpci5m
aXJzdCArPSBmcm9tSW50ZWdlclBhaXIuZmlyc3Q7Ci0gICAgdG9JbnRlZ2VyUGFpci5zZWNvbmQg
Kz0gZnJvbUludGVnZXJQYWlyLnNlY29uZDsKLX0KLQotdm9pZCBTVkdBbmltYXRlZEludGVnZXJP
cHRpb25hbEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBlKiBmcm9tLCBTVkdB
bmltYXRlZFR5cGUqIHRvLCBTVkdBbmltYXRlZFR5cGUqIHRvQXRFbmRPZkR1cmF0aW9uLCBTVkdB
bmltYXRlZFR5cGUqIGFuaW1hdGVkKQotewotICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQp
OwotICAgIEFTU0VSVChtX2NvbnRleHRFbGVtZW50KTsKLQotICAgIGNvbnN0IGF1dG8mIGZyb21J
bnRlZ2VyUGFpciA9IChtX2FuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKSA9PSBBbmlt
YXRpb25Nb2RlOjpUbyA/IGFuaW1hdGVkIDogZnJvbSktPmFzPHN0ZDo6cGFpcjxpbnQsIGludD4+
KCk7Ci0gICAgY29uc3QgYXV0byYgdG9JbnRlZ2VyUGFpciA9IHRvLT5hczxzdGQ6OnBhaXI8aW50
LCBpbnQ+PigpOwotICAgIGNvbnN0IGF1dG8mIHRvQXRFbmRPZkR1cmF0aW9uSW50ZWdlclBhaXIg
PSB0b0F0RW5kT2ZEdXJhdGlvbi0+YXM8c3RkOjpwYWlyPGludCwgaW50Pj4oKTsKLSAgICBhdXRv
JiBhbmltYXRlZEludGVnZXJQYWlyID0gYW5pbWF0ZWQtPmFzPHN0ZDo6cGFpcjxpbnQsIGludD4+
KCk7Ci0KLSAgICBTVkdBbmltYXRlZEludGVnZXJBbmltYXRvcjo6Y2FsY3VsYXRlQW5pbWF0ZWRJ
bnRlZ2VyKG1fYW5pbWF0aW9uRWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIGZyb21J
bnRlZ2VyUGFpci5maXJzdCwgdG9JbnRlZ2VyUGFpci5maXJzdCwgdG9BdEVuZE9mRHVyYXRpb25J
bnRlZ2VyUGFpci5maXJzdCwgYW5pbWF0ZWRJbnRlZ2VyUGFpci5maXJzdCk7Ci0gICAgU1ZHQW5p
bWF0ZWRJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZUFuaW1hdGVkSW50ZWdlcihtX2FuaW1hdGlv
bkVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50LCBmcm9tSW50ZWdlclBhaXIuc2Vjb25k
LCB0b0ludGVnZXJQYWlyLnNlY29uZCwgdG9BdEVuZE9mRHVyYXRpb25JbnRlZ2VyUGFpci5zZWNv
bmQsIGFuaW1hdGVkSW50ZWdlclBhaXIuc2Vjb25kKTsKLX0KLQotZmxvYXQgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3I6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IERpc3RhbmNlIGNhbGN1bGF0
aW9uIGlzIG5vdCBwb3NzaWJsZSBmb3IgU1ZHSW50ZWdlck9wdGlvbmFsSW50ZWdlciByaWdodCBu
b3cuIFdlIG5lZWQgdGhlIGRpc3RhbmNlIGZvciBldmVyeSBzaW5nbGUgdmFsdWUuCi0gICAgcmV0
dXJuIC0xOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5oCShyZXZpc2lvbiAyNDI5NzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVudDsKLQotY2xhc3MgU1ZHQW5pbWF0
ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyQW5pbWF0b3IgZmluYWwgOiBwdWJsaWMgU1ZHQW5pbWF0
ZWRUeXBlQW5pbWF0b3IgewotcHVibGljOgotICAgIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFs
SW50ZWdlckFuaW1hdG9yKFNWR0FuaW1hdGlvbkVsZW1lbnQqLCBTVkdFbGVtZW50Kik7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjb25zdHJ1Y3RGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5
cGU+IHN0YXJ0QW5pbVZhbEFuaW1hdGlvbihjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3BBbmltVmFsQW5pbWF0aW9uKGNvbnN0IFNW
R0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRB
bmltVmFsVG9CYXNlVmFsKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYsIFNW
R0FuaW1hdGVkVHlwZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5pbVZhbFdpbGxDaGFuZ2UoY29u
c3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBh
bmltVmFsRGlkQ2hhbmdlKGNvbnN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBhZGRBbmltYXRlZFR5cGVzKFNWR0FuaW1hdGVkVHlwZSosIFNW
R0FuaW1hdGVkVHlwZSopIG92ZXJyaWRlOwotICAgIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1
ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgU1ZHQW5pbWF0ZWRUeXBl
KiwgU1ZHQW5pbWF0ZWRUeXBlKiwgU1ZHQW5pbWF0ZWRUeXBlKiwgU1ZHQW5pbWF0ZWRUeXBlKikg
b3ZlcnJpZGU7Ci0gICAgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9t
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5o
CShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQAogCiAjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTVkdBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJTVkdBdHRy
aWJ1dGVBY2Nlc3Nvci5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw3ICszMDUsNiBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5CiAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9
IEF0dHJpYnV0ZVR5cGU6OlhNTDsKICAgICBlbHNlCiAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9
IEF0dHJpYnV0ZVR5cGU6OkF1dG87Ci0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSh0
YXJnZXRFbGVtZW50KCkpOwogfQogCiBTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1
ZSgpIGNvbnN0CkBAIC02NjcsMjEgKzY2NiwxMCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmRldGVybWluZVByb3BlCiAgICAgaWYgKGluaGVyaXRzRnJvbVByb3BlcnR5KHRhcmdldEVsZW1l
bnQuZ2V0KCksIGF0dHJpYnV0ZU5hbWUsIHRvKSkKICAgICAgICAgbV90b1Byb3BlcnR5VmFsdWVU
eXBlID0gSW5oZXJpdFZhbHVlOwogfQotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpyZXNldEFu
aW1hdGVkUHJvcGVydHlUeXBlKCkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cmVzZXRBbmlt
YXRpb24oKQogewogICAgIG1fbGFzdFZhbHVlc0FuaW1hdGlvbkZyb20gPSBTdHJpbmcoKTsKICAg
ICBtX2xhc3RWYWx1ZXNBbmltYXRpb25UbyA9IFN0cmluZygpOwogfQogCi12b2lkIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0KQotewotICAg
IFNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KHRhcmdldCk7Ci0gICAgY2hlY2tJbnZh
bGlkQ1NTQXR0cmlidXRlVHlwZSh0YXJnZXQpOwotfQotCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0KQotewot
ICAgIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUgPSB0YXJnZXQgJiYgaGFzVmFsaWRBdHRy
aWJ1dGVOYW1lKCkgJiYgYXR0cmlidXRlVHlwZSgpID09IEF0dHJpYnV0ZVR5cGU6OkNTUyAmJiAh
aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eSh0YXJnZXQsIGF0dHJpYnV0ZU5hbWUoKSk7Ci19
Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2
aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjIgKzM2LDEwIEBAIGNsYXNzIENvbmRpdGlvbkV2ZW50
TGlzdGVuZXI7CiBjbGFzcyBTVkdBbmltYXRlZFR5cGU7CiBjbGFzcyBUaW1lQ29udGFpbmVyOwog
Ci1lbnVtIGNsYXNzIEFuaW1hdGlvbk1vZGUgOiB1aW50OF90IHsKLSAgICBOb25lLAotICAgIEZy
b21UbywKLSAgICBGcm9tQnksCi0gICAgVG8sCi0gICAgQnksCi0gICAgVmFsdWVzLAotICAgIFBh
dGggLy8gVXNlZCBieSBBbmltYXRlTW90aW9uLgotfTsKLQogLy8gSWYgd2UgaGF2ZSAnY3VycmVu
dENvbG9yJyBvciAnaW5oZXJpdCcgYXMgYW5pbWF0aW9uIHZhbHVlLCB3ZSBuZWVkIHRvIGdyYWIK
IC8vIHRoZSB2YWx1ZSBkdXJpbmcgdGhlIGFuaW1hdGlvbiBzaW5jZSB0aGUgdmFsdWUgY2FuIGJl
IGFuaW1hdGVkIGl0c2VsZi4KIGVudW0gQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSB7IFJlZ3Vs
YXJQcm9wZXJ0eVZhbHVlLCBDdXJyZW50Q29sb3JWYWx1ZSwgSW5oZXJpdFZhbHVlIH07CiAKLWVu
dW0gY2xhc3MgQ2FsY01vZGUgOiB1aW50OF90IHsgRGlzY3JldGUsIExpbmVhciwgUGFjZWQsIFNw
bGluZSB9OwotCiBjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50IDogcHVibGljIFNWR1NNSUxFbGVt
ZW50LCBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgcHVibGljIFNWR1Rlc3Rz
IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0FuaW1hdGlvbkVsZW1lbnQpOwogcHVi
bGljOgpAQCAtMTQ2LDYgKzEzNCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBhbmltYXRlZE51
bWJlciA9IG51bWJlcjsKICAgICB9CiAKKyAgICBlbnVtIGNsYXNzIEF0dHJpYnV0ZVR5cGUgOiB1
aW50OF90IHsgQ1NTLCBYTUwsIEF1dG8gfTsKKyAgICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZVR5cGU7IH0KKworICAgIHZvaWQgY29tcHV0
ZUNTU1Byb3BlcnR5VmFsdWUoU1ZHRWxlbWVudCosIENTU1Byb3BlcnR5SUQsIFN0cmluZyYgdmFs
dWUpOworICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVQcm9wZXJ0eVZhbHVlVHlwZXMoY29uc3Qg
U3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0Fu
aW1hdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKQEAgLTE1
MywxNyArMTQ3LDEyIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgQXR0cmlidXRlT3duZXJQcm94
eTo6QXR0cmlidXRlUmVnaXN0cnkmIGF0dHJpYnV0ZVJlZ2lzdHJ5KCkgeyByZXR1cm4gQXR0cmli
dXRlT3duZXJQcm94eTo6YXR0cmlidXRlUmVnaXN0cnkoKTsgfQogICAgIGNvbnN0IFNWR0F0dHJp
YnV0ZU93bmVyUHJveHkmIGF0dHJpYnV0ZU93bmVyUHJveHkoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2F0dHJpYnV0ZU93bmVyUHJveHk7IH0KIAotICAgIHZvaWQgY29tcHV0ZUNTU1Byb3Bl
cnR5VmFsdWUoU1ZHRWxlbWVudCosIENTU1Byb3BlcnR5SUQsIFN0cmluZyYgdmFsdWUpOwotICAg
IHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVQcm9wZXJ0eVZhbHVlVHlwZXMoY29uc3QgU3RyaW5nJiBm
cm9tLCBjb25zdCBTdHJpbmcmIHRvKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRlZFBy
b3BlcnR5VHlwZSgpOworICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGlvbigpOwogCiAgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBlbnVtIGNsYXNzIEF0dHJpYnV0ZVR5cGUg
eyBDU1MsIFhNTCwgQXV0byB9OwotICAgIEF0dHJpYnV0ZVR5cGUgYXR0cmlidXRlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlVHlwZTsgfQotCiAgICAgU3RyaW5nIHRvVmFsdWUoKSBj
b25zdDsKICAgICBTdHJpbmcgYnlWYWx1ZSgpIGNvbnN0OwogICAgIFN0cmluZyBmcm9tVmFsdWUo
KSBjb25zdDsKQEAgLTE3NywxMCArMTY2LDcgQEAgcHJvdGVjdGVkOgogICAgIEFuaW1hdGVkUHJv
cGVydHlWYWx1ZVR5cGUgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGUgeyBSZWd1bGFyUHJvcGVydHlW
YWx1ZSB9OwogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgbV90b1Byb3BlcnR5VmFsdWVU
eXBlIHsgUmVndWxhclByb3BlcnR5VmFsdWUgfTsKIAotICAgIHZvaWQgc2V0VGFyZ2V0RWxlbWVu
dChTVkdFbGVtZW50Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGhhc0ludmFsaWRDU1NBdHRy
aWJ1dGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZTsg
fQotICAgIHZvaWQgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZShTVkdFbGVtZW50Kik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9uTW9kZSgpOwogICAgIHZvaWQgc2V0QW5p
bWF0aW9uTW9kZShBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUpIHsgbV9hbmltYXRpb25Nb2Rl
ID0gYW5pbWF0aW9uTW9kZTsgfQpAQCAtMjE4LDcgKzIwNCw2IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPFVuaXRCZXppZXI+IG1fa2V5U3BsaW5lczsKICAgICBTdHJpbmcgbV9sYXN0VmFsdWVzQW5p
bWF0aW9uRnJvbTsKICAgICBTdHJpbmcgbV9sYXN0VmFsdWVzQW5pbWF0aW9uVG87Ci0gICAgYm9v
bCBtX2hhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlIHsgZmFsc2UgfTsKICAgICBDYWxjTW9kZSBt
X2NhbGNNb2RlIHsgQ2FsY01vZGU6OkxpbmVhciB9OwogICAgIEFuaW1hdGlvbk1vZGUgbV9hbmlt
YXRpb25Nb2RlIHsgQW5pbWF0aW9uTW9kZTo6Tm9uZSB9OwogICAgIEF0dHJpYnV0ZU93bmVyUHJv
eHkgbV9hdHRyaWJ1dGVPd25lclByb3h5IHsgKnRoaXMgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRvckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0b3JGYWN0b3J5LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRvckZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMs
NiBAQAogI2luY2x1ZGUgIlNWR0FuaW1hdGVkQm9vbGVhbi5oIgogI2luY2x1ZGUgIlNWR0FuaW1h
dGVkQ29sb3IuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0
aW9uYWxJbnRlZ2VyLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKICNpbmNsdWRl
ICJTVkdBbmltYXRlZExlbmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5o
IgpAQCAtNTgsOSArNTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQW5pbWF0ZWRFbnVtZXJh
dGlvbjoKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNWR0FuaW1hdGVkRW51
bWVyYXRpb25BbmltYXRvcj4oYW5pbWF0aW9uRWxlbWVudCwgY29udGV4dEVsZW1lbnQpOwogICAg
ICAgICBjYXNlIEFuaW1hdGVkSW50ZWdlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yPihhbmltYXRpb25FbGVtZW50LCBjb250
ZXh0RWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgY2FzZSBB
bmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXJBbmltYXRvcj4oYW5p
bWF0aW9uRWxlbWVudCwgY29udGV4dEVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGg6CiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxTVkdBbmltYXRlZExlbmd0aEFuaW1hdG9yPihhbmltYXRpb25FbGVtZW50
LCBjb250ZXh0RWxlbWVudCk7CiAgICAgICAgIGNhc2UgQW5pbWF0ZWRMZW5ndGhMaXN0OgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25D
b250cm9sbGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29u
dHJvbGxlci5oIgorCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgorI2luY2x1ZGUgIlNWR0Fu
aW1hdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdBdHRyaWJ1dGVBbmltYXRvci5oIgorI2lu
Y2x1ZGUgIlNWR0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdBdHRyaWJ1
dGVBbmltYXRpb25Db250cm9sbGVyOjpTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyKFNW
R0FuaW1hdGlvbkVsZW1lbnQmIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVs
ZW1lbnQpCisgICAgOiBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZShhbmltYXRp
b25FbGVtZW50LCB0YXJnZXRFbGVtZW50KQoreworfQorCitTVkdBdHRyaWJ1dGVBbmltYXRvciog
U1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0b3IoKSBjb25zdAoreworICAg
IGlmICghbV9hbmltYXRvcikKKyAgICAgICAgbV9hbmltYXRvciA9IG1fdGFyZ2V0RWxlbWVudC5j
cmVhdGVBbmltYXRvcihtX2FuaW1hdGlvbkVsZW1lbnQuYXR0cmlidXRlTmFtZSgpLCBtX2FuaW1h
dGlvbkVsZW1lbnQuYW5pbWF0aW9uTW9kZSgpLCBtX2FuaW1hdGlvbkVsZW1lbnQuY2FsY01vZGUo
KSwgbV9hbmltYXRpb25FbGVtZW50LmlzQWNjdW11bGF0ZWQoKSwgbV9hbmltYXRpb25FbGVtZW50
LmlzQWRkaXRpdmUoKSk7CisKKyAgICByZXR1cm4gbV9hbmltYXRvci5nZXQoKTsKK30KKworYm9v
bCBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjppc0Rpc2NyZXRlQW5pbWF0b3IoKSBj
b25zdAoreworICAgIHJldHVybiBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSAmJiBtX2FuaW1hdG9y
ICYmIG1fYW5pbWF0b3ItPmlzRGlzY3JldGUoKTsKK30KKworYm9vbCBTVkdBdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyOjppc0FkZGl0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWlzRGlz
Y3JldGVBbmltYXRvcigpOworfQorICAgIAorYm9vbCBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyOjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Rh
cmdldEVsZW1lbnQuaXNBbmltYXRlZEF0dHJpYnV0ZShtX2FuaW1hdGlvbkVsZW1lbnQuYXR0cmli
dXRlTmFtZSgpKTsKK30KKworYm9vbCBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpj
YWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcm
IHRvKQoreworICAgIGlmIChhdXRvKiBhbmltYXRvciA9IHRoaXMtPmFuaW1hdG9yKCkpIHsKKyAg
ICAgICAgYW5pbWF0b3ItPnNldEZyb21BbmRUb1ZhbHVlcygmbV90YXJnZXRFbGVtZW50LCBmcm9t
LCB0byk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFu
ZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiBieSkKK3sKKyAgICBp
ZiAobV9hbmltYXRpb25FbGVtZW50LmFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpC
eSAmJiAoIWlzQWRkaXRpdmUoKSB8fCBpc0Rpc2NyZXRlQW5pbWF0b3IoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50LmFuaW1hdGlvbk1v
ZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpGcm9tQnkgJiYgaXNEaXNjcmV0ZUFuaW1hdG9yKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBhbmltYXRvciA9IHRoaXMtPmFu
aW1hdG9yKCkpIHsKKyAgICAgICAgYW5pbWF0b3ItPnNldEZyb21BbmRCeVZhbHVlcygmbV90YXJn
ZXRFbGVtZW50LCBmcm9tLCBieSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1
cmF0aW9uU3RyaW5nKQoreworICAgIGlmICh0b0F0RW5kT2ZEdXJhdGlvblN0cmluZy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpc0Rpc2NyZXRlQW5pbWF0b3Io
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYXV0byogYW5pbWF0b3IgPSB0aGlz
LT5hbmltYXRvcigpKSB7CisgICAgICAgIGFuaW1hdG9yLT5zZXRUb0F0RW5kT2ZEdXJhdGlvblZh
bHVlKHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyOjpyZXNldEFuaW1hdGVkVHlwZSgpCit7CisgICAgaWYgKGF1dG8qIGFuaW1hdG9yID0g
dGhpcy0+YW5pbWF0b3IoKSkKKyAgICAgICAgYW5pbWF0b3ItPnN0YXJ0KCZtX3RhcmdldEVsZW1l
bnQpOworfQorCit2b2lkIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0
ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNW
R1NNSUxFbGVtZW50KikKK3sKKyAgICBBU1NFUlQocGVyY2VudGFnZSA+PSAwICYmIHBlcmNlbnRh
Z2UgPD0gMSk7CisgICAgaWYgKG1fdGFyZ2V0RWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjpz
ZXRUYWcpKQorICAgICAgICBwZXJjZW50YWdlID0gMTsKKworICAgIGlmIChtX2FuaW1hdGlvbkVs
ZW1lbnQuY2FsY01vZGUoKSA9PSBDYWxjTW9kZTo6RGlzY3JldGUpCisgICAgICAgIHBlcmNlbnRh
Z2UgPSBwZXJjZW50YWdlIDwgMC41ID8gMCA6IDE7CisKKyAgICBpZiAoYXV0byogYW5pbWF0b3Ig
PSB0aGlzLT5hbmltYXRvcigpKQorICAgICAgICBhbmltYXRvci0+cHJvZ3Jlc3MoJm1fdGFyZ2V0
RWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQpOworfQorCit2b2lkIFNWR0F0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKK3sKKyAgICBpZiAo
YXV0byogYW5pbWF0b3IgPSB0aGlzLT5hbmltYXRvcigpKQorICAgICAgICBhbmltYXRvci0+YXBw
bHkoJm1fdGFyZ2V0RWxlbWVudCk7Cit9CisKK3ZvaWQgU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKK3sK
KyAgICBpZiAoYXV0byogYW5pbWF0b3IgPSB0aGlzLT5hbmltYXRvcklmRXhpc3RzKCkpCisgICAg
ICAgIGFuaW1hdG9yLT5zdG9wKHRhcmdldEVsZW1lbnQpOworfQorCitmbG9hdCBTVkdBdHRyaWJ1
dGVBbmltYXRpb25Db250cm9sbGVyOjpjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZy
b20sIGNvbnN0IFN0cmluZyYgdG8pCit7CisgICAgLy8gRklYTUU6IEEgcmV0dXJuIHZhbHVlIG9m
IGZsb2F0IGlzIG5vdCBlbm91Z2ggdG8gc3VwcG9ydCBwYWNlZCBhbmltYXRpb25zIG9uIGxpc3Rz
LgorICAgIGlmIChhdXRvKiBhbmltYXRvciA9IHRoaXMtPmFuaW1hdG9yKCkpCisgICAgICAgIHJl
dHVybiBhbmltYXRvci0+Y2FsY3VsYXRlRGlzdGFuY2UoJm1fdGFyZ2V0RWxlbWVudCwgZnJvbSwg
dG8pOworICAgIHJldHVybiAtMTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZH
QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50OworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNz
IFNWR1NNSUxFbGVtZW50OworCitjbGFzcyBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVy
IDogcHVibGljIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlIHsKK3B1YmxpYzoK
KyAgICBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyKFNWR0FuaW1hdGlvbkVsZW1lbnQm
LCBTVkdFbGVtZW50Jik7CisgICAgCitwcml2YXRlOgorICAgIFNWR0F0dHJpYnV0ZUFuaW1hdG9y
KiBhbmltYXRvcigpIGNvbnN0OworICAgIFNWR0F0dHJpYnV0ZUFuaW1hdG9yKiBhbmltYXRvcklm
RXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRvci5nZXQoKTsgfQorCisgICAgdm9pZCBy
ZXNldEFuaW1hdGVkVHlwZSgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJBbmltYXRlZFR5cGUo
U1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgb3ZlcnJpZGU7CisgICAgCisgICAgYm9vbCBjYWxj
dWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRvU3RyaW5nKSBvdmVycmlkZTsKKyAgICBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpIG92ZXJy
aWRlOworICAgIGJvb2wgY2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJp
bmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2FsY3Vs
YXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwg
U1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpIG92ZXJyaWRlOworCisgICAgdm9pZCBhcHBs
eVJlc3VsdHNUb1RhcmdldCgpIG92ZXJyaWRlOworICAgIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNl
KGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJp
ZGU7CisgICAgCisgICAgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgaXNE
aXNjcmV0ZUFuaW1hdG9yKCkgY29uc3Q7CisKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxT
VkdBdHRyaWJ1dGVBbmltYXRvcj4gbV9hbmltYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJp
YnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAx
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZH
QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UuaCIKKworI2luY2x1ZGUgIlNWR0FuaW1h
dGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU1ZHQXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2U6OlNWR0F0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlKFNWR0FuaW1hdGlvbkVsZW1lbnQmIGFuaW1hdGlvbkVs
ZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQpCisgICAgOiBtX2FuaW1hdGlvbkVsZW1l
bnQoYW5pbWF0aW9uRWxlbWVudCkKKyAgICAsIG1fdGFyZ2V0RWxlbWVudCh0YXJnZXRFbGVtZW50
KQoreworfQorCitBbmltYXRlZFByb3BlcnR5VHlwZSBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyQmFzZTo6ZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5cGUoY29uc3QgU1ZHQW5pbWF0
aW9uRWxlbWVudCYgYW5pbWF0aW9uRWxlbWVudCwgU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBhdXRvIHByb3BlcnR5
VHlwZXMgPSB0YXJnZXRFbGVtZW50LmFuaW1hdGVkUHJvcGVydHlUeXBlc0ZvckF0dHJpYnV0ZShh
dHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAocHJvcGVydHlUeXBlcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBBbmltYXRlZFVua25vd247CisKKyAgICBBU1NFUlQocHJvcGVydHlUeXBlcy5zaXpl
KCkgPD0gMik7CisgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSA9IHByb3BlcnR5VHlwZXNb
MF07CisgICAgaWYgKGFuaW1hdGlvbkVsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0
ZUNvbG9yVGFnKSAmJiB0eXBlICE9IEFuaW1hdGVkQ29sb3IpCisgICAgICAgIHJldHVybiBBbmlt
YXRlZFVua25vd247CisKKyAgICAvLyBBbmltYXRpb25zIG9mIHRyYW5zZm9ybSBsaXN0cyBhcmUg
bm90IGFsbG93ZWQgZm9yIDxhbmltYXRlPiBvciA8c2V0PgorICAgIC8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1NWRy9hbmltYXRlLmh0bWwjQW5pbWF0aW9uQXR0cmlidXRlc0FuZFByb3BlcnRpZXMK
KyAgICBpZiAodHlwZSA9PSBBbmltYXRlZFRyYW5zZm9ybUxpc3QgJiYgIWFuaW1hdGlvbkVsZW1l
bnQuaGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykpCisgICAgICAgIHJl
dHVybiBBbmltYXRlZFVua25vd247CisKKyAgICAvLyBGb3J0dW5hdGVseSB0aGVyZSdzIGp1c3Qg
b25lIHNwZWNpYWwgY2FzZSBuZWVkZWQgaGVyZTogU1ZHTWFya2VyRWxlbWVudHMgb3JpZW50QXR0
ciwgd2hpY2gKKyAgICAvLyBjb3JyZXNwb25kcyB0byBTVkdBbmltYXRlZEFuZ2xlIG9yaWVudEFu
Z2xlIGFuZCBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9yaWVudFR5cGUuIFdlIGhhdmUgdG8KKyAg
ICAvLyBmaWd1cmUgb3V0IHdob3NlIHZhbHVlIHRvIGNoYW5nZSBoZXJlLgorICAgIGlmICh0YXJn
ZXRFbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1hcmtlclRhZykgJiYgdHlwZSA9PSBBbmlt
YXRlZEFuZ2xlKSB7CisgICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzLnNpemUoKSA9PSAyKTsK
KyAgICAgICAgQVNTRVJUKHByb3BlcnR5VHlwZXNbMF0gPT0gQW5pbWF0ZWRBbmdsZSk7CisgICAg
ICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzWzFdID09IEFuaW1hdGVkRW51bWVyYXRpb24pOworICAg
IH0gZWxzZSBpZiAocHJvcGVydHlUeXBlcy5zaXplKCkgPT0gMikKKyAgICAgICAgQVNTRVJUKHBy
b3BlcnR5VHlwZXNbMF0gPT0gcHJvcGVydHlUeXBlc1sxXSk7CisKKyAgICByZXR1cm4gdHlwZTsK
K30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNv
bnRyb2xsZXJCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0F0dHJp
YnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNWR0FuaW1hdGlvbkVsZW1lbnQ7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZH
U01JTEVsZW1lbnQ7CisKK2NsYXNzIFNWR0F0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNl
IHsKK3B1YmxpYzoKKyAgICBTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyQmFzZShTVkdB
bmltYXRpb25FbGVtZW50JiwgU1ZHRWxlbWVudCYpOworICAgIHZpcnR1YWwgflNWR0F0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXJCYXNlKCkgPSBkZWZhdWx0OworCisgICAgc3RhdGljIEFuaW1h
dGVkUHJvcGVydHlUeXBlIGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKGNvbnN0IFNWR0Fu
aW1hdGlvbkVsZW1lbnQmLCBTVkdFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCisg
ICAgdmlydHVhbCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzZXRBbmltYXRlZFR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQW5pbWF0
ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywg
Y29uc3QgU3RyaW5nJiB0b1N0cmluZykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVG
cm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5
U3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9u
VmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZykgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5z
aWduZWQgcmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkgPSAwOworICAgIAorICAgIHZp
cnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHRvU3RyaW5nKSA9IDA7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgU1ZHQW5p
bWF0aW9uRWxlbWVudCYgbV9hbmltYXRpb25FbGVtZW50OworICAgIFNWR0VsZW1lbnQmIG1fdGFy
Z2V0RWxlbWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDAsNiArNzAwLDE0IEBAIHZv
aWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVBbGxBbmltYXRlZFMKIAogICAgIHN2Z0VsZW1lbnQt
PnN5bmNocm9uaXplQXR0cmlidXRlcygpOwogICAgIHN2Z0VsZW1lbnQtPmVsZW1lbnREYXRhKCkt
PnNldEFuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KGZhbHNlKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogRGVsZXRlIHRoZSBTVkcgdGVhciBvZmYgcHJvcGVydGllcyBjb2RlIGZyb20gdGhpcyBm
dW5jdGlvbgorICAgIAorICAgIC8vIFNWR1Byb3BlcnR5UmVnaXN0cnk6OnN5bmNocm9uaXplQWxs
QXR0cmlidXRlcygpIHJldHVybnMgdGhlIG5ldyB2YWx1ZXMgb2YKKyAgICAvLyB0aGUgcHJvcGVy
dGllcyB3aGljaCBoYXZlIGNoYW5nZWQgYnV0IG5vdCBjb21taXR0ZWQgeWV0LgorICAgIGF1dG8g
bWFwID0gc3ZnRWxlbWVudC0+cHJvcGVydHlSZWdpc3RyeSgpLnN5bmNocm9uaXplQWxsQXR0cmli
dXRlcygpOworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtYXApCisgICAgICAgIHN2Z0Vs
ZW1lbnQtPnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoZW50cnkua2V5LCBlbnRyeS52YWx1
ZSk7CiB9CiAKIHZvaWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVBbmltYXRlZFNWR0F0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdApAQCAtNzA3LDEzICs3MTUsNDggQEAg
dm9pZCBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQQogICAgIGlmICghZWxlbWVu
dERhdGEoKSB8fCAhZWxlbWVudERhdGEoKS0+YW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHko
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IERlbGV0ZSB0aGUgU1ZHIHRlYXIg
b2ZmIHByb3BlcnRpZXMgY29kZSBmcm9tIHRoaXMgZnVuY3Rpb24KKwogICAgIFNWR0VsZW1lbnQq
IG5vbkNvbnN0VGhpcyA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMpOwogICAgIGlmIChu
YW1lID09IGFueVFOYW1lKCkpCiAgICAgICAgIHN5bmNocm9uaXplQWxsQW5pbWF0ZWRTVkdBdHRy
aWJ1dGUobm9uQ29uc3RUaGlzKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoaXNBbmltYXRlZFBy
b3BlcnR5QXR0cmlidXRlKG5hbWUpKSB7CisgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUg
cHJvcGVydHkgaGFzIGNoYW5nZWQsIHNlcmlhbGl6ZSB0aGUgbmV3IHZhbHVlIHRvIHRoZSBhdHRy
aWJ1dGUuCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJvcGVydHlSZWdpc3RyeSgpLnN5bmNo
cm9uaXplKG5hbWUpKQorICAgICAgICAgICAgbm9uQ29uc3RUaGlzLT5zZXRTeW5jaHJvbml6ZWRM
YXp5QXR0cmlidXRlKG5hbWUsICp2YWx1ZSk7CisgICAgfSBlbHNlCiAgICAgICAgIG5vbkNvbnN0
VGhpcy0+c3luY2hyb25pemVBdHRyaWJ1dGUobmFtZSk7CiB9CiAKK3ZvaWQgU1ZHRWxlbWVudDo6
Y29tbWl0UHJvcGVydHlDaGFuZ2UoU1ZHQW5pbWF0ZWRQcm9wZXJ0eSYgYW5pbWF0ZWRQcm9wZXJ0
eSkKK3sKKyAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eVJlZ2lzdHJ5
KCkuYW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZU5hbWUoYW5pbWF0ZWRQcm9wZXJ0eSk7CisgICAg
c2V0U3luY2hyb25pemVkTGF6eUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZFByb3Bl
cnR5LmJhc2VWYWxBc1N0cmluZygpKTsKKworICAgIGludmFsaWRhdGVTVkdBdHRyaWJ1dGVzKCk7
CisgICAgc3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKK30KKworYm9vbCBTVkdF
bGVtZW50Ojppc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvcGVydHlSZWdpc3RyeSgpLmlz
QW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKK30KKworYm9vbCBTVkdF
bGVtZW50Ojppc0FuaW1hdGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZShh
dHRyaWJ1dGVOYW1lKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFNWR0F0dHJpYnV0ZUFuaW1hdG9y
PiBTVkdFbGVtZW50OjpjcmVhdGVBbmltYXRvcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNNb2RlIGNhbGNNb2RlLCBi
b29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkKK3sKKyAgICBhdXRvIGFuaW1hdG9y
ID0gcHJvcGVydHlSZWdpc3RyeSgpLmNyZWF0ZUFuaW1hdG9yKGF0dHJpYnV0ZU5hbWUsIGFuaW1h
dGlvbk1vZGUsIGNhbGNNb2RlLCBpc0FjY3VtdWxhdGVkLCBpc0FkZGl0aXZlKTsKKyAgICBpZiAo
IWFuaW1hdG9yKQorICAgICAgICByZXR1cm4gYW5pbWF0b3I7CisgICAgZm9yIChhdXRvKiBpbnN0
YW5jZSA6IGluc3RhbmNlcygpKQorICAgICAgICBpbnN0YW5jZS0+cHJvcGVydHlSZWdpc3RyeSgp
LmFwcGVuZEFuaW1hdGVkSW5zdGFuY2UoYXR0cmlidXRlTmFtZSwgKmFuaW1hdG9yKTsKKyAgICBy
ZXR1cm4gYW5pbWF0b3I7Cit9CisKIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxlbWVudDo6
cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGluIGEgPHVzZT4gdHJl
ZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJlZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEzIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdB
bmltYXRlZFByb3BlcnR5SW1wbC5oIgogI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZU93bmVyUHJveHku
aCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKICNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNpbmdFcnJvci5oIgorI2lu
Y2x1ZGUgIlNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1l
bnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC00Niw3ICs0Nyw3IEBAIGNsYXNzIFNWR1VzZUVsZW1lbnQ7CiAKIHZvaWQgbWFwQXR0cmli
dXRlVG9DU1NQcm9wZXJ0eShIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlE
PiogcHJvcGVydHlOYW1lVG9JZE1hcCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpOwog
Ci1jbGFzcyBTVkdFbGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQsIHB1YmxpYyBTVkdMYW5n
U3BhY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTVkdFbGVtZW50PiB7CitjbGFzcyBTVkdFbGVt
ZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQsIHB1YmxpYyBTVkdMYW5nU3BhY2UsIHB1YmxpYyBT
VkdQcm9wZXJ0eU93bmVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U1ZHRWxlbWVudD4gewogICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRWxlbWVudCk7CiBwdWJsaWM6CiAgICAgYm9vbCBp
c091dGVybW9zdFNWR1NWR0VsZW1lbnQoKSBjb25zdDsKQEAgLTE1MCw2ICsxNTEsMTggQEAgcHVi
bGljOgogICAgIFJlZlB0cjxTVkdMZWdhY3lBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0
ZUFuaW1hdGVkUHJvcGVydHkoY29uc3QgU1ZHQXR0cmlidXRlJiBhdHRyaWJ1dGUpIHsgcmV0dXJu
IGF0dHJpYnV0ZU93bmVyUHJveHkoKS5sb29rdXBPckNyZWF0ZUFuaW1hdGVkUHJvcGVydHkoYXR0
cmlidXRlKTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U1ZHTGVnYWN5QW5pbWF0ZWRQcm9wZXJ0eT4+
IGxvb2t1cE9yQ3JlYXRlQW5pbWF0ZWRQcm9wZXJ0aWVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpIHsgcmV0dXJuIGF0dHJpYnV0ZU93bmVyUHJveHkoKS5sb29rdXBPckNyZWF0ZUFuaW1hdGVk
UHJvcGVydGllcyhuYW1lKTsgfQogCisgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1By
b3BlcnR5T3duZXJSZWdpc3RyeTxTVkdFbGVtZW50PjsKKyAgICB2aXJ0dWFsIGNvbnN0IFNWR1By
b3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnR5UmVnaXN0cnk7IH0KKworICAgIGJvb2wgaXNBbmltYXRlZFByb3BlcnR5QXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBib29sIGlzQW5pbWF0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgdm9pZCBjb21taXRQcm9wZXJ0eUNo
YW5nZSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgY29tbWl0UHJvcGVydHlDaGFuZ2UoU1ZHQW5p
bWF0ZWRQcm9wZXJ0eSYpOworCisgICAgY29uc3QgU1ZHRWxlbWVudCogYXR0cmlidXRlQ29udGV4
dEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisgICAgc3RkOjp1bmlx
dWVfcHRyPFNWR0F0dHJpYnV0ZUFuaW1hdG9yPiBjcmVhdGVBbmltYXRvcihjb25zdCBRdWFsaWZp
ZWROYW1lJiwgQW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9v
bCBpc0FkZGl0aXZlKTsKKwogICAgIC8vIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRoZSBSZW5kZXJU
cmVlLCBhbmltYXRpb24gYW5kIERPTS4KICAgICBjb25zdCBhdXRvJiBjbGFzc05hbWUoKSBjb25z
dCB7IHJldHVybiBtX2NsYXNzTmFtZS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgp
KTsgfQogICAgIGF1dG8gY2xhc3NOYW1lQW5pbWF0ZWQoKSB7IHJldHVybiBtX2NsYXNzTmFtZS5h
bmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KQEAgLTIwNCw2ICsyMTcs
OCBAQCBwcml2YXRlOgogCiAgICAgQXR0cmlidXRlT3duZXJQcm94eSBtX2F0dHJpYnV0ZU93bmVy
UHJveHkgeyAqdGhpcyB9OwogICAgIFNWR0FuaW1hdGVkU3RyaW5nQXR0cmlidXRlIG1fY2xhc3NO
YW1lOworICAgIAorICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKIH07CiAKIGNsYXNzIFNWR0VsZW1lbnQ6Okluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQwLDYgKzQwLDEzIEBAIGlubGluZSBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6U1ZHRkUKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShTVkdOYW1l
czo6ZmVDb252b2x2ZU1hdHJpeFRhZykpOwogICAgIHJlZ2lzdGVyQXR0cmlidXRlcygpOworCisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VGbGFnLCBbXSB7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8
U1ZHTmFtZXM6Om9yZGVyQXR0ciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX29yZGVy
WCwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjptX29yZGVyWT4oKTsKKyAgICAgICAgUHJv
cGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6dGFyZ2V0WEF0dHIsICZT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV90YXJnZXRYPigpOworICAgICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjp0YXJnZXRZQXR0ciwgJlNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjptX3RhcmdldFk+KCk7CisgICAgfSk7CiB9CiAKIFJlZjxT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQpCkBA
IC01OSwzMiArNjYsMTUgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRUNvbnZvbHZlTWF0cml4
RQogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om9yZGVyWElkZW50aWZpZXIoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNfaWRlbnRpZmllcigiU1ZHT3JkZXJYIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfaWRlbnRp
ZmllcjsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dDo6b3JkZXJZSWRlbnRpZmllcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gc19pZGVudGlmaWVyKCJTVkdPcmRlclkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19pZGVudGlmaWVyOwotfQotCiB2b2lkIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjpyZWdpc3RlckF0dHJpYnV0ZXMoKQogewogICAgIGF1dG8m
IHJlZ2lzdHJ5ID0gYXR0cmlidXRlUmVnaXN0cnkoKTsKICAgICBpZiAoIXJlZ2lzdHJ5LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmlidXRlPFNW
R05hbWVzOjppbkF0dHIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9pbjE+KCk7Ci0g
ICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6Om9yZGVyQXR0ciwKLSAgICAg
ICAgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpvcmRlclhJZGVudGlmaWVyLCAmU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fb3JkZXJYLAotICAgICAgICAmU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6Om9yZGVyWUlkZW50aWZpZXIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dDo6bV9vcmRlclk+KCk7CiAgICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6
Omtlcm5lbE1hdHJpeEF0dHIsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9rZXJuZWxN
YXRyaXg+KCk7CiAgICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OmRpdmlz
b3JBdHRyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fZGl2aXNvcj4oKTsKICAgICBy
ZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6Ymlhc0F0dHIsICZTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6bV9iaWFzPigpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXR0cmli
dXRlPFNWR05hbWVzOjp0YXJnZXRYQXR0ciwgJlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpt
X3RhcmdldFg+KCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OnRh
cmdldFlBdHRyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fdGFyZ2V0WT4oKTsKICAg
ICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6ZWRnZU1vZGVBdHRyLCBFZGdl
TW9kZVR5cGUsICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6bV9lZGdlTW9kZT4oKTsKICAg
ICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0
dHIsCiAgICAgICAgICZTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6a2VybmVsVW5pdExlbmd0
aFhJZGVudGlmaWVyLCAmU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6Om1fa2VybmVsVW5pdExl
bmd0aFgsCkBAIC0xMDIsOCArOTIsOCBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpwYXJzZUF0CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6Om9yZGVyQXR0cikgewogICAgICAg
ICBmbG9hdCB4LCB5OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1
ZSwgeCwgeSkgJiYgeCA+PSAxICYmIHkgPj0gMSkgewotICAgICAgICAgICAgbV9vcmRlclguc2V0
VmFsdWUoeCk7Ci0gICAgICAgICAgICBtX29yZGVyWS5zZXRWYWx1ZSh5KTsKKyAgICAgICAgICAg
IG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7CisgICAgICAgICAgICBtX29yZGVyWS0+
c2V0QmFzZVZhbEludGVybmFsKHkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoImZlQ29udm9sdmVNYXRy
aXg6IHByb2JsZW0gcGFyc2luZyBvcmRlcj1cIiIgKyB2YWx1ZSArICJcIi4gRmlsdGVyZWQgZWxl
bWVudCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTE0MSwx
MiArMTMxLDEyIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXQKICAg
ICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIpIHsKLSAgICAgICAg
bV90YXJnZXRYLnNldFZhbHVlKHZhbHVlLnN0cmluZygpLnRvVUludFN0cmljdCgpKTsKKyAgICAg
ICAgbV90YXJnZXRYLT5zZXRCYXNlVmFsSW50ZXJuYWwodmFsdWUuc3RyaW5nKCkudG9VSW50U3Ry
aWN0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFt
ZXM6OnRhcmdldFlBdHRyKSB7Ci0gICAgICAgIG1fdGFyZ2V0WS5zZXRWYWx1ZSh2YWx1ZS5zdHJp
bmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAgIG1fdGFyZ2V0WS0+c2V0QmFzZVZhbEludGVy
bmFsKHZhbHVlLnN0cmluZygpLnRvVUludFN0cmljdCgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTk3LDggKzE4Nyw4IEBAIGJvb2wgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
OnNldEZpbHQKIAogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c2V0T3JkZXIoZmxv
YXQgeCwgZmxvYXQgeSkKIHsKLSAgICBtX29yZGVyWC5zZXRWYWx1ZSh4KTsKLSAgICBtX29yZGVy
WS5zZXRWYWx1ZSh5KTsKKyAgICBtX29yZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHgpOworICAg
IG1fb3JkZXJZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CiAgICAgaW52YWxpZGF0ZSgpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuaAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw2IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZEJvb2xlYW4uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1i
ZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckxpc3QuaCIKICNpbmNsdWRlICJTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNzMsMjYgKzY4LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5n
dGgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKTsKIAog
ICAgIFN0cmluZyBpbjEoKSBjb25zdCB7IHJldHVybiBtX2luMS5jdXJyZW50VmFsdWUoYXR0cmli
dXRlT3duZXJQcm94eSgpKTsgfQotICAgIGludCBvcmRlclgoKSBjb25zdCB7IHJldHVybiBtX29y
ZGVyWC5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQotICAgIGludCBvcmRl
clkoKSBjb25zdCB7IHJldHVybiBtX29yZGVyWS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQ
cm94eSgpKTsgfQorICAgIGludCBvcmRlclgoKSBjb25zdCB7IHJldHVybiBtX29yZGVyWC0+Y3Vy
cmVudFZhbHVlKCk7IH0KKyAgICBpbnQgb3JkZXJZKCkgY29uc3QgeyByZXR1cm4gbV9vcmRlclkt
PmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgY29uc3QgU1ZHTnVtYmVyTGlzdFZhbHVlcyYga2VybmVs
TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxNYXRyaXguY3VycmVudFZhbHVlKGF0dHJp
YnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBmbG9hdCBkaXZpc29yKCkgY29uc3QgeyByZXR1cm4g
bV9kaXZpc29yLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgZmxv
YXQgYmlhcygpIGNvbnN0IHsgcmV0dXJuIG1fYmlhcy5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3du
ZXJQcm94eSgpKTsgfQotICAgIGludCB0YXJnZXRYKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRY
LmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9Ci0gICAgaW50IHRhcmdldFko
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldFkuY3VycmVudFZhbHVlKGF0dHJpYnV0ZU93bmVyUHJv
eHkoKSk7IH0KKyAgICBpbnQgdGFyZ2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0WC0+Y3Vy
cmVudFZhbHVlKCk7IH0KKyAgICBpbnQgdGFyZ2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
WS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7
IHJldHVybiBtX2VkZ2VNb2RlLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9
CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVu
aXRMZW5ndGhYLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgZmxv
YXQga2VybmVsVW5pdExlbmd0aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZ
LmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgYm9vbCBwcmVzZXJ2
ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhLmN1cnJlbnRWYWx1ZShhdHRy
aWJ1dGVPd25lclByb3h5KCkpOyB9CiAKICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IGlu
MUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjEuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25l
clByb3h5KCkpOyB9Ci0gICAgUmVmUHRyPFNWR0FuaW1hdGVkSW50ZWdlcj4gb3JkZXJYQW5pbWF0
ZWQoKSB7IHJldHVybiBtX29yZGVyWC5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJv
eHkoKSk7IH0KLSAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBvcmRlcllBbmltYXRlZCgp
IHsgcmV0dXJuIG1fb3JkZXJZLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgp
KTsgfQorICAgIFNWR0FuaW1hdGVkSW50ZWdlciYgb3JkZXJYQW5pbWF0ZWQoKSB7IHJldHVybiBt
X29yZGVyWDsgfQorICAgIFNWR0FuaW1hdGVkSW50ZWdlciYgb3JkZXJZQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX29yZGVyWTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlckxpc3Q+IGtlcm5l
bE1hdHJpeEFuaW1hdGVkKCkgeyByZXR1cm4gbV9rZXJuZWxNYXRyaXguYW5pbWF0ZWRQcm9wZXJ0
eShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVy
PiBkaXZpc29yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2Rpdmlzb3IuYW5pbWF0ZWRQcm9wZXJ0eShh
dHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBi
aWFzQW5pbWF0ZWQoKSB7IHJldHVybiBtX2JpYXMuYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVP
d25lclByb3h5KCkpOyB9Ci0gICAgUmVmUHRyPFNWR0FuaW1hdGVkSW50ZWdlcj4gdGFyZ2V0WEFu
aW1hdGVkKCkgeyByZXR1cm4gbV90YXJnZXRYLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3du
ZXJQcm94eSgpKTsgfQotICAgIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IHRhcmdldFlBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fdGFyZ2V0WS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVy
UHJveHkoKSk7IH0KKyAgICBTVkdBbmltYXRlZEludGVnZXImIHRhcmdldFhBbmltYXRlZCgpIHsg
cmV0dXJuIG1fdGFyZ2V0WDsgfQorICAgIFNWR0FuaW1hdGVkSW50ZWdlciYgdGFyZ2V0WUFuaW1h
dGVkKCkgeyByZXR1cm4gbV90YXJnZXRZOyB9CiAgICAgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+IGVkZ2VNb2RlQW5pbWF0ZWQoKSB7IHJldHVybiBtX2VkZ2VNb2RlLmFuaW1hdGVkUHJv
cGVydHkoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51
bWJlcj4ga2VybmVsVW5pdExlbmd0aFhBbmltYXRlZCgpIHsgcmV0dXJuIG1fa2VybmVsVW5pdExl
bmd0aFguYW5pbWF0ZWRQcm9wZXJ0eShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CiAgICAgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBrZXJuZWxVbml0TGVuZ3RoWUFuaW1hdGVkKCkgeyByZXR1
cm4gbV9rZXJuZWxVbml0TGVuZ3RoWS5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJv
eHkoKSk7IH0KQEAgLTEwNSw2ICsxMDAsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBBdHRyaWJ1
dGVPd25lclByb3h5OjpBdHRyaWJ1dGVSZWdpc3RyeSYgYXR0cmlidXRlUmVnaXN0cnkoKSB7IHJl
dHVybiBBdHRyaWJ1dGVPd25lclByb3h5OjphdHRyaWJ1dGVSZWdpc3RyeSgpOyB9CiAgICAgc3Rh
dGljIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lKSB7IHJldHVybiBBdHRyaWJ1dGVPd25lclByb3h5Ojppc0tub3duQXR0cmlidXRlKGF0dHJp
YnV0ZU5hbWUpOyB9CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJBdHRyaWJ1dGVzKCk7CisgICAg
CisgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzPjsKKyAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBjb25z
dCBTVkdBdHRyaWJ1dGVPd25lclByb3h5JiBhdHRyaWJ1dGVPd25lclByb3h5KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9hdHRyaWJ1dGVPd25lclByb3h5OyB9CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7
CkBAIC0xMTMsMjAgKzExMSwyMCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
ICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBvcmRlclhJZGVu
dGlmaWVyKCk7Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgb3JkZXJZSWRlbnRpZmll
cigpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGtlcm5lbFVuaXRMZW5ndGhYSWRl
bnRpZmllcigpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGtlcm5lbFVuaXRMZW5n
dGhZSWRlbnRpZmllcigpOwogCiAgICAgQXR0cmlidXRlT3duZXJQcm94eSBtX2F0dHJpYnV0ZU93
bmVyUHJveHkgeyAqdGhpcyB9OworICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKKwogICAgIFNWR0FuaW1hdGVkU3RyaW5nQXR0cmlidXRlIG1faW4xOwot
ICAgIFNWR0FuaW1hdGVkSW50ZWdlckF0dHJpYnV0ZSBtX29yZGVyWDsKLSAgICBTVkdBbmltYXRl
ZEludGVnZXJBdHRyaWJ1dGUgbV9vcmRlclk7CisgICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4g
bV9vcmRlclggeyBTVkdBbmltYXRlZEludGVnZXI6OmNyZWF0ZSh0aGlzKSB9OworICAgIFJlZjxT
VkdBbmltYXRlZEludGVnZXI+IG1fb3JkZXJZIHsgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjcmVhdGUo
dGhpcykgfTsKICAgICBTVkdBbmltYXRlZE51bWJlckxpc3RBdHRyaWJ1dGUgbV9rZXJuZWxNYXRy
aXg7CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXJBdHRyaWJ1dGUgbV9kaXZpc29yOwogICAgIFNWR0Fu
aW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fYmlhczsKLSAgICBTVkdBbmltYXRlZEludGVnZXJBdHRy
aWJ1dGUgbV90YXJnZXRYOwotICAgIFNWR0FuaW1hdGVkSW50ZWdlckF0dHJpYnV0ZSBtX3Rhcmdl
dFk7CisgICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4gbV90YXJnZXRYIHsgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyOjpjcmVhdGUodGhpcykgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX3Rh
cmdldFkgeyBTVkdBbmltYXRlZEludGVnZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFNWR0FuaW1h
dGVkRW51bWVyYXRpb25BdHRyaWJ1dGU8RWRnZU1vZGVUeXBlPiBtX2VkZ2VNb2RlIHsgRURHRU1P
REVfRFVQTElDQVRFIH07CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXJBdHRyaWJ1dGUgbV9rZXJuZWxV
bml0TGVuZ3RoWDsKICAgICBTVkdBbmltYXRlZE51bWJlckF0dHJpYnV0ZSBtX2tlcm5lbFVuaXRM
ZW5ndGhZOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMSBAQCBpbmxp
bmUgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6U1ZHRkVUdXJiCiB7CiAgICAgQVNTRVJUKGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmZlVHVyYnVsZW5jZVRhZykpOwogICAgIHJlZ2lzdGVyQXR0cmlidXRl
cygpOworICAgIAorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdp
c3RlclByb3BlcnR5PFNWR05hbWVzOjpudW1PY3RhdmVzQXR0ciwgJlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6Om1fbnVtT2N0YXZlcz4oKTsKKyAgICB9KTsKIH0KIAogUmVmPFNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQ+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQpCkBAIC02Miw3ICs2Nyw2IEBAIHZvaWQg
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cmVnaXN0ZXJBdHQKICAgICByZWdpc3RyeS5yZWdpc3Rl
ckF0dHJpYnV0ZTxTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIsCiAgICAgICAgICZTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpiYXNlRnJlcXVlbmN5WElkZW50aWZpZXIsICZTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjptX2Jhc2VGcmVxdWVuY3lYLAogICAgICAgICAmU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6YmFzZUZyZXF1ZW5jeVlJZGVudGlmaWVyLCAmU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
bV9iYXNlRnJlcXVlbmN5WT4oKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlckF0dHJpYnV0ZTxTVkdO
YW1lczo6bnVtT2N0YXZlc0F0dHIsICZTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjptX251bU9jdGF2
ZXM+KCk7CiAgICAgcmVnaXN0cnkucmVnaXN0ZXJBdHRyaWJ1dGU8U1ZHTmFtZXM6OnNlZWRBdHRy
LCAmU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6bV9zZWVkPigpOwogICAgIHJlZ2lzdHJ5LnJlZ2lz
dGVyQXR0cmlidXRlPFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIsIFNWR1N0aXRjaE9wdGlvbnMs
ICZTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjptX3N0aXRjaFRpbGVzPigpOwogICAgIHJlZ2lzdHJ5
LnJlZ2lzdGVyQXR0cmlidXRlPFNWR05hbWVzOjp0eXBlQXR0ciwgVHVyYnVsZW5jZVR5cGUsICZT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjptX3R5cGU+KCk7CkBAIC05OSw3ICsxMDMsNyBAQCB2b2lk
IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNlQXR0cmliCiAgICAgfQogCiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKSB7Ci0gICAgICAgIG1fbnVtT2N0YXZlcy5z
ZXRWYWx1ZSh2YWx1ZS5zdHJpbmcoKS50b1VJbnRTdHJpY3QoKSk7CisgICAgICAgIG1fbnVtT2N0
YXZlcy0+c2V0QmFzZVZhbEludGVybmFsKHZhbHVlLnN0cmluZygpLnRvVUludFN0cmljdCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI2LDcgKzEzMCw3IEBAIGJvb2wgU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWYKIAogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIGlmIChpc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgIGlmIChpc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSB8fCBQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRl
KGF0dHJOYW1lKSkgewogICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0
aGlzKTsKICAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQuaAkocmV2aXNpb24gMjQyOTc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDcgKzIzLDYgQEAKIAog
I2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRp
b24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEludGVnZXIuaCIKICNpbmNsdWRlICJTVkdBbmlt
YXRlZE51bWJlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIgogCkBAIC0xMDAsMTQgKzk5LDE0IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lYKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WC5jdXJyZW50VmFsdWUo
YXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZKCkgY29u
c3QgeyByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQ
cm94eSgpKTsgfQotICAgIGludCBudW1PY3RhdmVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1PY3Rh
dmVzLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclByb3h5KCkpOyB9CisgICAgaW50IG51bU9j
dGF2ZXMoKSBjb25zdCB7IHJldHVybiBtX251bU9jdGF2ZXMtPmN1cnJlbnRWYWx1ZSgpOyB9CiAg
ICAgZmxvYXQgc2VlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlZC5jdXJyZW50VmFsdWUoYXR0cmli
dXRlT3duZXJQcm94eSgpKTsgfQogICAgIFNWR1N0aXRjaE9wdGlvbnMgc3RpdGNoVGlsZXMoKSBj
b25zdCB7IHJldHVybiBtX3N0aXRjaFRpbGVzLmN1cnJlbnRWYWx1ZShhdHRyaWJ1dGVPd25lclBy
b3h5KCkpOyB9CiAgICAgVHVyYnVsZW5jZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZS5jdXJyZW50VmFsdWUoYXR0cmlidXRlT3duZXJQcm94eSgpKTsgfQogCiAgICAgUmVmUHRyPFNW
R0FuaW1hdGVkTnVtYmVyPiBiYXNlRnJlcXVlbmN5WEFuaW1hdGVkKCkgeyByZXR1cm4gbV9iYXNl
RnJlcXVlbmN5WC5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAg
ICBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IGJhc2VGcmVxdWVuY3lZQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX2Jhc2VGcmVxdWVuY3lZLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRlT3duZXJQcm94
eSgpKTsgfQotICAgIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+IG51bU9jdGF2ZXNBbmltYXRl
ZCgpIHsgcmV0dXJuIG1fbnVtT2N0YXZlcy5hbmltYXRlZFByb3BlcnR5KGF0dHJpYnV0ZU93bmVy
UHJveHkoKSk7IH0KKyAgICBTVkdBbmltYXRlZEludGVnZXImIG51bU9jdGF2ZXNBbmltYXRlZCgp
IHsgcmV0dXJuIG1fbnVtT2N0YXZlczsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
c2VlZEFuaW1hdGVkKCkgeyByZXR1cm4gbV9zZWVkLmFuaW1hdGVkUHJvcGVydHkoYXR0cmlidXRl
T3duZXJQcm94eSgpKTsgfQogICAgIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBzdGl0
Y2hUaWxlc0FuaW1hdGVkKCkgeyByZXR1cm4gbV9zdGl0Y2hUaWxlcy5hbmltYXRlZFByb3BlcnR5
KGF0dHJpYnV0ZU93bmVyUHJveHkoKSk7IH0KICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4gdHlwZUFuaW1hdGVkKCkgeyByZXR1cm4gbV90eXBlLmFuaW1hdGVkUHJvcGVydHkoYXR0
cmlidXRlT3duZXJQcm94eSgpKTsgfQpAQCAtMTE5LDYgKzExOCw5IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIEF0dHJpYnV0ZU93bmVyUHJveHk6OkF0dHJpYnV0ZVJlZ2lzdHJ5JiBhdHRyaWJ1dGVS
ZWdpc3RyeSgpIHsgcmV0dXJuIEF0dHJpYnV0ZU93bmVyUHJveHk6OmF0dHJpYnV0ZVJlZ2lzdHJ5
KCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZU5hbWUpIHsgcmV0dXJuIEF0dHJpYnV0ZU93bmVyUHJveHk6OmlzS25vd25B
dHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7IH0KICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckF0dHJp
YnV0ZXMoKTsKKyAgICAKKyAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlP
d25lclJlZ2lzdHJ5PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcz47CisgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVy
dHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQog
CiAgICAgY29uc3QgU1ZHQXR0cmlidXRlT3duZXJQcm94eSYgYXR0cmlidXRlT3duZXJQcm94eSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXR0cmlidXRlT3duZXJQcm94eTsgfQogICAgIHZvaWQg
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYp
IG92ZXJyaWRlOwpAQCAtMTMxLDkgKzEzMywxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGJhc2VGcmVxdWVuY3lZSWRlbnRpZmllcigpOwogCiAgICAgQXR0cmli
dXRlT3duZXJQcm94eSBtX2F0dHJpYnV0ZU93bmVyUHJveHkgeyAqdGhpcyB9OworICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBTVkdBbmltYXRl
ZE51bWJlckF0dHJpYnV0ZSBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIFNWR0FuaW1hdGVkTnVtYmVy
QXR0cmlidXRlIG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmli
dXRlIG1fbnVtT2N0YXZlcyB7IDEgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX251
bU9jdGF2ZXMgeyBTVkdBbmltYXRlZEludGVnZXI6OmNyZWF0ZSh0aGlzLCAxKSB9OwogICAgIFNW
R0FuaW1hdGVkTnVtYmVyQXR0cmlidXRlIG1fc2VlZDsKICAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uQXR0cmlidXRlPFNWR1N0aXRjaE9wdGlvbnM+IG1fc3RpdGNoVGlsZXMgeyBTVkdfU1RJVENI
VFlQRV9OT1NUSVRDSCB9OwogICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb25BdHRyaWJ1dGU8VHVy
YnVsZW5jZVR5cGU+IG1fdHlwZSB7IFR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDcgKzI0LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlci5oIgogI2luY2x1ZGUgIlNW
R0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlZ2FjeUF0dHJpYnV0
ZUFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eVBhcnNlci5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlRWxlbWVudEJhc2UuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0b3JGYWN0b3J5LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgi
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTVkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpTVkdMZWdhY3lBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyKFNWR0FuaW1hdGlvbkVsZW1lbnQmIGFuaW1hdGlvbkVs
ZW1lbnQsIFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQpCisgICAgOiBTVkdBdHRyaWJ1dGVBbmlt
YXRpb25Db250cm9sbGVyQmFzZShhbmltYXRpb25FbGVtZW50LCB0YXJnZXRFbGVtZW50KQorICAg
ICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShh
bmltYXRpb25FbGVtZW50LCB0YXJnZXRFbGVtZW50LCBhbmltYXRpb25FbGVtZW50LmF0dHJpYnV0
ZU5hbWUoKSkpCit7Cit9CisKK1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yJiBTVkdMZWdhY3lBdHRy
aWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjphbmltYXRlZFR5cGVBbmltYXRvcigpCit7CisgICAg
aWYgKCFtX2FuaW1hdG9yKQorICAgICAgICBtX2FuaW1hdG9yID0gU1ZHQW5pbWF0b3JGYWN0b3J5
OjpjcmVhdGUoJm1fYW5pbWF0aW9uRWxlbWVudCwgJm1fdGFyZ2V0RWxlbWVudCwgbV9hbmltYXRl
ZFByb3BlcnR5VHlwZSk7CisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gbV9h
bmltYXRvci0+dHlwZSgpKTsKKyAgICByZXR1cm4gKm1fYW5pbWF0b3I7Cit9CisKK2Jvb2wgU1ZH
TGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBZGRpdGl2ZSgpIGNvbnN0Cit7
CisgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2FuaW1hdGUuaHRtbCNBbmlt
YXRpb25BdHRyaWJ1dGVzQW5kUHJvcGVydGllcy4KKyAgICBzd2l0Y2ggKG1fYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUpIHsKKyAgICBjYXNlIEFuaW1hdGVkQm9vbGVhbjoKKyAgICBjYXNlIEFuaW1hdGVk
RW51bWVyYXRpb246CisgICAgY2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86CisgICAg
Y2FzZSBBbmltYXRlZFN0cmluZzoKKyAgICBjYXNlIEFuaW1hdGVkVW5rbm93bjoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgQW5pbWF0ZWRBbmdsZToKKyAgICBjYXNlIEFuaW1hdGVk
Q29sb3I6CisgICAgY2FzZSBBbmltYXRlZEludGVnZXI6CisgICAgY2FzZSBBbmltYXRlZEludGVn
ZXJPcHRpb25hbEludGVnZXI6CisgICAgY2FzZSBBbmltYXRlZExlbmd0aDoKKyAgICBjYXNlIEFu
aW1hdGVkTGVuZ3RoTGlzdDoKKyAgICBjYXNlIEFuaW1hdGVkTnVtYmVyOgorICAgIGNhc2UgQW5p
bWF0ZWROdW1iZXJMaXN0OgorICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcjoK
KyAgICBjYXNlIEFuaW1hdGVkUGF0aDoKKyAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgorICAgIGNh
c2UgQW5pbWF0ZWRSZWN0OgorICAgIGNhc2UgQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgU1ZHTGVn
YWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9hbmltYXRlZFByb3BlcnR5VHlwZSAhPSBBbmltYXRlZFVu
a25vd247Cit9CisKK2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiB0b1N0cmluZykKK3sKKyAgICBtX2FuaW1hdGlvbkVsZW1lbnQuZGV0ZXJtaW5lUHJv
cGVydHlWYWx1ZVR5cGVzKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsKKyAgICBhbmltYXRlZFR5cGVB
bmltYXRvcigpLmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhtX2Zyb21UeXBlLCBtX3RvVHlwZSwg
ZnJvbVN0cmluZywgdG9TdHJpbmcpOworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBl
ID09IG1fYW5pbWF0b3ItPnR5cGUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZH
TGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFs
dWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykKK3sK
KyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50LmFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25N
b2RlOjpCeSAmJiAhaXNBZGRpdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBmcm9tLWJ5IGFuaW1hdGlvbiBtYXkgb25seSBiZSB1c2VkIHdpdGggYXR0cmlidXRlcyB0aGF0
IHN1cHBvcnQgYWRkaXRpb24gKGUuZy4gbW9zdCBudW1lcmljIGF0dHJpYnV0ZXMpLgorICAgIGlm
IChtX2FuaW1hdGlvbkVsZW1lbnQuYW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OkZy
b21CeSAmJiAhaXNBZGRpdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Fu
aW1hdGlvbkVsZW1lbnQuZGV0ZXJtaW5lUHJvcGVydHlWYWx1ZVR5cGVzKGZyb21TdHJpbmcsIGJ5
U3RyaW5nKTsKKyAgICBhbmltYXRlZFR5cGVBbmltYXRvcigpLmNhbGN1bGF0ZUZyb21BbmRCeVZh
bHVlcyhtX2Zyb21UeXBlLCBtX3RvVHlwZSwgZnJvbVN0cmluZywgYnlTdHJpbmcpOworICAgIEFT
U0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IG1fYW5pbWF0b3ItPnR5cGUoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRF
bmRPZkR1cmF0aW9uU3RyaW5nKQoreworICAgIGlmICh0b0F0RW5kT2ZEdXJhdGlvblN0cmluZy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3RvQXRFbmRPZkR1cmF0aW9u
VHlwZSA9IGFuaW1hdGVkVHlwZUFuaW1hdG9yKCkuY29uc3RydWN0RnJvbVN0cmluZyh0b0F0RW5k
T2ZEdXJhdGlvblN0cmluZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZm5kZWYgTkRFQlVH
CitzdGF0aWMgaW5saW5lIGJvb2wgcHJvcGVydHlUeXBlc0FyZUNvbnNpc3RlbnQoQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgZXhwZWN0ZWRQcm9wZXJ0eVR5cGUsIGNvbnN0IFNWR0VsZW1lbnRBbmltYXRl
ZFByb3BlcnR5TGlzdCYgYW5pbWF0ZWRUeXBlcykKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiBh
bmltYXRlZFR5cGVzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiB0eXBlLnByb3Bl
cnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlwZSAhPSBwcm9wZXJ0
eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIG9ubHkgYWxsb3dlZCBpbmNvbnNpc3RlbmN5LiBTVkdBbmltYXRlZEFuZ2xlQW5pbWF0b3Ig
aGFuZGxlcyBib3RoIFNWR0FuaW1hdGVkQW5nbGUgJiBTVkdBbmltYXRlZEVudW1lcmF0aW9uIGZv
ciBtYXJrZXJzIG9yaWVudCBhdHRyaWJ1dGUuCisgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVk
UHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYgcHJvcGVydHktPmFuaW1hdGVkUHJvcGVy
dHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBT
VkdMZWdhY3lBdHRyaWJ1dGVBbmltYXRpb25Db250cm9sbGVyOjpyZXNldEFuaW1hdGVkVHlwZSgp
Cit7CisgICAgU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3ImIGFuaW1hdG9yID0gYW5pbWF0ZWRUeXBl
QW5pbWF0b3IoKTsKKyAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBhbmltYXRv
ci50eXBlKCkpOworCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IG1f
YW5pbWF0aW9uRWxlbWVudC5hdHRyaWJ1dGVOYW1lKCk7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6U2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBtX2FuaW1hdGlvbkVsZW1lbnQu
c2hvdWxkQXBwbHlBbmltYXRpb24oJm1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisK
KyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6RG9udEFwcGx5QW5p
bWF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gU1ZHQW5p
bWF0aW9uRWxlbWVudDo6QXBwbHlYTUxBbmltYXRpb24gfHwgc2hvdWxkQXBwbHkgPT0gU1ZHQW5p
bWF0aW9uRWxlbWVudDo6QXBwbHlYTUxhbmRDU1NBbmltYXRpb24pIHsKKyAgICAgICAgLy8gU1ZH
IERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCisgICAgICAgIG1fYW5pbWF0ZWRQcm9w
ZXJ0aWVzID0gYW5pbWF0b3IuZmluZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUo
bV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgaWYgKG1fYW5pbWF0ZWRQ
cm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQocHJvcGVydHlUeXBlc0FyZUNvbnNpc3RlbnQobV9hbmltYXRlZFByb3BlcnR5VHlwZSwgbV9h
bmltYXRlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKKyAgICAg
ICAgICAgIG1fYW5pbWF0ZWRUeXBlID0gYW5pbWF0b3Iuc3RhcnRBbmltVmFsQW5pbWF0aW9uKG1f
YW5pbWF0ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhbmltYXRv
ci5yZXNldEFuaW1WYWxUb0Jhc2VWYWwobV9hbmltYXRlZFByb3BlcnRpZXMsICptX2FuaW1hdGVk
VHlwZSk7CisgICAgICAgICAgICBhbmltYXRvci5hbmltVmFsRGlkQ2hhbmdlKG1fYW5pbWF0ZWRQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
Q1NTIHByb3BlcnRpZXMgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICBBU1NFUlQobV9hbmltYXRl
ZFByb3BlcnRpZXMuaXNFbXB0eSgpKTsKKyAgICBTdHJpbmcgYmFzZVZhbHVlOworCisgICAgaWYg
KHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFwcGx5Q1NTQW5pbWF0aW9uKSB7
CisgICAgICAgIEFTU0VSVChTVkdBbmltYXRpb25FbGVtZW50Ojppc1RhcmdldEF0dHJpYnV0ZUNT
U1Byb3BlcnR5KCZtX3RhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKTsKKyAgICAgICAgbV9h
bmltYXRpb25FbGVtZW50LmNvbXB1dGVDU1NQcm9wZXJ0eVZhbHVlKCZtX3RhcmdldEVsZW1lbnQs
IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSksIGJhc2VWYWx1ZSk7Cisg
ICAgfQorCisgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKKyAgICAgICAgbV9hbmltYXRlZFR5cGUg
PSBhbmltYXRvci5jb25zdHJ1Y3RGcm9tU3RyaW5nKGJhc2VWYWx1ZSk7CisgICAgZWxzZQorICAg
ICAgICBtX2FuaW1hdGVkVHlwZS0+c2V0VmFsdWVBc1N0cmluZyhhdHRyaWJ1dGVOYW1lLCBiYXNl
VmFsdWUpOworfQorCit2b2lkIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0
Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KQoreworICAgIEFTU0VSVChyZXN1
bHRFbGVtZW50KTsKKworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBt
X2FuaW1hdGlvbkVsZW1lbnQuYXR0cmlidXRlTmFtZSgpOworICAgIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OlNob3VsZEFwcGx5QW5pbWF0aW9uIHNob3VsZEFwcGx5ID0gbV9hbmltYXRpb25FbGVtZW50
LnNob3VsZEFwcGx5QW5pbWF0aW9uKCZtX3RhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwor
ICAgIAorICAgIGlmIChzaG91bGRBcHBseSA9PSBTVkdBbmltYXRpb25FbGVtZW50OjpEb250QXBw
bHlBbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJv
cGVydHlUeXBlID09IGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKG1fYW5pbWF0aW9uRWxl
bWVudCwgbV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKSk7CisKKyAgICBBU1NFUlQocGVy
Y2VudGFnZSA+PSAwICYmIHBlcmNlbnRhZ2UgPD0gMSk7CisgICAgQVNTRVJUKG1fYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0IHx8IG1fYW5pbWF0aW9uRWxlbWVu
dC5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlVHJhbnNmb3JtVGFnKSk7CisgICAgQVNTRVJU
KG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5pbWF0ZWRVbmtub3duKTsKKyAgICBBU1NFUlQo
bV9hbmltYXRvcik7CisgICAgQVNTRVJUKG1fYW5pbWF0b3ItPnR5cGUoKSA9PSBtX2FuaW1hdGVk
UHJvcGVydHlUeXBlKTsKKyAgICBBU1NFUlQobV9mcm9tVHlwZSk7CisgICAgQVNTRVJUKG1fZnJv
bVR5cGUtPnR5cGUoKSA9PSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlKTsKKyAgICBBU1NFUlQobV90
b1R5cGUpOworCisgICAgaWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFw
cGx5WE1MQW5pbWF0aW9uIHx8IHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFw
cGx5WE1MYW5kQ1NTQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIFNWRyBET00gYW5pbVZhbCBhbmlt
YXRpb24gY29kZS1wYXRoLgorICAgICAgICBpZiAobV9hbmltYXRvci0+ZmluZEFuaW1hdGVkUHJv
cGVydGllc0ZvckF0dHJpYnV0ZU5hbWUobV90YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKS5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1ZHQW5pbWF0ZUVs
ZW1lbnRCYXNlJiByZXN1bHRBbmltYXRpb25FbGVtZW50ID0gZG93bmNhc3Q8U1ZHQW5pbWF0ZUVs
ZW1lbnRCYXNlPigqcmVzdWx0RWxlbWVudCk7CisgICAgU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0
aW9uQ29udHJvbGxlciYgcmVzdWx0QW5pbWF0aW9uQ29udHJvbGxlciA9IHN0YXRpY19jYXN0PFNW
R0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXImPihyZXN1bHRBbmltYXRpb25FbGVt
ZW50LmF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgCisgICAgQVNTRVJUKHJl
c3VsdEFuaW1hdGlvbkNvbnRyb2xsZXIubV9hbmltYXRlZFR5cGUpOworICAgIEFTU0VSVChyZXN1
bHRBbmltYXRpb25Db250cm9sbGVyLm1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gbV9hbmltYXRl
ZFByb3BlcnR5VHlwZSk7CisKKyAgICBpZiAobV9hbmltYXRpb25FbGVtZW50Lmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnNldFRhZykpCisgICAgICAgIHBlcmNlbnRhZ2UgPSAxOworCisgICAgaWYgKG1f
YW5pbWF0aW9uRWxlbWVudC5jYWxjTW9kZSgpID09IENhbGNNb2RlOjpEaXNjcmV0ZSkKKyAgICAg
ICAgcGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UgPCAwLjUgPyAwIDogMTsKKworICAgIC8vIFRhcmdl
dCBlbGVtZW50IG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAgICBtX2FuaW1hdG9yLT5zZXRDb250ZXh0
RWxlbWVudCgmbV90YXJnZXRFbGVtZW50KTsKKworICAgIC8vIEJlIHN1cmUgdG8gZGV0YWNoIGxp
c3Qgd3JhcHBlcnMgYmVmb3JlIHdlIG1vZGZpeSB0aGVpciB1bmRlcmx5aW5nIHZhbHVlLiBJZiB3
ZSdkIGRvCisgICAgLy8gaWYgYWZ0ZXIgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIHJhbiB0aGUg
Y2FjaGVkIHBvaW50ZXJzIGluIHRoZSBsaXN0IHByb3BlcnkgdGVhcgorICAgIC8vIG9mZnMgd291
bGQgcG9pbnQgbm93aGVyZSwgYW5kIHdlIGNvdWxkbid0IGNyZWF0ZSBjb3BpZXMgb2YgdGhvc2Ug
dmFsdWVzIGFueW1vcmUsCisgICAgLy8gd2hpbGUgZGV0YWNoaW5nLiBUaGlzIGlzIGNvdmVyZWQg
YnkgYXNzZXJ0aW9ucywgbW92aW5nIHRoaXMgZG93biB3b3VsZCBmaXJlIHRoZW0uCisgICAgaWYg
KCFtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIG1fYW5pbWF0b3ItPmFu
aW1WYWxXaWxsQ2hhbmdlKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFZhbHVlcy1h
bmltYXRpb24gYWNjdW11bGF0ZXMgdXNpbmcgdGhlIGxhc3QgdmFsdWVzIGVudHJ5IGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGVuZCBvZiBkdXJhdGlvbiB0aW1lLgorICAgIFNWR0FuaW1hdGVkVHlwZSog
dG9BdEVuZE9mRHVyYXRpb25UeXBlID0gbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUgPyBtX3RvQXRF
bmRPZkR1cmF0aW9uVHlwZS5nZXQoKSA6IG1fdG9UeXBlLmdldCgpOworICAgIG1fYW5pbWF0b3It
PmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUocGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIG1fZnJvbVR5
cGUuZ2V0KCksIG1fdG9UeXBlLmdldCgpLCB0b0F0RW5kT2ZEdXJhdGlvblR5cGUsIHJlc3VsdEFu
aW1hdGlvbkNvbnRyb2xsZXIubV9hbmltYXRlZFR5cGUuZ2V0KCkpOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0KFNWR0VsZW1lbnQmIHRhcmdldEVsZW1l
bnQsIENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgQVNTRVJU
KCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7CisKKyAgICBpZiAoIXRhcmdldEVs
ZW1lbnQuZW5zdXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkuc2V0UHJvcGVydHkoaWQs
IHZhbHVlLCBmYWxzZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHRhcmdldEVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVDU1NQcm9wZXJ0
eUZyb21UYXJnZXQoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCkK
K3sKKyAgICBBU1NFUlQoIXRhcmdldEVsZW1lbnQubV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAgICB0
YXJnZXRFbGVtZW50LmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLnJlbW92ZVBy
b3BlcnR5KGlkKTsKKyAgICB0YXJnZXRFbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKFNW
R0VsZW1lbnQmIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZykKK3sKKyAgICAvLyBGSVhNRTogRG8gd2Ug
cmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBpc0Nvbm5lY3RlZCBhbmQgIXBhcmVudE5vZGU/Cisg
ICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5pc0Nv
bm5lY3RlZCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ1NTUHJvcGVydHlJRCBpZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZS5s
b2NhbE5hbWUoKSk7CisKKyAgICBTVkdFbGVtZW50OjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIgYmxv
Y2tlcih0YXJnZXRFbGVtZW50KTsKKyAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXQodGFyZ2V0
RWxlbWVudCwgaWQsIHZhbHVlQXNTdHJpbmcpOworCisgICAgLy8gSWYgdGhlIHRhcmdldCBlbGVt
ZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJpbmcgdGhl
IDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KKyAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFy
Z2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKKyAgICAgICAgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0
KCppbnN0YW5jZSwgaWQsIHZhbHVlQXNTdHJpbmcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg
cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRhcmdl
dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgLy8g
RklYTUU6IERvIHdlIHJlYWxseSBuZWVkIHRvIGNoZWNrIGJvdGggaXNDb25uZWN0ZWQgYW5kICFw
YXJlbnROb2RlPworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwgIXRhcmdl
dEVsZW1lbnQuaXNDb25uZWN0ZWQoKSB8fCAhdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIENTU1Byb3BlcnR5SUQgaWQgPSBjc3NQcm9wZXJ0eUlEKGF0
dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpOworCisgICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRh
dGVCbG9ja2VyIGJsb2NrZXIodGFyZ2V0RWxlbWVudCk7CisgICAgcmVtb3ZlQ1NTUHJvcGVydHlG
cm9tVGFyZ2V0KHRhcmdldEVsZW1lbnQsIGlkKTsKKworICAgIC8vIElmIHRoZSB0YXJnZXQgZWxl
bWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5nIHRo
ZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRh
cmdldEVsZW1lbnQuaW5zdGFuY2VzKCkpCisgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRh
cmdldCgqaW5zdGFuY2UsIGlkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdl
dEFib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQoreworICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC5t
X2RlbGV0aW9uSGFzQmVndW4pOworICAgIHRhcmdldEVsZW1lbnQuc3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyaWJ1dGVOYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdldEFu
ZEluc3RhbmNlc0Fib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQoreworICAgIGlmIChhdHRyaWJ1dGVO
YW1lID09IGFueVFOYW1lKCkgfHwgIXRhcmdldEVsZW1lbnQuaXNDb25uZWN0ZWQoKSB8fCAhdGFy
Z2V0RWxlbWVudC5wYXJlbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR0VsZW1l
bnQ6Okluc3RhbmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKHRhcmdldEVsZW1lbnQpOworICAgIG5v
dGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1l
KTsKKworICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUg
dGhlbSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQu
CisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRhcmdldEVsZW1lbnQuaW5zdGFuY2VzKCkpCisg
ICAgICAgIG5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSgqaW5zdGFuY2UsIGF0dHJpYnV0
ZU5hbWUpOworfQorCit2b2lkIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6
OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQobV9hbmltYXRlZFByb3BlcnR5
VHlwZSAhPSBBbmltYXRlZFRyYW5zZm9ybUxpc3QgfHwgbV9hbmltYXRpb25FbGVtZW50Lmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKTsKKyAgICBBU1NFUlQobV9hbmlt
YXRlZFByb3BlcnR5VHlwZSAhPSBBbmltYXRlZFVua25vd24pOworICAgIEFTU0VSVChtX2FuaW1h
dG9yKTsKKworICAgIC8vIEVhcmx5IGV4aXQgaWYgb3VyIGFuaW1hdGVkIHR5cGUgZ290IGRlc3Ry
b3llZCBieSBhIHByZXZpb3VzIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKS4KKyAgICBpZiAoIW1fYW5p
bWF0ZWRUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lID0gbV9hbmltYXRpb25FbGVtZW50LmF0dHJpYnV0ZU5hbWUoKTsKKworICAg
IGlmIChtX2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQ1NTIHBy
b3BlcnRpZXMgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICAgICAgLy8gQ29udmVydCB0aGUgcmVz
dWx0IG9mIHRoZSBhbmltYXRpb24gdG8gYSBTdHJpbmcgYW5kIGFwcGx5IGl0IGFzIENTUyBwcm9w
ZXJ0eSBvbiB0aGUgdGFyZ2V0ICYgYWxsIGluc3RhbmNlcy4KKyAgICAgICAgYXBwbHlDU1NQcm9w
ZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKG1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwg
bV9hbmltYXRlZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBXZSBkbyB1cGRhdGUgdGhlIHN0eWxlIGFuZCB0aGUgYW5pbWF0aW9uIHByb3Bl
cnR5IGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuCisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
U2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkgPSBtX2FuaW1hdGlvbkVsZW1lbnQuc2hv
dWxkQXBwbHlBbmltYXRpb24oJm1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisgICAg
aWYgKHNob3VsZEFwcGx5ID09IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OkFwcGx5WE1MYW5kQ1NTQW5p
bWF0aW9uKQorICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMobV90
YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0cmlu
ZygpKTsKKworICAgIC8vIFNWRyBET00gYW5pbVZhbCBhbmltYXRpb24gY29kZS1wYXRoLgorICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIFNWRyBET00gdmFsdWVzIGFyZSBhbHJlYWR5IGNoYW5nZWQs
IHVubGlrZSBmb3IgQ1NTLgorICAgIC8vIFdlIG9ubHkgaGF2ZSB0byB0cmlnZ2VyIHVwZGF0ZSBu
b3RpZmljYXRpb25zIGhlcmUuCisgICAgbV9hbmltYXRvci0+YW5pbVZhbERpZENoYW5nZShtX2Fu
aW1hdGVkUHJvcGVydGllcyk7CisgICAgbm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmlt
VmFsQ2hhbmdlKG1fdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7Cit9CisKK3ZvaWQgU1ZH
TGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2xlYXJBbmltYXRlZFR5cGUoU1ZH
RWxlbWVudCogdGFyZ2V0RWxlbWVudCkKK3sKKyAgICBpZiAoIW1fYW5pbWF0ZWRUeXBlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgU1ZHQW5pbWF0ZWRUeXBlIGlzIGEgbGlzdCB0
eXBlLCBlLmcuIFNWR0xlbmd0aExpc3RWYWx1ZXMsIHRoZSB3cmFwcGVycyBvZiB0aGUKKyAgICAv
LyBhbmltYXRlZCBwcm9wZXJ0aWVzIGhhdmUgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgaXRlbXMg
aW4gdGhlIGxpc3QgYmVmb3JlIGl0J3MgZGVsZXRlZC4KKyAgICBpZiAoIW1fYW5pbWF0ZWRQcm9w
ZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hbmltYXRvci0+YW5pbVZhbFdpbGxDaGFuZ2Uo
bV9hbmltYXRlZFByb3BlcnRpZXMpOworCisgICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7CisgICAg
ICAgIG1fYW5pbWF0ZWRUeXBlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBtX2FuaW1hdGlvbkVsZW1l
bnQuYXR0cmlidXRlTmFtZSgpOworCisgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1w
dHkoKSkgeworICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRoLgor
ICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMoKnRhcmdldEVs
ZW1lbnQsIG1fYW5pbWF0aW9uRWxlbWVudC5hdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICBtX2Fu
aW1hdGVkVHlwZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTVkdB
bmltYXRpb25FbGVtZW50OjpTaG91bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IG1fYW5p
bWF0aW9uRWxlbWVudC5zaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LCBhdHRyaWJ1
dGVOYW1lKTsKKyAgICBpZiAoc2hvdWxkQXBwbHkgPT0gU1ZHQW5pbWF0aW9uRWxlbWVudDo6QXBw
bHlYTUxhbmRDU1NBbmltYXRpb24pCisgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdl
dEFuZEluc3RhbmNlcygqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisKKyAgICAvLyBT
VkcgRE9NIGFuaW1WYWwgYW5pbWF0aW9uIGNvZGUtcGF0aC4KKyAgICBpZiAobV9hbmltYXRvcikg
eworICAgICAgICBtX2FuaW1hdG9yLT5zdG9wQW5pbVZhbEFuaW1hdGlvbihtX2FuaW1hdGVkUHJv
cGVydGllcyk7CisgICAgICAgIG5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5pbVZhbENo
YW5nZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisgICAgfQorCisgICAgbV9hbmlt
YXRlZFByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBtX2FuaW1hdGVkVHlwZSA9IG51bGxwdHI7Cit9
CisKK2Zsb2F0IFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbGN1bGF0
ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmlu
ZykKK3sKKyAgICByZXR1cm4gYW5pbWF0ZWRUeXBlQW5pbWF0b3IoKS5jYWxjdWxhdGVEaXN0YW5j
ZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVnYWN5QXR0cmlidXRlQW5pbWF0aW9uQ29udHJvbGxl
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZWdhY3lBdHRyaWJ1
dGVBbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUeXBlLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRUeXBlQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTVkdBdHRyaWJ1dGVBbmltYXRpb25Db250
cm9sbGVyQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0FuaW1hdGlv
bkVsZW1lbnQ7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZHU01JTEVsZW1lbnQ7CisKK2Ns
YXNzIFNWR0xlZ2FjeUF0dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgU1ZHQXR0
cmlidXRlQW5pbWF0aW9uQ29udHJvbGxlckJhc2UgeworcHVibGljOgorICAgIFNWR0xlZ2FjeUF0
dHJpYnV0ZUFuaW1hdGlvbkNvbnRyb2xsZXIoU1ZHQW5pbWF0aW9uRWxlbWVudCYsIFNWR0VsZW1l
bnQmKTsKKworcHJpdmF0ZToKKyAgICBTVkdBbmltYXRlZFR5cGVBbmltYXRvciYgYW5pbWF0ZWRU
eXBlQW5pbWF0b3IoKTsKKworICAgIHZvaWQgcmVzZXRBbmltYXRlZFR5cGUoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIG92
ZXJyaWRlOworICAgIAorICAgIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0
cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgb3ZlcnJpZGU7CisgICAg
Ym9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGJ5U3RyaW5nKSBvdmVycmlkZTsKKyAgICBib29sIGNhbGN1bGF0ZVRvQXRF
bmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZykg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2Vu
dGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50
KSBvdmVycmlkZTsKKworICAgIHZvaWQgYXBwbHlSZXN1bHRzVG9UYXJnZXQoKSBvdmVycmlkZTsK
KyAgICBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNv
bnN0IFN0cmluZyYgdG9TdHJpbmcpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgaXNBZGRpdGl2
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBjb25zdCBBbmltYXRlZFByb3BlcnR5VHlwZSBtX2FuaW1hdGVk
UHJvcGVydHlUeXBlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0FuaW1hdGVkVHlwZT4gbV9m
cm9tVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvVHlwZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX3RvQXRFbmRPZkR1cmF0aW9u
VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiBtX2FuaW1hdGVkVHlw
ZTsKKworICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCBtX2FuaW1hdGVkUHJvcGVy
dGllczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I+IG1fYW5p
bWF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjQyOTc4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1v
dmVkRnJvbUFuY2VzdG9yCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihyZW1v
dmFsVHlwZSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKLWJvb2wgU1ZHU01JTEVsZW1l
bnQ6Omhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpCitib29sIFNWR1NNSUxFbGVtZW50OjpoYXNWYWxp
ZEF0dHJpYnV0ZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lKCkgIT0g
YW55UU5hbWUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDI0Mjk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBA
QCBwdWJsaWM6CiAgICAgSW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgaW5zZXJ0ZWRJbnRvQW5j
ZXN0b3IoSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRl
OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpOworICAgIHZpcnR1YWwgYm9v
bCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25B
dHRyaWJ1dGVDaGFuZ2VkKCkgPSAwOwogCiAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250
YWluZXIoKSB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJpbWl0aXZlUHJvcGVydHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByaW1p
dGl2ZVByb3BlcnR5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5Lmgi
CisjaW5jbHVkZSAiU1ZHUHJvcGVydHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQcm9wZXJ0eVR5cGU+CitjbGFzcyBTVkdBbmltYXRlZFByaW1pdGl2ZVBy
b3BlcnR5IDogcHVibGljIFNWR0FuaW1hdGVkUHJvcGVydHkgeworcHVibGljOgorICAgIHVzaW5n
IFZhbHVlVHlwZSA9IFByb3BlcnR5VHlwZTsKKworICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQ
cmltaXRpdmVQcm9wZXJ0eT4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9w
ZXJ0eShjb250ZXh0RWxlbWVudCkpOworICAgIH0KKworICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0
ZWRQcmltaXRpdmVQcm9wZXJ0eT4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBj
b25zdCBQcm9wZXJ0eVR5cGUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHQW5pbWF0ZWRQcmltaXRpdmVQcm9wZXJ0eShjb250ZXh0RWxlbWVudCwgdmFsdWUp
KTsKKyAgICB9CisKKyAgICAvLyBVc2VkIGJ5IHRoZSBET00uCisgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0QmFzZVZhbChjb25zdCBQcm9wZXJ0eVR5cGUmIGJhc2VWYWwpCisgICAgeworICAgICAg
ICBtX2Jhc2VWYWwgPSBiYXNlVmFsOworICAgICAgICBjb21taXRQcm9wZXJ0eUNoYW5nZSgpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIC8vIFVzZWQgYnkgU1ZHRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUoKS4KKyAgICB2b2lkIHNldEJhc2VWYWxJbnRlcm5hbChjb25zdCBQcm9w
ZXJ0eVR5cGUmIGJhc2VWYWwpIHsgbV9iYXNlVmFsID0gYmFzZVZhbDsgfQorICAgIGNvbnN0IFBy
b3BlcnR5VHlwZSYgYmFzZVZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVZhbDsgfQorCisgICAg
Ly8gVXNlZCBieSBTVkdBdHRyaWJ1dGVBbmltYXRvcjo6cHJvZ3Jlc3MuCisgICAgdm9pZCBzZXRB
bmltVmFsKGNvbnN0IFByb3BlcnR5VHlwZSYgYW5pbVZhbCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0FuaW1hdGluZygpKTsKKyAgICAgICAgbV9hbmltVmFsID0gYW5pbVZhbDsKKyAgICB9CisK
KyAgICBjb25zdCBQcm9wZXJ0eVR5cGUmIGFuaW1WYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUX0lNUExJRVMoaXNBbmltYXRpbmcoKSwgbV9hbmltVmFsKTsKKyAgICAgICAgcmV0dXJu
IGlzQW5pbWF0aW5nKCkgPyAqbV9hbmltVmFsIDogbV9iYXNlVmFsOworICAgIH0KKworICAgIFBy
b3BlcnR5VHlwZSYgYW5pbVZhbCgpCisgICAgeworICAgICAgICBBU1NFUlRfSU1QTElFUyhpc0Fu
aW1hdGluZygpLCBtX2FuaW1WYWwpOworICAgICAgICByZXR1cm4gaXNBbmltYXRpbmcoKSA/ICpt
X2FuaW1WYWwgOiBtX2Jhc2VWYWw7CisgICAgfQorCisgICAgLy8gVXNlZCB3aGVuIGNvbW1pdHRp
bmcgYSBjaGFuZ2UgZnJvbSB0aGUgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSB0byB0aGUgYXR0cmlidXRl
LgorICAgIFN0cmluZyBiYXNlVmFsQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBT
VkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+Ojp0b1N0cmluZyhtX2Jhc2VWYWwpOyB9CisK
KyAgICAvLyBVc2VkIHRvIGFwcGx5IHRoZSBTVkdBdHRyaWJ1dGVBbmltYXRvciBjaGFuZ2UgdG8g
dGhlIHRhcmdldCBlbGVtZW50LgorICAgIFN0cmluZyBhbmltVmFsQXNTdHJpbmcoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQW5pbWF0aW5nKCkgJiYgISFtX2FuaW1W
YWwpOworICAgICAgICByZXR1cm4gU1ZHUHJvcGVydHlUcmFpdHM8UHJvcGVydHlUeXBlPjo6dG9T
dHJpbmcoKm1fYW5pbVZhbCk7CisgICAgfQorCisgICAgLy8gTWFuYWdpbmcgdGhlIHJlbGF0aW9u
c2hpcCB3aXRoIHRoZSBvd25lci4KKyAgICB2b2lkIHNldERpcnR5KCkgb3ZlcnJpZGUgeyBtX3N0
YXRlID0gU1ZHUHJvcGVydHlTdGF0ZTo6RGlydHk7IH0KKyAgICBib29sIGlzRGlydHkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFNWR1Byb3BlcnR5U3RhdGU6OkRpcnR5OyB9
CisgICAgT3B0aW9uYWw8U3RyaW5nPiBzeW5jaHJvbml6ZSgpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAobV9zdGF0ZSA9PSBTVkdQcm9wZXJ0eVN0YXRlOjpDbGVhbikKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIG1fc3RhdGUgPSBTVkdQcm9wZXJ0eVN0YXRl
OjpDbGVhbjsKKyAgICAgICAgcmV0dXJuIGJhc2VWYWxBc1N0cmluZygpOworICAgIH0KKworICAg
IC8vIFVzZWQgYnkgUmVuZGVyU1ZHRWxlbWVudHMgYW5kIER1bXBSZW5kZXJUcmVlLgorICAgIGNv
bnN0IFByb3BlcnR5VHlwZSYgY3VycmVudFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVF9JTVBMSUVTKGlzQW5pbWF0aW5nKCksIG1fYW5pbVZhbCk7CisgICAgICAgIHJldHVybiBp
c0FuaW1hdGluZygpID8gKm1fYW5pbVZhbCA6IG1fYmFzZVZhbDsKKyAgICB9CisKKyAgICAvLyBD
b250cm9sbGluZyB0aGUgYW5pbWF0aW9uLgorICAgIHZvaWQgc3RhcnRBbmltYXRpb24oKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGlzQW5pbWF0aW5nKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fYW5pbVZhbCA9IG1fYmFzZVZhbDsKKyAgICAgICAgU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eTo6c3RhcnRBbmltYXRpb24oKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3BBbmltYXRp
b24oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFpc0FuaW1hdGluZygpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX2FuaW1WYWwgPSBXVEY6Om51bGxvcHQ7CisgICAgICAg
IFNWR0FuaW1hdGVkUHJvcGVydHk6OnN0b3BBbmltYXRpb24oKTsKKyAgICB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5KFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KQorICAgICAgICA6IFNWR0FuaW1hdGVkUHJvcGVydHkoY29udGV4dEVsZW1lbnQpCisg
ICAgICAgICwgbV9iYXNlVmFsKFNWR1Byb3BlcnR5VHJhaXRzPFByb3BlcnR5VHlwZT46OmluaXRp
YWxWYWx1ZSgpKQorICAgIHsKKyAgICB9CisKKyAgICBTVkdBbmltYXRlZFByaW1pdGl2ZVByb3Bl
cnR5KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBQcm9wZXJ0eVR5cGUmIHZhbHVl
KQorICAgICAgICA6IFNWR0FuaW1hdGVkUHJvcGVydHkoY29udGV4dEVsZW1lbnQpCisgICAgICAg
ICwgbV9iYXNlVmFsKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGUgbV9i
YXNlVmFsOworICAgIG11dGFibGUgT3B0aW9uYWw8UHJvcGVydHlUeXBlPiBtX2FuaW1WYWw7Cisg
ICAgU1ZHUHJvcGVydHlTdGF0ZSBtX3N0YXRlIHsgU1ZHUHJvcGVydHlTdGF0ZTo6Q2xlYW4gfTsK
K307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVk
UHJvcGVydHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eS5oIgorCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1NWR1Byb3BlcnR5T3duZXIqIFNWR0FuaW1hdGVkUHJvcGVydHk6Om93bmVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0RWxlbWVudDsKK30KKwordm9pZCBTVkdBbmltYXRlZFBy
b3BlcnR5Ojpjb21taXRQcm9wZXJ0eUNoYW5nZSgpCit7CisgICAgaWYgKCFtX2NvbnRleHRFbGVt
ZW50KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0RWxlbWVudC0+Y29tbWl0UHJvcGVy
dHlDaGFuZ2UoKnRoaXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdQcm9wZXJ0
eU93bmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eSA6IHB1YmxpYyBSZWZDb3VudGVkPFNWR0FuaW1hdGVkUHJvcGVydHk+LCBwdWJsaWMgU1ZH
UHJvcGVydHlPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZWRQcm9wZXJ0
eSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICAvLyBNYW5hZ2UgdGhlIHJlbGF0aW9uc2hpcCB3aXRo
IHRoZSBvd25lci4KKyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHRFbGVtZW50OyB9CisgICAgdm9pZCBkZXRhY2goKSB7IG1fY29udGV4dEVsZW1lbnQgPSBudWxs
cHRyOyB9CisgICAgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHRFbGVtZW50OyB9CisgICAgCisgICAgdmlydHVhbCBTdHJpbmcgYmFzZVZhbEFzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5n
IGFuaW1WYWxBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KKyAgICAK
KyAgICAvLyBDb250cm9sIHRoZSBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgYXR0cmlidXRl
IGFuZCBpdHMgcmVmbGVjdGlvbiBpbiBiYXNlVmFsLgorICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlydHkoKSB7
IH0KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFN0cmluZz4gc3luY2hyb25pemUoKSB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICAKKyAgICAvLyBDb250cm9sIHRoZSBhbmltYXRpb24gbGlmZSBj
eWNsZS4KKyAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0FuaW1hdGlu
ZzsgfQorICAgIHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlvbigpIHsgbV9pc0FuaW1hdGluZyA9
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbigpIHsgbV9pc0FuaW1hdGlu
ZyA9IGZhbHNlOyB9CisgICAgCisgICAgLy8gQXR0YWNoL0RldGFjaCB0aGUgYW5pbVZhbCBvZiB0
aGUgdHJhZ2V0IGVsZW1lbnQncyBwcm9wZXJ0eSBieSB0aGUgaW5zdGFuY2UgZWxlbWVudCdzIHBy
b3BlcnR5LgorICAgIHZpcnR1YWwgdm9pZCBpbnN0YW5jZVN0YXJ0QW5pbWF0aW9uKFNWR0FuaW1h
dGVkUHJvcGVydHkmKSB7IG1faXNBbmltYXRpbmcgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IGluc3RhbmNlU3RvcEFuaW1hdGlvbigpIHsgbV9pc0FuaW1hdGluZyA9IGZhbHNlOyB9CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eShTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCkKKyAgICAgICAgOiBtX2NvbnRleHRFbGVtZW50KGNvbnRleHRFbGVtZW50KQorICAg
IHsKKyAgICB9CisgICAgCisgICAgU1ZHUHJvcGVydHlPd25lciogb3duZXIoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGNvbW1pdFByb3BlcnR5Q2hhbmdlKCkgb3ZlcnJpZGU7CisgICAgCisg
ICAgU1ZHRWxlbWVudCogbV9jb250ZXh0RWxlbWVudCB7IG51bGxwdHIgfTsKKyAgICBib29sIG1f
aXNBbmltYXRpbmcgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNj
ZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdQb2ludGVyTWVt
YmVyQWNjZXNzb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPd25lclR5cGUsIHR5cGVuYW1lIEFuaW1hdGVkUHJvcGVydHlUeXBlPgorY2xhc3MgU1ZHQW5p
bWF0ZWRQcm9wZXJ0eUFjY2Vzc29yIDogcHVibGljIFNWR1BvaW50ZXJNZW1iZXJBY2Nlc3NvcjxP
d25lclR5cGUsIEFuaW1hdGVkUHJvcGVydHlUeXBlPiB7CisgICAgdXNpbmcgQmFzZSA9IFNWR1Bv
aW50ZXJNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGUsIEFuaW1hdGVkUHJvcGVydHlUeXBlPjsKKwor
cHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisgICAgdXNpbmcgQmFzZTo6c2luZ2xldG9u
OworICAgIHVzaW5nIEJhc2U6OnByb3BlcnR5OworICAgIHVzaW5nIEFuaW1hdGVkUHJvcGVydHkg
PSBBbmltYXRlZFByb3BlcnR5VHlwZTsKKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBPd25lclR5
cGUmIG93bmVyLCBjb25zdCBTVkdBbmltYXRlZFByb3BlcnR5JiBhbmltYXRlZFByb3BlcnR5KSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5KG93bmVyKS5wdHIo
KSA9PSAmYW5pbWF0ZWRQcm9wZXJ0eTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0Fu
aW1hdGVkUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cit9OworCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
QWNjZXNzb3JJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29ySW1wbC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3Nvcklt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZFByb3BlcnR5QWNjZXNzb3IuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFBy
b3BlcnR5QW5pbWF0b3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwu
aCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIE93bmVyVHlwZT4KK2NsYXNzIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vzc29y
IGZpbmFsIDogcHVibGljIFNWR0FuaW1hdGVkUHJvcGVydHlBY2Nlc3NvcjxPd25lclR5cGUsIFNW
R0FuaW1hdGVkSW50ZWdlcj4geworICAgIHVzaW5nIEJhc2UgPSBTVkdBbmltYXRlZFByb3BlcnR5
QWNjZXNzb3I8T3duZXJUeXBlLCBTVkdBbmltYXRlZEludGVnZXI+OworCitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZTo6QmFzZTsKKyAgICB1c2luZyBCYXNlOjpwcm9wZXJ0eTsKKyAgICB0ZW1wbGF0
ZTxSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBPd25lclR5cGU6Oipwcm9wZXJ0eT4KKyAgICBjb25z
dGV4cHIgc3RhdGljIGNvbnN0IFNWR01lbWJlckFjY2Vzc29yPE93bmVyVHlwZT4mIHNpbmdsZXRv
bigpIHsgcmV0dXJuIEJhc2U6OnRlbXBsYXRlIHNpbmdsZXRvbjxTVkdBbmltYXRlZEludGVnZXJB
Y2Nlc3NvciwgcHJvcGVydHk+KCk7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHQXR0cmlidXRlQW5pbWF0b3I+IGNyZWF0ZUFuaW1hdG9yKE93bmVyVHlwZSYgb3duZXIsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9u
TW9kZSwgQ2FsY01vZGUgY2FsY01vZGUsIGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0
aXZlKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNWR0FuaW1hdGVkSW50ZWdl
ckFuaW1hdG9yOjpjcmVhdGUoYXR0cmlidXRlTmFtZSwgcHJvcGVydHkob3duZXIpLCBhbmltYXRp
b25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSk7CisgICAgfQorCisg
ICAgdm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKE93bmVyVHlwZSYgb3duZXIsIFNWR0F0dHJp
YnV0ZUFuaW1hdG9yJiBhbmltYXRvcikgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHN0YXRp
Y19jYXN0PFNWR0FuaW1hdGVkSW50ZWdlckFuaW1hdG9yJj4oYW5pbWF0b3IpLmFwcGVuZEFuaW1h
dGVkSW5zdGFuY2UocHJvcGVydHkob3duZXIpKTsKKyAgICB9Cit9OworCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
b3BlcnR5QW5pbWF0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdFbGVtZW50OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBbmltYXRlZFByb3BlcnR5LCB0eXBlbmFtZSBBbmltYXRpb25GdW5jdGlvbj4K
K2NsYXNzIFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvciA6IHB1YmxpYyBTVkdBdHRyaWJ1dGVB
bmltYXRvciB7CitwdWJsaWM6CisgICAgdXNpbmcgQW5pbWF0b3JBbmltYXRlZFByb3BlcnR5ID0g
QW5pbWF0ZWRQcm9wZXJ0eTsKKworICAgIHZvaWQgYXBwZW5kQW5pbWF0ZWRJbnN0YW5jZShSZWY8
QW5pbWF0ZWRQcm9wZXJ0eT4mIGFuaW1hdGVkKQorICAgIHsKKyAgICAgICAgbV9hbmltYXRlZElu
c3RhbmNlcy5hcHBlbmQoYW5pbWF0ZWQuY29weVJlZigpKTsKKyAgICB9CisKKyAgICBib29sIGlz
RGlzY3JldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Z1bmN0aW9uLmlzRGlzY3JldGUo
KTsgfQorCisgICAgdm9pZCBzZXRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgbV9mdW5jdGlvbi5zZXRGcm9tQW5kVG9WYWx1ZXModGFyZ2V0RWxlbWVudCwg
ZnJvbSwgdG8pOworICAgIH0KKworICAgIHZvaWQgc2V0RnJvbUFuZEJ5VmFsdWVzKFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiBieSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24uc2V0RnJvbUFuZEJ5VmFsdWVzKHRh
cmdldEVsZW1lbnQsIGZyb20sIGJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRvQXRFbmRPZkR1
cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fZnVuY3Rpb24uc2V0VG9BdEVuZE9mRHVyYXRpb25WYWx1ZSh0b0F0RW5k
T2ZEdXJhdGlvbik7CisgICAgfQorCisgICAgdm9pZCBzdGFydChTVkdFbGVtZW50Kikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIG1fYW5pbWF0ZWQtPnN0YXJ0QW5pbWF0aW9uKCk7CisgICAgICAg
IGZvciAoYXV0byYgaW5zdGFuY2UgOiBtX2FuaW1hdGVkSW5zdGFuY2VzKQorICAgICAgICAgICAg
aW5zdGFuY2UtPmluc3RhbmNlU3RhcnRBbmltYXRpb24obV9hbmltYXRlZCk7CisgICAgfQorCisg
ICAgdm9pZCBhcHBseShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgYXBwbHlBbmltYXRlZFByb3BlcnR5Q2hhbmdlKHRhcmdldEVsZW1lbnQpOworICAg
IH0KKworICAgIHZvaWQgc3RvcChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGVkLT5pc0FuaW1hdGluZygpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG1fYW5pbWF0ZWQtPnN0b3BBbmltYXRpb24oKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBpbnN0YW5jZSA6IG1fYW5pbWF0ZWRJbnN0YW5jZXMpCisgICAgICAgICAg
ICBpbnN0YW5jZS0+aW5zdGFuY2VTdG9wQW5pbWF0aW9uKCk7CisKKyAgICAgICAgYXBwbHlBbmlt
YXRlZFByb3BlcnR5Q2hhbmdlKHRhcmdldEVsZW1lbnQpOworICAgIH0KKworICAgIGZsb2F0IGNh
bGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
ZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2Z1bmN0aW9uLmNhbGN1bGF0ZURpc3RhbmNlKHRhcmdldEVsZW1lbnQsIGZyb20sIHRv
KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIFJlZjxBbmltYXRlZFByb3BlcnR5PiYgYW5pbWF0ZWQsIEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBTVkdBdHRyaWJ1dGVBbmltYXRvcihhdHRyaWJ1
dGVOYW1lKQorICAgICAgICAsIG1fYW5pbWF0ZWQoYW5pbWF0ZWQuY29weVJlZigpKQorICAgICAg
ICAsIG1fZnVuY3Rpb24oc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKKyAg
ICB7CisgICAgfQorCisgICAgUmVmPEFuaW1hdGVkUHJvcGVydHk+IG1fYW5pbWF0ZWQ7CisgICAg
VmVjdG9yPFJlZjxBbmltYXRlZFByb3BlcnR5Pj4gbV9hbmltYXRlZEluc3RhbmNlczsKKyAgICBB
bmltYXRpb25GdW5jdGlvbiBtX2Z1bmN0aW9uOworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHlBbmltYXRvckltcGwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3JJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaCIKKyNpbmNs
dWRlICJTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFuaW1hdG9yOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBbmltYXRlZFByb3BlcnR5QW5pbWF0b3IxLCB0eXBlbmFtZSBBbmlt
YXRlZFByb3BlcnR5QW5pbWF0b3IyPgorY2xhc3MgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmlt
YXRvcjsKKworY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3IgZmluYWwgOiBwdWJsaWMg
U1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yPFNWR0FuaW1hdGVkSW50ZWdlciwgU1ZHQW5pbWF0
aW9uSW50ZWdlckZ1bmN0aW9uPiB7CisgICAgZnJpZW5kIGNsYXNzIFNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQW5pbWF0b3I8U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3IsIFNWR0FuaW1hdGVkSW50
ZWdlckFuaW1hdG9yPjsKKyAgICBmcmllbmQgY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFu
aW1hdG9yOworICAgIHVzaW5nIEJhc2UgPSBTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3I8U1ZH
QW5pbWF0ZWRJbnRlZ2VyLCBTVkdBbmltYXRpb25JbnRlZ2VyRnVuY3Rpb24+OworICAgIHVzaW5n
IEJhc2U6OkJhc2U7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYXV0byBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4mIGFuaW1h
dGVkLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNNb2RlIGNhbGNNb2RlLCBib29s
IGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I+KG5ldyBTVkdBbmltYXRl
ZEludGVnZXJBbmltYXRvcihhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZCwgYW5pbWF0aW9uTW9kZSwg
Y2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBwcm9ncmVzcyhTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fZnVu
Y3Rpb24ucHJvZ3Jlc3ModGFyZ2V0RWxlbWVudCwgcGVyY2VudGFnZSwgcmVwZWF0Q291bnQsIG1f
YW5pbWF0ZWQtPmFuaW1WYWwoKSk7CisgICAgfQorfTsKKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eUltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5SW1wbC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHlJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVk
Qm9vbGVhbi5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRO
dW1iZXJMaXN0LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQb2ludExpc3QuaCIKKyNpbmNsdWRl
ICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdBbmltYXRl
ZFByaW1pdGl2ZVByb3BlcnR5LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCisjaW5j
bHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBTVkdBbmltYXRlZEludGVn
ZXIgPSBTVkdBbmltYXRlZFByaW1pdGl2ZVByb3BlcnR5PGludD47CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5UGFpckFjY2Vzc29yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR01lbWJlckFj
Y2Vzc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT3du
ZXJUeXBlLCB0eXBlbmFtZSBBY2Nlc3NvclR5cGUxLCB0eXBlbmFtZSBBY2Nlc3NvclR5cGUyPgor
Y2xhc3MgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvciA6IHB1YmxpYyBTVkdNZW1iZXJB
Y2Nlc3NvcjxPd25lclR5cGU+IHsKKyAgICB1c2luZyBBbmltYXRlZFByb3BlcnR5VHlwZTEgPSB0
eXBlbmFtZSBBY2Nlc3NvclR5cGUxOjpBbmltYXRlZFByb3BlcnR5OworICAgIHVzaW5nIEFuaW1h
dGVkUHJvcGVydHlUeXBlMiA9IHR5cGVuYW1lIEFjY2Vzc29yVHlwZTI6OkFuaW1hdGVkUHJvcGVy
dHk7CisgICAgdXNpbmcgQmFzZSA9IFNWR01lbWJlckFjY2Vzc29yPE93bmVyVHlwZT47CisKK3B1
YmxpYzoKKyAgICBTVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29yKFJlZjxBbmltYXRlZFBy
b3BlcnR5VHlwZTE+IE93bmVyVHlwZTo6KnByb3BlcnR5MSwgUmVmPEFuaW1hdGVkUHJvcGVydHlU
eXBlMj4gT3duZXJUeXBlOjoqcHJvcGVydHkyKQorICAgICAgICA6IG1fYWNjZXNzb3IxKHByb3Bl
cnR5MSkKKyAgICAgICAgLCBtX2FjY2Vzc29yMihwcm9wZXJ0eTIpCisgICAgeworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFjY2Vzc29yVHlwZSwgUmVmPEFuaW1h
dGVkUHJvcGVydHlUeXBlMT4gT3duZXJUeXBlOjoqcHJvcGVydHkxLCBSZWY8QW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUyPiBPd25lclR5cGU6Oipwcm9wZXJ0eTI+CisgICAgc3RhdGljIFNWR01lbWJlckFj
Y2Vzc29yPE93bmVyVHlwZT4mIHNpbmdsZXRvbigpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QWNjZXNzb3JUeXBlPiBwcm9wZXJ0eUFjY2Vzc29yIHsgcHJvcGVydHkxLCBw
cm9wZXJ0eTIgfTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzb3I7CisgICAgfQorCisg
ICAgYm9vbCBpc0FuaW1hdGVkUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICBSZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUxPiYgcHJvcGVydHkxKE93bmVyVHlw
ZSYgb3duZXIpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzb3IxLnByb3BlcnR5KG93bmVyKTsgfQor
ICAgIGNvbnN0IFJlZjxBbmltYXRlZFByb3BlcnR5VHlwZTE+JiBwcm9wZXJ0eTEoY29uc3QgT3du
ZXJUeXBlJiBvd25lcikgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NvcjEucHJvcGVydHkob3duZXIp
OyB9CisKKyAgICBSZWY8QW5pbWF0ZWRQcm9wZXJ0eVR5cGUyPiYgcHJvcGVydHkyKE93bmVyVHlw
ZSYgb3duZXIpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzb3IyLnByb3BlcnR5KG93bmVyKTsgfQor
ICAgIGNvbnN0IFJlZjxBbmltYXRlZFByb3BlcnR5VHlwZTI+JiBwcm9wZXJ0eTIoY29uc3QgT3du
ZXJUeXBlJiBvd25lcikgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NvcjIucHJvcGVydHkob3duZXIp
OyB9CisKKyAgICBib29sIG1hdGNoZXMoY29uc3QgT3duZXJUeXBlJiBvd25lciwgY29uc3QgU1ZH
QW5pbWF0ZWRQcm9wZXJ0eSYgYW5pbWF0ZWRQcm9wZXJ0eSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2FjY2Vzc29yMS5tYXRjaGVzKG93bmVyLCBhbmltYXRlZFByb3Bl
cnR5KSB8fCBtX2FjY2Vzc29yMi5tYXRjaGVzKG93bmVyLCBhbmltYXRlZFByb3BlcnR5KTsKKyAg
ICB9CisKKyAgICBBY2Nlc3NvclR5cGUxIG1fYWNjZXNzb3IxOworICAgIEFjY2Vzc29yVHlwZTIg
bV9hY2Nlc3NvcjI7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFjY2Vzc29ySW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNz
b3JJbXBsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5QWNj
ZXNzb3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5o
IgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlJbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3Nvci5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVy
dHlQYWlyQW5pbWF0b3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGU+CitjbGFzcyBTVkdBbmlt
YXRlZEludGVnZXJQYWlyQWNjZXNzb3IgZmluYWwgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRQcm9wZXJ0
eVBhaXJBY2Nlc3NvcjxPd25lclR5cGUsIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVy
VHlwZT4sIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVyVHlwZT4+IHsKKyAgICB1c2lu
ZyBCYXNlID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBY2Nlc3NvcjxPd25lclR5cGUsIFNWR0Fu
aW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVyVHlwZT4sIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vz
c29yPE93bmVyVHlwZT4+OworICAgIHVzaW5nIEJhc2U6OnByb3BlcnR5MTsKKyAgICB1c2luZyBC
YXNlOjpwcm9wZXJ0eTI7CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworICAgIHRl
bXBsYXRlPFJlZjxTVkdBbmltYXRlZEludGVnZXI+IE93bmVyVHlwZTo6KnByb3BlcnR5MSwgUmVm
PFNWR0FuaW1hdGVkSW50ZWdlcj4gT3duZXJUeXBlOjoqcHJvcGVydHkyPgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgY29uc3QgU1ZHTWVtYmVyQWNjZXNzb3I8T3duZXJUeXBlPiYgc2luZ2xldG9uKCkg
eyByZXR1cm4gQmFzZTo6dGVtcGxhdGUgc2luZ2xldG9uPFNWR0FuaW1hdGVkSW50ZWdlclBhaXJB
Y2Nlc3NvciwgcHJvcGVydHkxLCBwcm9wZXJ0eTI+KCk7IH0KKworcHJpdmF0ZToKKyAgICBPcHRp
b25hbDxTdHJpbmc+IHN5bmNocm9uaXplKGNvbnN0IE93bmVyVHlwZSYgb3duZXIpIGNvbnN0IGZp
bmFsCisgICAgeworICAgICAgICBib29sIGRpcnR5MSA9IHByb3BlcnR5MShvd25lciktPmlzRGly
dHkoKTsKKyAgICAgICAgYm9vbCBkaXJ0eTIgPSBwcm9wZXJ0eTIob3duZXIpLT5pc0RpcnR5KCk7
CisgICAgICAgIGlmICghKGRpcnR5MSB8fCBkaXJ0eTIpKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICBTdHJpbmcgc3RyaW5nMSA9IGRpcnR5MSA/ICpwcm9wZXJ0
eTEob3duZXIpLT5zeW5jaHJvbml6ZSgpIDogcHJvcGVydHkxKG93bmVyKS0+YmFzZVZhbEFzU3Ry
aW5nKCk7CisgICAgICAgIFN0cmluZyBzdHJpbmcyID0gZGlydHkyID8gKnByb3BlcnR5Mihvd25l
ciktPnN5bmNocm9uaXplKCkgOiBwcm9wZXJ0eTIob3duZXIpLT5iYXNlVmFsQXNTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHN0cmluZzEgPT0gc3RyaW5nMiA/IHN0cmluZzEgOiBzdHJpbmcxICsg
IiwgIiArIHN0cmluZzI7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0F0dHJpYnV0
ZUFuaW1hdG9yPiBjcmVhdGVBbmltYXRvcihPd25lclR5cGUmIG93bmVyLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNN
b2RlIGNhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBTVkdBbmltYXRlZEludGVnZXJQYWlyQW5pbWF0
b3I6OmNyZWF0ZShhdHRyaWJ1dGVOYW1lLCBwcm9wZXJ0eTEob3duZXIpLCBwcm9wZXJ0eTIob3du
ZXIpLCBhbmltYXRpb25Nb2RlLCBjYWxjTW9kZSwgaXNBY2N1bXVsYXRlZCwgaXNBZGRpdGl2ZSk7
CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKE93bmVyVHlwZSYgb3du
ZXIsIFNWR0F0dHJpYnV0ZUFuaW1hdG9yJiBhbmltYXRvcikgY29uc3QgZmluYWwKKyAgICB7Cisg
ICAgICAgIHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvciY+KGFuaW1h
dG9yKS5hcHBlbmRBbmltYXRlZEluc3RhbmNlKHByb3BlcnR5MShvd25lciksIHByb3BlcnR5Mihv
d25lcikpOworICAgIH0KK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5UGFpckFuaW1hdG9y
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZUFuaW1hdG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRWxlbWVudDsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMSwgdHlwZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0eUFuaW1h
dG9yMj4KK2NsYXNzIFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3IgOiBwdWJsaWMgU1ZH
QXR0cmlidXRlQW5pbWF0b3IgeworcHVibGljOgorICAgIHVzaW5nIEFuaW1hdGVkUHJvcGVydHkx
ID0gdHlwZW5hbWUgQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMTo6QW5pbWF0b3JBbmltYXRlZFBy
b3BlcnR5OworICAgIHVzaW5nIEFuaW1hdGVkUHJvcGVydHkyID0gdHlwZW5hbWUgQW5pbWF0ZWRQ
cm9wZXJ0eUFuaW1hdG9yMjo6QW5pbWF0b3JBbmltYXRlZFByb3BlcnR5OworCisgICAgdm9pZCBh
cHBlbmRBbmltYXRlZEluc3RhbmNlKFJlZjxBbmltYXRlZFByb3BlcnR5MT4mIGFuaW1hdGVkMSwg
UmVmPEFuaW1hdGVkUHJvcGVydHkyPiYgYW5pbWF0ZWQyKQorICAgIHsKKyAgICAgICAgbV9hbmlt
YXRlZFByb3BlcnR5QW5pbWF0b3IxLT5hcHBlbmRBbmltYXRlZEluc3RhbmNlKGFuaW1hdGVkMSk7
CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMi0+YXBwZW5kQW5pbWF0ZWRJbnN0
YW5jZShhbmltYXRlZDIpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFNWR0FuaW1hdGVkUHJv
cGVydHlQYWlyQW5pbWF0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgUmVm
PEFuaW1hdGVkUHJvcGVydHkxPiYgYW5pbWF0ZWQxLCBSZWY8QW5pbWF0ZWRQcm9wZXJ0eTI+JiBh
bmltYXRlZDIsIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUgY2FsY01vZGUs
IGJvb2wgaXNBY2N1bXVsYXRlZCwgYm9vbCBpc0FkZGl0aXZlKQorICAgICAgICA6IFNWR0F0dHJp
YnV0ZUFuaW1hdG9yKGF0dHJpYnV0ZU5hbWUpCisgICAgICAgICwgbV9hbmltYXRlZFByb3BlcnR5
QW5pbWF0b3IxKEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjE6OmNyZWF0ZShhdHRyaWJ1dGVOYW1l
LCBhbmltYXRlZDEsIGFuaW1hdGlvbk1vZGUsIGNhbGNNb2RlLCBpc0FjY3VtdWxhdGVkLCBpc0Fk
ZGl0aXZlKSkKKyAgICAgICAgLCBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjIoQW5pbWF0ZWRQ
cm9wZXJ0eUFuaW1hdG9yMjo6Y3JlYXRlKGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkMiwgYW5pbWF0
aW9uTW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHN0YXJ0KFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjEtPnN0YXJ0KHRhcmdl
dEVsZW1lbnQpOworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjItPnN0YXJ0KHRh
cmdldEVsZW1lbnQpOworICAgIH0KKworICAgIHZvaWQgcHJvZ3Jlc3MoU1ZHRWxlbWVudCogdGFy
Z2V0RWxlbWVudCwgZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0Q291bnQpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjEtPnByb2dyZXNz
KHRhcmdldEVsZW1lbnQsIHBlcmNlbnRhZ2UsIHJlcGVhdENvdW50KTsKKyAgICAgICAgbV9hbmlt
YXRlZFByb3BlcnR5QW5pbWF0b3IyLT5wcm9ncmVzcyh0YXJnZXRFbGVtZW50LCBwZXJjZW50YWdl
LCByZXBlYXRDb3VudCk7CisgICAgfQorCisgICAgdm9pZCBhcHBseShTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXBwbHlBbmltYXRlZFByb3BlcnR5
Q2hhbmdlKHRhcmdldEVsZW1lbnQpOworICAgIH0KKworICAgIHZvaWQgc3RvcChTVkdFbGVtZW50
KiB0YXJnZXRFbGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9hbmltYXRlZFByb3Bl
cnR5QW5pbWF0b3IxLT5zdG9wKHRhcmdldEVsZW1lbnQpOworICAgICAgICBtX2FuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjItPnN0b3AodGFyZ2V0RWxlbWVudCk7CisgICAgfQorCisgICAgc3RkOjp1
bmlxdWVfcHRyPEFuaW1hdGVkUHJvcGVydHlBbmltYXRvcjE+IG1fYW5pbWF0ZWRQcm9wZXJ0eUFu
aW1hdG9yMTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMj4g
bV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3IyOworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvckltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBy
b3BlcnR5UGFpckFuaW1hdG9ySW1wbC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlQYWlyQW5pbWF0b3JJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRQcm9wZXJ0eUltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5UGFpckFu
aW1hdG9yLmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFzcyBTVkdBbmltYXRlZEludGVnZXJQYWly
QW5pbWF0b3IgZmluYWwgOiBwdWJsaWMgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvcjxT
VkdBbmltYXRlZEludGVnZXJBbmltYXRvciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I+IHsK
KyAgICB1c2luZyBCYXNlID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVBhaXJBbmltYXRvcjxTVkdBbmlt
YXRlZEludGVnZXJBbmltYXRvciwgU1ZHQW5pbWF0ZWRJbnRlZ2VyQW5pbWF0b3I+OworICAgIHVz
aW5nIEJhc2U6OkJhc2U7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYXV0byBjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4mIGFu
aW1hdGVkMSwgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4mIGFuaW1hdGVkMiwgQW5pbWF0aW9uTW9k
ZSBhbmltYXRpb25Nb2RlLCBDYWxjTW9kZSBjYWxjTW9kZSwgYm9vbCBpc0FjY3VtdWxhdGVkLCBi
b29sIGlzQWRkaXRpdmUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFNW
R0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvcj4obmV3IFNWR0FuaW1hdGVkSW50ZWdlclBhaXJB
bmltYXRvcihhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZDEsIGFuaW1hdGVkMiwgYW5pbWF0aW9uTW9k
ZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRkaXRpdmUpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBzZXRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmlu
ZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8gcGFp
ckZyb20gPSBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8aW50LCBpbnQ+Pjo6ZnJvbVN0cmlu
Zyhmcm9tKTsKKyAgICAgICAgYXV0byBwYWlyVG8gPSBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBh
aXI8aW50LCBpbnQ+Pjo6ZnJvbVN0cmluZyh0byk7CisKKyAgICAgICAgbV9hbmltYXRlZFByb3Bl
cnR5QW5pbWF0b3IxLT5tX2Z1bmN0aW9uLm1fZnJvbSA9IHBhaXJGcm9tLmZpcnN0OworICAgICAg
ICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjEtPm1fZnVuY3Rpb24ubV90byA9IHBhaXJUby5m
aXJzdDsKKworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmltYXRvcjItPm1fZnVuY3Rpb24u
bV9mcm9tID0gcGFpckZyb20uc2Vjb25kOworICAgICAgICBtX2FuaW1hdGVkUHJvcGVydHlBbmlt
YXRvcjItPm1fZnVuY3Rpb24ubV90byA9IHBhaXJUby5zZWNvbmQ7CisgICAgfQorCisgICAgdm9p
ZCBzZXRGcm9tQW5kQnlWYWx1ZXMoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29u
c3QgU3RyaW5nJiBieSkgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8gcGFpckZyb20gPSBTVkdQ
cm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8aW50LCBpbnQ+Pjo6ZnJvbVN0cmluZyhmcm9tKTsKKyAg
ICAgICAgYXV0byBwYWlyQnkgPSBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8aW50LCBpbnQ+
Pjo6ZnJvbVN0cmluZyhieSk7CisKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3Ix
LT5tX2Z1bmN0aW9uLm1fZnJvbSA9IHBhaXJGcm9tLmZpcnN0OworICAgICAgICBtX2FuaW1hdGVk
UHJvcGVydHlBbmltYXRvcjEtPm1fZnVuY3Rpb24ubV90byA9IHBhaXJGcm9tLmZpcnN0ICsgcGFp
ckJ5LmZpcnN0OworCisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9yMi0+bV9mdW5j
dGlvbi5tX2Zyb20gPSBwYWlyRnJvbS5zZWNvbmQ7CisgICAgICAgIG1fYW5pbWF0ZWRQcm9wZXJ0
eUFuaW1hdG9yMi0+bV9mdW5jdGlvbi5tX3RvID0gcGFpckZyb20uc2Vjb25kICsgcGFpckJ5LnNl
Y29uZDsKKyAgICB9CisKKyAgICB2b2lkIHNldFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3Qg
U3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvbikgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8gcGFp
clRvQXRFbmRPZkR1cmF0aW9uID0gU1ZHUHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGludCwgaW50
Pj46OmZyb21TdHJpbmcodG9BdEVuZE9mRHVyYXRpb24pOworICAgICAgICBtX2FuaW1hdGVkUHJv
cGVydHlBbmltYXRvcjEtPm1fZnVuY3Rpb24ubV90b0F0RW5kT2ZEdXJhdGlvbiA9IHBhaXJUb0F0
RW5kT2ZEdXJhdGlvbi5maXJzdDsKKyAgICAgICAgbV9hbmltYXRlZFByb3BlcnR5QW5pbWF0b3Iy
LT5tX2Z1bmN0aW9uLm1fdG9BdEVuZE9mRHVyYXRpb24gPSBwYWlyVG9BdEVuZE9mRHVyYXRpb24u
c2Vjb25kOworICAgIH0KK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9u
QWRkaXRpdmVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlNWR0FuaW1hdGlvbkZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbiA6IHB1YmxpYyBTVkdB
bmltYXRpb25GdW5jdGlvbiB7CitwdWJsaWM6CisgICAgU1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5j
dGlvbihBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENhbGNNb2RlIGNhbGNNb2RlLCBib29s
IGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkKKyAgICAgICAgOiBTVkdBbmltYXRpb25G
dW5jdGlvbihhbmltYXRpb25Nb2RlKQorICAgICAgICAsIG1fY2FsY01vZGUoY2FsY01vZGUpCisg
ICAgICAgICwgbV9pc0FjY3VtdWxhdGVkKGlzQWNjdW11bGF0ZWQpCisgICAgICAgICwgbV9pc0Fk
ZGl0aXZlKGlzQWRkaXRpdmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0RnJvbUFuZEJ5
VmFsdWVzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgZnJvbSwgY29u
c3QgU3RyaW5nJiBieSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEZyb21BbmRUb1ZhbHVl
cyh0YXJnZXRFbGVtZW50LCBmcm9tLCBieSk7CisgICAgICAgIGFkZEZyb21BbmRUb1ZhbHVlcyh0
YXJnZXRFbGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRvQXRFbmRPZkR1cmF0aW9uVmFs
dWUoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIGZsb2F0IHByb2dyZXNzKGZsb2F0IHBl
cmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZmxv
YXQgdG9BdEVuZE9mRHVyYXRpb24sIGZsb2F0IGFuaW1hdGVkKQorICAgIHsKKyAgICAgICAgZmxv
YXQgbnVtYmVyOworICAgICAgICBpZiAobV9jYWxjTW9kZSA9PSBDYWxjTW9kZTo6RGlzY3JldGUp
CisgICAgICAgICAgICBudW1iZXIgPSBwZXJjZW50YWdlIDwgMC41ID8gZnJvbSA6IHRvOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBudW1iZXIgPSAodG8gLSBmcm9tKSAqIHBlcmNlbnRhZ2Ug
KyBmcm9tOworCisgICAgICAgIGlmIChtX2lzQWNjdW11bGF0ZWQgJiYgcmVwZWF0Q291bnQpCisg
ICAgICAgICAgICBudW1iZXIgKz0gdG9BdEVuZE9mRHVyYXRpb24gKiByZXBlYXRDb3VudDsKKwor
ICAgICAgICBpZiAobV9pc0FkZGl0aXZlICYmIG1fYW5pbWF0aW9uTW9kZSAhPSBBbmltYXRpb25N
b2RlOjpUbykKKyAgICAgICAgICAgIG51bWJlciArPSBhbmltYXRlZDsKKworICAgICAgICByZXR1
cm4gbnVtYmVyOworICAgIH0KKworICAgIENhbGNNb2RlIG1fY2FsY01vZGU7CisgICAgYm9vbCBt
X2lzQWNjdW11bGF0ZWQ7CisgICAgYm9vbCBtX2lzQWRkaXRpdmU7Cit9OworCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
VkdBbmltYXRpb25BZGRpdGl2ZUZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorY2xhc3MgU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uIDogcHVibGljIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24geworcHVi
bGljOgorICAgIHVzaW5nIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb246OlNWR0FuaW1hdGlv
bkFkZGl0aXZlRnVuY3Rpb247CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVmFsdWVUeXBlIHRvQXRF
bmRPZkR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90b0F0RW5kT2ZEdXJhdGlvbiA/ICptX3Rv
QXRFbmRPZkR1cmF0aW9uIDogbV90bzsgfQorCisgICAgVmFsdWVUeXBlIG1fZnJvbTsKKyAgICBW
YWx1ZVR5cGUgbV90bzsKKyAgICBPcHRpb25hbDxWYWx1ZVR5cGU+IG1fdG9BdEVuZE9mRHVyYXRp
b247Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1w
bC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNWR0FuaW1hdGlvbkludGVnZXJGdW5jdGlvbiA6IHB1YmxpYyBT
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb248aW50PiB7CisgICAgZnJpZW5kIGNsYXNz
IFNWR0FuaW1hdGVkSW50ZWdlclBhaXJBbmltYXRvcjsKKworcHVibGljOgorICAgIHVzaW5nIEJh
c2UgPSBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb248aW50PjsKKyAgICB1c2luZyBC
YXNlOjpCYXNlOworCisgICAgdm9pZCBzZXRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCosIGNv
bnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIG1fZnJvbSA9IFNWR1Byb3BlcnR5VHJhaXRzPGludD46OmZyb21TdHJpbmcoZnJvbSk7Cisg
ICAgICAgIG1fdG8gPSBTVkdQcm9wZXJ0eVRyYWl0czxpbnQ+Ojpmcm9tU3RyaW5nKHRvKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0
b0F0RW5kT2ZEdXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdG9BdEVuZE9mRHVy
YXRpb24gPSBTVkdQcm9wZXJ0eVRyYWl0czxpbnQ+Ojpmcm9tU3RyaW5nKHRvQXRFbmRPZkR1cmF0
aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHByb2dyZXNzKFNWR0VsZW1lbnQqLCBmbG9hdCBwZXJj
ZW50YWdlLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgaW50JiBhbmltYXRlZCkKKyAgICB7CisgICAg
ICAgIGFuaW1hdGVkID0gc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoQmFzZTo6cHJvZ3Jlc3MocGVy
Y2VudGFnZSwgcmVwZWF0Q291bnQsIG1fZnJvbSwgbV90bywgdG9BdEVuZE9mRHVyYXRpb24oKSwg
YW5pbWF0ZWQpKSk7CisgICAgfQorCisgICAgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoU1ZHRWxl
bWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmFicyh0by50b0ludFN0cmljdCgpIC0gZnJv
bS50b0ludFN0cmljdCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRGcm9tQW5k
VG9WYWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3RvICs9IG1f
ZnJvbTsKKyAgICB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25GdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkZ1bmN0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU1ZHQW5pbWF0aW9uRnVuY3Rpb24geworcHVibGljOgorICAgIHZpcnR1YWwgflNW
R0FuaW1hdGlvbkZ1bmN0aW9uKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIGlzRGlz
Y3JldGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldEZy
b21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZyb21BbmRCeVZhbHVlcyhT
VkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3Ry
aW5nJikgPSAwOworCisgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVt
ZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgY29uc3QgeyByZXR1cm4gLTE7IH0K
K3Byb3RlY3RlZDoKKyAgICBTVkdBbmltYXRpb25GdW5jdGlvbihBbmltYXRpb25Nb2RlIGFuaW1h
dGlvbk1vZGUpCisgICAgICAgIDogbV9hbmltYXRpb25Nb2RlKGFuaW1hdGlvbk1vZGUpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVu
dCopIHsgfQorCisgICAgQW5pbWF0aW9uTW9kZSBtX2FuaW1hdGlvbk1vZGU7Cit9OworCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmli
dXRlQW5pbWF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZUFuaW1hdG9yLmgi
CisKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eVBhcnNlci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIFNWR0F0dHJpYnV0ZUFuaW1hdG9yOjphcHBseUFuaW1hdGVkUHJv
cGVydHlDaGFuZ2UoU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSkKK3sKKyAgICBBU1NFUlQoIWVsZW1lbnQtPm1fZGVsZXRpb25IYXNCZWd1bik7
CisgICAgZWxlbWVudC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKK30KKwor
dm9pZCBTVkdBdHRyaWJ1dGVBbmltYXRvcjo6YXBwbHlBbmltYXRlZFByb3BlcnR5Q2hhbmdlKFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpCit7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwor
ICAgIEFTU0VSVChtX2F0dHJpYnV0ZU5hbWUgIT0gYW55UU5hbWUoKSk7CisKKyAgICAvLyBGSVhN
RTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBpc0Nvbm5lY3RlZCBhbmQgIXBhcmVu
dE5vZGU/CisgICAgaWYgKCF0YXJnZXRFbGVtZW50LT5pc0Nvbm5lY3RlZCgpIHx8ICF0YXJnZXRF
bGVtZW50LT5wYXJlbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR0VsZW1lbnQ6
Okluc3RhbmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKCp0YXJnZXRFbGVtZW50KTsKKyAgICBhcHBs
eUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UodGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsK
KworICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhl
bSBhcyB3ZWxsLCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCisg
ICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRhcmdldEVsZW1lbnQtPmluc3RhbmNlcygpKQorICAg
ICAgICBhcHBseUFuaW1hdGVkUHJvcGVydHlDaGFuZ2UoaW5zdGFuY2UsIG1fYXR0cmlidXRlTmFt
ZSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJp
YnV0ZUFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
KyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU1ZHRWxlbWVudDsKKworZW51bSBjbGFzcyBBbmltYXRpb25Nb2RlIDogdWludDhfdCB7
CisgICAgTm9uZSwKKyAgICBGcm9tVG8sCisgICAgRnJvbUJ5LAorICAgIFRvLAorICAgIEJ5LAor
ICAgIFZhbHVlcywKKyAgICBQYXRoCit9OworCitlbnVtIGNsYXNzIENhbGNNb2RlIDogdWludDhf
dCB7CisgICAgRGlzY3JldGUsCisgICAgTGluZWFyLAorICAgIFBhY2VkLAorICAgIFNwbGluZQor
fTsKKworY2xhc3MgU1ZHQXR0cmlidXRlQW5pbWF0b3IgeworcHVibGljOgorICAgIFNWR0F0dHJp
YnV0ZUFuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCisgICAgICAg
IDogbV9hdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgflNWR0F0dHJpYnV0ZUFuaW1hdG9yKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBi
b29sIGlzRGlzY3JldGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2
b2lkIHNldEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZyb21BbmRCeVZhbHVlcyhTVkdFbGVt
ZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgc3RhcnQoU1ZHRWxlbWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZ3Jl
c3MoU1ZHRWxlbWVudCosIGZsb2F0LCB1bnNpZ25lZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShTVkdFbGVtZW50KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKFNWR0VsZW1lbnQq
IHRhcmdldEVsZW1lbnQpID0gMDsKKworICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFu
Y2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0
dXJuIC0xOyB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCBhcHBseUFuaW1hdGVkUHJv
cGVydHlDaGFuZ2UoU1ZHRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAgIHZv
aWQgYXBwbHlBbmltYXRlZFByb3BlcnR5Q2hhbmdlKFNWR0VsZW1lbnQqKTsKKworICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIG1fYXR0cmlidXRlTmFtZTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZU93bmVyUHJv
eHkuY3BwCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBdHRyaWJ1dGVPd25lclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0F0dHJpYnV0ZU93bmVyUHJv
eHkuaCIKIAorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTVkdBdHRyaWJ1dGVPd25lclByb3h5OjpTVkdBdHRyaWJ1dGVPd25lclByb3h5KFNWR0VsZW1l
bnQmIGVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRy
aWJ1dGVPd25lclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQXR0cmlidXRlT3duZXJQcm94eS5oCShyZXZpc2lvbiAyNDI5NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVPd25lclByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJR
dWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eVR5cGUuaCIKICNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBdHRyaWJ1dGVSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI0Mjk3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVJlZ2lzdHJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIlNWR0FuaW1hdGVk
Qm9vbGVhbi5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZEludGVnZXIuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgog
I2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVk
TnVtYmVyLmgiCkBAIC04MCwyMCArNzksNiBAQCBwdWJsaWM6CiAgICAgICAgIHJlZ2lzdGVyQXR0
cmlidXRlKFNWR0FuaW1hdGVkRW51bWVyYXRpb25BdHRyaWJ1dGVBY2Nlc3NvcjxPd25lclR5cGUs
IEVudW1UeXBlPjo6dGVtcGxhdGUgc2luZ2xldG9uPGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZT4o
KSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8Y29uc3QgTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0
IFF1YWxpZmllZE5hbWU+JiBhdHRyaWJ1dGVOYW1lLCBTVkdBbmltYXRlZEludGVnZXJBdHRyaWJ1
dGUgT3duZXJUeXBlOjoqYXR0cmlidXRlPgotICAgIHZvaWQgcmVnaXN0ZXJBdHRyaWJ1dGUoKQot
ICAgIHsKLSAgICAgICAgcmVnaXN0ZXJBdHRyaWJ1dGUoU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmli
dXRlQWNjZXNzb3I8T3duZXJUeXBlPjo6dGVtcGxhdGUgc2luZ2xldG9uPGF0dHJpYnV0ZU5hbWUs
IGF0dHJpYnV0ZT4oKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y29uc3QgTGF6eU5ldmVyRGVz
dHJveWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+JiBhdHRyaWJ1dGVOYW1lLAotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmICgqaWRlbnRpZmllcikoKSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmli
dXRlIE93bmVyVHlwZTo6KmF0dHJpYnV0ZSwKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiAo
Km9wdGlvbmFsSWRlbnRpZmllcikoKSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyQXR0cmlidXRlIE93bmVy
VHlwZTo6Km9wdGlvbmFsQXR0cmlidXRlPgotICAgIHZvaWQgcmVnaXN0ZXJBdHRyaWJ1dGUoKQot
ICAgIHsKLSAgICAgICAgcmVnaXN0ZXJBdHRyaWJ1dGUoU1ZHQW5pbWF0ZWRPcHRpb25hbEludGVn
ZXJBdHRyaWJ1dGVBY2Nlc3NvcjxPd25lclR5cGU+Ojp0ZW1wbGF0ZSBzaW5nbGV0b248YXR0cmli
dXRlTmFtZSwgaWRlbnRpZmllciwgYXR0cmlidXRlLCBvcHRpb25hbElkZW50aWZpZXIsIG9wdGlv
bmFsQXR0cmlidXRlPigpKTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTxjb25zdCBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgUXVhbGlmaWVkTmFtZT4mIGF0dHJpYnV0ZU5hbWUsIFNWR0FuaW1hdGVk
TGVuZ3RoQXR0cmlidXRlIE93bmVyVHlwZTo6KmF0dHJpYnV0ZT4KICAgICB2b2lkIHJlZ2lzdGVy
QXR0cmlidXRlKCkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdNZW1iZXJBY2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR01lbWJlckFjY2Vzc29yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTWVtYmVyQWNjZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5j
bHVkZSAiU1ZHQXR0cmlidXRlQW5pbWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTVkdBbmltYXRlZFByb3BlcnR5OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lclR5cGU+
CitjbGFzcyBTVkdNZW1iZXJBY2Nlc3NvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1ZHTWVtYmVyQWNjZXNzb3IoKSA9IGRlZmF1bHQ7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKGNvbnN0IE93bmVyVHlwZSYpIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0FuaW1hdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0FuaW1hdGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzKGNvbnN0IE93bmVyVHlwZSYsIGNvbnN0
IFNWR0FuaW1hdGVkUHJvcGVydHkmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgT3B0aW9uYWw8U3RyaW5nPiBzeW5jaHJvbml6ZShjb25zdCBPd25lclR5cGUmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFNW
R0F0dHJpYnV0ZUFuaW1hdG9yPiBjcmVhdGVBbmltYXRvcihPd25lclR5cGUmLCBjb25zdCBRdWFs
aWZpZWROYW1lJiwgQW5pbWF0aW9uTW9kZSwgQ2FsY01vZGUsIGJvb2wsIGJvb2wpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQW5pbWF0ZWRJbnN0YW5j
ZShPd25lclR5cGUmLCBTVkdBdHRyaWJ1dGVBbmltYXRvciYpIGNvbnN0IHsgfQorCitwcm90ZWN0
ZWQ6CisgICAgU1ZHTWVtYmVyQWNjZXNzb3IoKSA9IGRlZmF1bHQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQb2lu
dGVyTWVtYmVyQWNjZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTVkdNZW1i
ZXJBY2Nlc3Nvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IE93bmVyVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlUeXBlPgorY2xhc3MgU1ZHUG9pbnRlck1lbWJl
ckFjY2Vzc29yIDogcHVibGljIFNWR01lbWJlckFjY2Vzc29yPE93bmVyVHlwZT4geworICAgIHVz
aW5nIEJhc2UgPSBTVkdNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGU+OworCitwdWJsaWM6CisgICAg
U1ZHUG9pbnRlck1lbWJlckFjY2Vzc29yKFJlZjxQcm9wZXJ0eVR5cGU+IE93bmVyVHlwZTo6KnBy
b3BlcnR5KQorICAgICAgICA6IG1fcHJvcGVydHkocHJvcGVydHkpCisgICAgeworICAgIH0KKwor
ICAgIFJlZjxQcm9wZXJ0eVR5cGU+JiBwcm9wZXJ0eShPd25lclR5cGUmIG93bmVyKSBjb25zdCB7
IHJldHVybiBvd25lci4qbV9wcm9wZXJ0eTsgfQorICAgIGNvbnN0IFJlZjxQcm9wZXJ0eVR5cGU+
JiBwcm9wZXJ0eShjb25zdCBPd25lclR5cGUmIG93bmVyKSBjb25zdCB7IHJldHVybiBvd25lci4q
bV9wcm9wZXJ0eTsgfQorCisgICAgdm9pZCBkZXRhY2goY29uc3QgT3duZXJUeXBlJiBvd25lcikg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHByb3BlcnR5KG93bmVyKS0+ZGV0YWNoKCk7
CisgICAgfQorCisgICAgT3B0aW9uYWw8U3RyaW5nPiBzeW5jaHJvbml6ZShjb25zdCBPd25lclR5
cGUmIG93bmVyKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5
KG93bmVyKS0+c3luY2hyb25pemUoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBBY2Nlc3NvclR5cGUsIFJlZjxQcm9wZXJ0eVR5cGU+IE93bmVyVHlwZTo6KnBy
b3BlcnR5PgorICAgIHN0YXRpYyBjb25zdCBTVkdNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGU+JiBz
aW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFjY2Vzc29y
VHlwZT4gcHJvcGVydHlBY2Nlc3NvciB7IHByb3BlcnR5IH07CisgICAgICAgIHJldHVybiBwcm9w
ZXJ0eUFjY2Vzc29yOworICAgIH0KKworICAgIFJlZjxQcm9wZXJ0eVR5cGU+IE93bmVyVHlwZTo6
Km1fcHJvcGVydHk7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR1Byb3BlcnR5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHUHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitlbnVtIGNsYXNzIFNWR1Byb3BlcnR5QWNjZXNzIDogdWludDhfdCB7IFJlYWRXcml0ZSwgUmVh
ZE9ubHkgfTsKK2VudW0gY2xhc3MgU1ZHUHJvcGVydHlTdGF0ZSA6IHVpbnQ4X3QgeyBDbGVhbiwg
RGlydHkgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlPd25lci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5T3duZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU1ZHUHJvcGVydHlPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U1ZH
UHJvcGVydHlPd25lcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgU1ZHUHJvcGVydHlPd25l
ciogb3duZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgCisgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBhdHRyaWJ1dGVDb250ZXh0RWxlbWVudCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIW93bmVyKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIG93bmVyKCktPmF0dHJpYnV0ZUNvbnRleHRFbGVtZW50KCk7CisgICAgfQorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBjb21taXRQcm9wZXJ0eUNoYW5nZSgpCisgICAgeworICAgICAg
ICBpZiAoIW93bmVyKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG93bmVyKCktPmNv
bW1pdFByb3BlcnR5Q2hhbmdlKCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIFNWR1By
b3BlcnR5T3duZXIoKSA9IGRlZmF1bHQ7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnkuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0
eU93bmVyUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFjY2Vzc29ySW1wbC5oIgorI2luY2x1
ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNjZXNzb3JJbXBsLmgiCisjaW5jbHVkZSAiU1ZH
UHJvcGVydHlSZWdpc3RyeS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHQXR0cmlidXRlQW5pbWF0b3I7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUuLi4gQmFzZVR5cGVzPgorY2xhc3MgU1ZHUHJvcGVy
dHlPd25lclJlZ2lzdHJ5IDogcHVibGljIFNWR1Byb3BlcnR5UmVnaXN0cnkgeworcHVibGljOgor
ICAgIFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeShPd25lclR5cGUmIG93bmVyKQorICAgICAgICA6
IG1fb3duZXIob3duZXIpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlPGNvbnN0IExhenlO
ZXZlckRlc3Ryb3llZDxjb25zdCBRdWFsaWZpZWROYW1lPiYgYXR0cmlidXRlTmFtZSwgUmVmPFNW
R0FuaW1hdGVkSW50ZWdlcj4gT3duZXJUeXBlOjoqcHJvcGVydHk+CisgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJQcm9wZXJ0eSgpCisgICAgeworICAgICAgICByZWdpc3RlclByb3BlcnR5KGF0dHJp
YnV0ZU5hbWUsIFNWR0FuaW1hdGVkSW50ZWdlckFjY2Vzc29yPE93bmVyVHlwZT46OnRlbXBsYXRl
IHNpbmdsZXRvbjxwcm9wZXJ0eT4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8Y29uc3QgTGF6
eU5ldmVyRGVzdHJveWVkPGNvbnN0IFF1YWxpZmllZE5hbWU+JiBhdHRyaWJ1dGVOYW1lLCBSZWY8
U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBPd25lclR5cGU6Oipwcm9wZXJ0eTEsIFJlZjxTVkdBbmltYXRl
ZEludGVnZXI+IE93bmVyVHlwZTo6KnByb3BlcnR5Mj4KKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
clByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIHJlZ2lzdGVyUHJvcGVydHkoYXR0cmlidXRlTmFt
ZSwgU1ZHQW5pbWF0ZWRJbnRlZ2VyUGFpckFjY2Vzc29yPE93bmVyVHlwZT46OnRlbXBsYXRlIHNp
bmdsZXRvbjxwcm9wZXJ0eTEsIHByb3BlcnR5Mj4oKSk7CisgICAgfQorICAgIC8vIEVudW1lcmF0
ZSBhbGwgdGhlIFNWR01lbWJlckFjY2Vzc29ycyByZWN1cnNpdmVseS4gVGhlIGZ1bmN0b3Igd2ls
bCBiZSBjYWxsZWQgYW5kIHdpbGwKKyAgICAvLyBiZSBnaXZlbiB0aGUgcGFpcjxRdWFsaWZpZWRO
YW1lLCBTVkdNZW1iZXJBY2Nlc3Nvcj4gdGlsbCB0aGUgZnVuY3RvciByZXR1cm5zIGZhbHNlLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIGJvb2wgZW51bWVyYXRl
UmVjdXJzaXZlbHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiBhdHRyaWJ1dGVOYW1lVG9BY2Nlc3Nvck1hcCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZW51bWVyYXRlUmVjdXJzaXZlbHlCYXNlVHlw
ZXMoZnVuY3Rvcik7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIE93bmVyVHlwZSBv
d25zIGEgcHJvcGVydHkgd2hvc2UgbmFtZSBpcyBhdHRyaWJ1dGVOYW1lLgorICAgIHN0YXRpYyBi
b29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmaW5kQWNjZXNzb3IoYXR0cmlidXRlTmFtZSk7CisgICAg
fQorCisgICAgUXVhbGlmaWVkTmFtZSBhbmltYXRlZFByb3BlcnR5QXR0cmlidXRlTmFtZShjb25z
dCBTVkdBbmltYXRlZFByb3BlcnR5JiBhbmltYXRlZFByb3BlcnR5KSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyaWJ1dGVOYW1lID0gbnVsbFFOYW1lKCk7
CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KFsmXShjb25zdCBhdXRvJiBlbnRyeSkgLT4g
Ym9vbCB7CisgICAgICAgICAgICBpZiAoIWVudHJ5LnZhbHVlLT5tYXRjaGVzKG1fb3duZXIsIGFu
aW1hdGVkUHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgYXR0cmlidXRlTmFtZSA9IGVudHJ5LmtleTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lOworICAgIH0KKworICAg
IC8vIERldGFjaCBhbGwgdGhlIHByb3BlcnRpZXMgcmVjdXJzaXZlbHkgZnJvbSB0aGVpciBPd25l
clR5cGVzLgorICAgIHZvaWQgZGV0YWNoQWxsUHJvcGVydGllcygpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBlbnVtZXJhdGVSZWN1cnNpdmVseShbJl0oY29uc3QgYXV0byYgZW50cnkp
IC0+IGJvb2wgeworICAgICAgICAgICAgZW50cnkudmFsdWUtPmRldGFjaChtX293bmVyKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBGaW5k
cyB0aGUgcHJvcGVydHkgd2hvc2UgbmFtZSBpcyBhdHRyaWJ1dGVOYW1lIGFuZCByZXR1cm5zIHRo
ZSBzeW5jaHJvbml6ZQorICAgIC8vIHN0cmluZyB0aHJvdWdoIHRoZSBhc3NvY2lhdGVkIFNWR01l
bWJlckFjY2Vzc29yLgorICAgIE9wdGlvbmFsPFN0cmluZz4gc3luY2hyb25pemUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IE9wdGlvbmFsPFN0cmluZz4gdmFsdWU7CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KFsm
XShjb25zdCBhdXRvJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoIWVudHJ5Lmtl
eS5tYXRjaGVzKGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgdmFsdWUgPSBlbnRyeS52YWx1ZS0+c3luY2hyb25pemUobV9vd25lcik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgLy8gRW51bWVyYXRlIHJlY3Vyc2l2ZWx5IHRoZSBTVkdNZW1iZXJB
Y2Nlc3NvcnMgb2YgdGhlIE93bmVyVHlwZSBhbmQgYWxsIGl0cyBCYXNlVHlwZXMuCisgICAgLy8g
Q29sbGVjdCBhbGwgdGhlIHBhaXJzIDxBdHRyaWJ1dGVOYW1lLCBTdHJpbmc+IG9ubHkgZm9yIHRo
ZSBkaXJ0eSBwcm9wZXJ0aWVzLgorICAgIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgU3RyaW5nPiBz
eW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
SGFzaE1hcDxRdWFsaWZpZWROYW1lLCBTdHJpbmc+IG1hcDsKKyAgICAgICAgZW51bWVyYXRlUmVj
dXJzaXZlbHkoWyZdKGNvbnN0IGF1dG8mIGVudHJ5KSAtPiBib29sIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHN0cmluZyA9IGVudHJ5LnZhbHVlLT5zeW5jaHJvbml6ZShtX293bmVyKSkKKyAgICAg
ICAgICAgICAgICBtYXAuYWRkKGVudHJ5LmtleSwgKnN0cmluZyk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBtYXA7CisgICAgfQorCisgICAg
Ym9vbCBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGJvb2wgaXNBbmltYXRl
ZFByb3BlcnR5QXR0cmlidXRlID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5
KFsmYXR0cmlidXRlTmFtZSwgJmlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZV0oY29uc3QgYXV0
byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKCFlbnRyeS5rZXkubWF0Y2hlcyhh
dHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGlzQW5pbWF0ZWRQcm9wZXJ0eUF0dHJpYnV0ZSA9IGVudHJ5LnZhbHVlLT5pc0FuaW1hdGVkUHJv
cGVydHkoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGU7CisgICAgfQorCisgICAgc3RkOjp1
bmlxdWVfcHRyPFNWR0F0dHJpYnV0ZUFuaW1hdG9yPiBjcmVhdGVBbmltYXRvcihjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIENh
bGNNb2RlIGNhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2ZSkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdBdHRyaWJ1dGVB
bmltYXRvcj4gYW5pbWF0b3I7CisgICAgICAgIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5KFsmXShjb25z
dCBhdXRvJiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoIWVudHJ5LmtleS5tYXRj
aGVzKGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgYW5pbWF0b3IgPSBlbnRyeS52YWx1ZS0+Y3JlYXRlQW5pbWF0b3IobV9vd25lciwgYXR0
cmlidXRlTmFtZSwgYW5pbWF0aW9uTW9kZSwgY2FsY01vZGUsIGlzQWNjdW11bGF0ZWQsIGlzQWRk
aXRpdmUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQW5pbWF0ZWRJbnN0YW5j
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBTVkdBdHRyaWJ1dGVBbmltYXRv
ciYgYW5pbWF0b3IpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBlbnVtZXJhdGVSZWN1
cnNpdmVseShbJl0oY29uc3QgYXV0byYgZW50cnkpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYg
KCFlbnRyeS5rZXkubWF0Y2hlcyhhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGVudHJ5LnZhbHVlLT5hcHBlbmRBbmltYXRlZEluc3RhbmNl
KG1fb3duZXIsIGFuaW1hdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFNpbmdsZXRvbiBtYXAgZm9yIGV2ZXJ5IE93
bmVyVHlwZS4KKyAgICBzdGF0aWMgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBjb25zdCBTVkdNZW1i
ZXJBY2Nlc3NvcjxPd25lclR5cGU+Kj4mIGF0dHJpYnV0ZU5hbWVUb0FjY2Vzc29yTWFwKCkKKyAg
ICB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFF1YWxpZmllZE5hbWUs
IGNvbnN0IFNWR01lbWJlckFjY2Vzc29yPE93bmVyVHlwZT4qPj4gYXR0cmlidXRlTmFtZVRvQWNj
ZXNzb3JNYXA7CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lVG9BY2Nlc3Nvck1hcDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFNWR01lbWJlckFjY2Vzc29yPE93bmVyVHlwZT4mIHBy
b3BlcnR5QWNjZXNzb3IpCisgICAgeworICAgICAgICBhdHRyaWJ1dGVOYW1lVG9BY2Nlc3Nvck1h
cCgpLmFkZChhdHRyaWJ1dGVOYW1lLCAmcHJvcGVydHlBY2Nlc3Nvcik7CisgICAgfQorCisgICAg
Ly8gVGhpcyBpcyBhIHRlbXBsYXRlIGZ1bmN0aW9uIHdpdGggcGFyYW1ldGVyICdJJyB3aG9zZSBk
ZWZhdWx0IHZhbHVlID0gMC4gU28geW91IGNhbiBjYWxsIGl0IHdpdGhvdXQgYW55IHBhcmFtZXRl
cgorICAgIC8vIGZyb20gZW51bWVyYXRlUmVjdXJzaXZlbHkoKS4gSXQgcmV0dXJucyB0cnVlIGFu
ZCBpcyBlbmFibGVfaWY8SSA9PSBzaXplb2YuLi4oQmFzZVR5cGVzKT4uIFNvIGl0IGlzIG1haW5s
eSBmb3IKKyAgICAvLyBicmVha2luZyB0aGUgcmVjdXJzaW9uLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3IsIHNpemVfdCBJID0gMD4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SSA9PSBzaXplb2YuLi4oQmFzZVR5cGVzKSwgYm9vbD46OnR5cGUgZW51bWVyYXRlUmVj
dXJzaXZlbHlCYXNlVHlwZXMoY29uc3QgRnVuY3RvciYpIHsgcmV0dXJuIHRydWU7IH0KKworICAg
IC8vIFRoaXMgdmVyc2lvbiBvZiBhbmltYXRlZFR5cGVzQmFzZVR5cGVzKCkgaXMgZW5hYmxlX2lm
PEkgPCBzaXplb2YuLi4oQmFzZVR5cGVzKT4uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
ciwgc2l6ZV90IEkgPSAwPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJIDwg
c2l6ZW9mLi4uKEJhc2VUeXBlcyksIGJvb2w+Ojp0eXBlIGVudW1lcmF0ZVJlY3Vyc2l2ZWx5QmFz
ZVR5cGVzKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBHZXQgdGhl
IGJhc2UgdHlwZSBhdCBpbmRleCAnSScgdXNpbmcgc3RkOjp0dXBsZSBhbmQgc3RkOjp0dXBsZV9l
bGVtZW50LgorICAgICAgICB1c2luZyBCYXNlVHlwZSA9IHR5cGVuYW1lIHN0ZDo6dHVwbGVfZWxl
bWVudDxJLCB0eXBlbmFtZSBzdGQ6OnR1cGxlPEJhc2VUeXBlcy4uLj4+Ojp0eXBlOworICAgICAg
ICBpZiAoIUJhc2VUeXBlOjpQcm9wZXJ0eVJlZ2lzdHJ5OjplbnVtZXJhdGVSZWN1cnNpdmVseShm
dW5jdG9yKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQmFzZVR5cGUg
ZG9lcyBub3Qgd2FudCB0byBicmVhayB0aGUgcmVjdXJzaW9uLiBTbyByZWN1cnNlIHRvIHRoZSBu
ZXh0IEJhc2VUeXBlLgorICAgICAgICByZXR1cm4gZW51bWVyYXRlUmVjdXJzaXZlbHlCYXNlVHlw
ZXM8RnVuY3RvciwgSSArIDE+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBT
VkdNZW1iZXJBY2Nlc3NvcjxPd25lclR5cGU+KiBmaW5kQWNjZXNzb3IoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBs
b29wIHRocm91Z2ggdGhlIGVudHJpZXMgaW4gdGhlIG1hcCBhbmQgdXNlIG1hdGNoZXMoKSB0byBj
b21wYXJlIHRoZW0gd2l0aCBhdHRyaWJ1dGVOYW1lLgorICAgICAgICAvLyBtX21hcC5jb250YWlu
cygpIHVzZXMgUXVhbGlmaWVkTmFtZTo6b3BlcmF0b3I9PSgpIHdoaWNoIGNvbXBhcmVzIHRoZSBp
bXBsIHBvaW50ZXJzIG9ubHkgd2hpbGUgbWF0Y2hlcygpCisgICAgICAgIC8vIGNvbXBhcmVzIHRo
ZSBjb250ZW50cyBpZiB0aGUgaW1wbCBwb2ludGVycyBkaWZmZXIuCisgICAgICAgIGF1dG8gaXQg
PSBzdGQ6OmZpbmRfaWYoYXR0cmlidXRlTmFtZVRvQWNjZXNzb3JNYXAoKS5iZWdpbigpLCBhdHRy
aWJ1dGVOYW1lVG9BY2Nlc3Nvck1hcCgpLmVuZCgpLCBbJmF0dHJpYnV0ZU5hbWVdKGNvbnN0IGF1
dG8mIGVudHJ5KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5rZXkubWF0Y2hl
cyhhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpdCAhPSBhdHRy
aWJ1dGVOYW1lVG9BY2Nlc3Nvck1hcCgpLmVuZCgpID8gaXQtPnZhbHVlIDogbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBPd25lclR5cGUmIG1fb3duZXI7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlSZWdpc3RyeS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5UmVn
aXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJTVkdBdHRyaWJ1dGVBbmltYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNWR0FuaW1hdGVkUHJvcGVydHk7CisKK2NsYXNzIFNWR1Byb3BlcnR5UmVnaXN0cnkgewor
cHVibGljOgorICAgIFNWR1Byb3BlcnR5UmVnaXN0cnkoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVh
bCB+U1ZHUHJvcGVydHlSZWdpc3RyeSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hBbGxQcm9wZXJ0aWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUXVhbGlmaWVkTmFt
ZSBhbmltYXRlZFByb3BlcnR5QXR0cmlidXRlTmFtZShjb25zdCBTVkdBbmltYXRlZFByb3BlcnR5
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8U3RyaW5nPiBzeW5jaHJvbml6ZShj
b25zdCBRdWFsaWZpZWROYW1lJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSGFzaE1hcDxRdWFs
aWZpZWROYW1lLCBTdHJpbmc+IHN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpIGNvbnN0ID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0FuaW1hdGVkUHJvcGVydHlBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
dHRyaWJ1dGVBbmltYXRvcj4gY3JlYXRlQW5pbWF0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIEFu
aW1hdGlvbk1vZGUsIENhbGNNb2RlLCBib29sIGlzQWNjdW11bGF0ZWQsIGJvb2wgaXNBZGRpdGl2
ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRBbmltYXRlZEluc3RhbmNlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIFNWR0F0dHJpYnV0ZUFuaW1hdG9yJikg
Y29uc3QgPSAwOworfTsKKworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>