<?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>54542</bug_id>
          
          <creation_ts>2011-02-16 03:34:04 -0800</creation_ts>
          <short_desc>SVG animation - analyze attribute type for animation</short_desc>
          <delta_ts>2011-02-20 14:30:06 -0800</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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>351972</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 03:34:04 -0800</bug_when>
    <thetext>Analyse the animated attribute type to specify the animation type. Get rid of PropertyType enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352055</commentid>
    <comment_count>1</comment_count>
      <attachid>82632</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 07:31:11 -0800</bug_when>
    <thetext>Created attachment 82632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352191</commentid>
    <comment_count>2</comment_count>
      <attachid>82632</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 10:53:22 -0800</bug_when>
    <thetext>Comment on attachment 82632
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        SVG animation - analyze attribute type for animation
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=54542

Redundant.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:136
&gt; +    DEFINE_STATIC_LOCAL(const AtomicString, xlinkHref, (&quot;xlink:href&quot;));
&gt; +
&gt; +    // xlink:href is the only animated attribute outside of SVG.
&gt; +    const String attributeName = this-&gt;attributeName();
&gt; +    QualifiedName attrName(QualifiedName(nullAtom, attributeName, nullAtom));
&gt; +    if (attributeName == xlinkHref)
&gt; +        attrName = XLinkNames::hrefAttr;

This is definately not correct.
I&apos;m sure we can construct a QualifiedName that works for SVG &amp; XLink (and any other possible namespace) w/o having to declare static strings here.
Let&apos;s talk on IRC.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:142
&gt; +    if (type == AnimatedBoolean

A big FIXME here, that animations works this way at the moment, and we want to avoid &quot;most types -&gt; AnimatedString&quot; in the future.

&gt; Source/WebCore/svg/SVGGElement.h:54
&gt; +    virtual void fillAttributeToPropertyTypeMap();
&gt; +    virtual AttributeToPropertyTypeMap&amp; attributeToPropertyTypeMap();

Why is this needed?

&gt; Source/WebCore/svg/SVGUseElement.cpp:245
&gt; +    attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedString);

Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352300</commentid>
    <comment_count>3</comment_count>
      <attachid>82684</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 13:31:26 -0800</bug_when>
    <thetext>Created attachment 82684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352304</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 13:36:34 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 82632 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82632&amp;action=review

&gt; &gt; Source/WebCore/svg/SVGGElement.h:54
&gt; &gt; +    virtual void fillAttributeToPropertyTypeMap();
&gt; &gt; +    virtual AttributeToPropertyTypeMap&amp; attributeToPropertyTypeMap();
&gt; 
&gt; Why is this needed?
Without these functions, the element takes the attribute map of SVGElement. This is equal with having no animatable attribute for this certain element at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352333</commentid>
    <comment_count>5</comment_count>
      <attachid>82691</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 14:11:59 -0800</bug_when>
    <thetext>Created attachment 82691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352641</commentid>
    <comment_count>6</comment_count>
      <attachid>82691</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-17 00:21:22 -0800</bug_when>
    <thetext>Comment on attachment 82691
Patch

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

Almost there, I just saw that the QName construction is not encapsulated in a good way, so we might want to fix that first. r- for now.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:155
&gt; +    String attributeName = this-&gt;attributeName();
&gt; +    AnimatedAttributeType type = targetElement-&gt;animatedPropertyTypeForAttribute(QualifiedName(nullAtom, attributeName, nullAtom));
&gt; +    if (type == AnimatedUnknown) {
&gt; +        if (!attributeName.contains(&apos;:&apos;))
&gt; +            return AnimatedUnknown;
&gt; +        // Attribute is not in the SVG namespace, check for other namespaces.
&gt; +        QualifiedName qname = qualifiedNameForAttributeWithPrefix(targetElement, attributeName);
&gt; +        if (qname == anyQName())
&gt; +            return AnimatedUnknown;

Okay, I&apos;m now questioning why this code isn&apos;t in animatedPropertyTypeForAttribute itself. How about passing a const String&amp; to animatedPropertyTypeForAttribute, instead of a QualifiedName, and let it construct the QName on it&apos;s own.
That would remove the need to construct qnames in all of SVGAnimate* code.

There is more than one place, where you end up doing QName(nulAtom, localName, nullAtom) or QName(nullAtom, localName, nsURI) now, once here, and once in SVGAnimateTransformElement::determineAnimatedAttributeType.
Sorry, It was a bit late yesterday for me, didn&apos;t see it right from the beginning.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:157
&gt; +        type = targetElement-&gt;animatedPropertyTypeForAttribute(qname);
&gt; +    }

I&apos;d insert another shortcut here.
if (type == AnimatedUnknown)
    return type;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353101</commentid>
    <comment_count>7</comment_count>
      <attachid>82848</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-17 12:41:47 -0800</bug_when>
    <thetext>Created attachment 82848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354090</commentid>
    <comment_count>8</comment_count>
      <attachid>82848</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-19 00:09:06 -0800</bug_when>
    <thetext>Comment on attachment 82848
Patch

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

Great job, dirk, almost there, I&apos;ll set r+, you can resolve the remaining issues locally.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:133
&gt; +    if (type == AnimatedUnknown)
&gt; +        return AnimatedUnknown;
&gt; +
&gt; +    if (hasTagName(SVGNames::animateColorTag) &amp;&amp; type != AnimatedColor)

Maybe combine into one?

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:153
&gt; +    if (type == AnimatedBoolean
&gt; +        || type == AnimatedEnumeration
&gt; +        || type == AnimatedLengthList
&gt; +        || type == AnimatedNumberList
&gt; +        || type == AnimatedNumberOptionalNumber
&gt; +        || type == AnimatedPreserveAspectRatio
&gt; +        || type == AnimatedRect)
&gt; +        return AnimatedString;
&gt; +    if (type == AnimatedAngle
&gt; +        || type == AnimatedInteger
&gt; +        || type == AnimatedLength)
&gt; +        return AnimatedNumber;
&gt; +    // Animations of transform lists are not allowed for &lt;animate&gt; or &lt;set&gt;
&gt; +    // http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties
&gt; +    if (type == AnimatedTransformList)
&gt; +        return AnimatedUnknown;

I&apos;d love to see a switch() here, w/o a default: implementation, so we can  be sure we always handle all possible property types here.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:190
&gt; -            adjustForInheritance(targetElement, attributeName(), fromNumberString);
&gt; +            adjustForInheritance(targetElement, attributeName().localName(), fromNumberString);

How about making adjustForInheritance take a QName&amp;, that would remove the need to add .localName() in several places.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:340
&gt; +    if (m_animatedAttributeType == AnimatedColor) {

This function would be so much easier, if we had a global switch here, that would call into the various helper methods, to handle AnimateColor, AnimatedNumber etc..
But this would be another cleanup patch I think..

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:158
&gt; +    AffineTransform* transform = targetElement()-&gt;supplementalTransform();

No need to check for targetElement() here, but in calculateAnimatedValue below, why?

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:189
&gt; +    if (targetElement-&gt;renderer())

if (RenderObject* targetRenderer = ...)
    targetRenderer-&gt;setNeeds..

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:144
&gt; +static inline QualifiedName constructQualifiedName(const SVGElement* svgElement, const String&amp; attributeName)

Great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354312</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-20 14:30:06 -0800</bug_when>
    <thetext>Committed r79155: &lt;http://trac.webkit.org/changeset/79155&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82632</attachid>
            <date>2011-02-16 07:31:11 -0800</date>
            <delta_ts>2011-02-16 13:31:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54542-20110216163109.patch</filename>
            <type>text/plain</type>
            <size>40441</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NzA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTEtMDItMTYgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIC0gYW5hbHl6ZSBhdHRyaWJ1dGUgdHlwZSBm
b3IgYW5pbWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDU0MgorCisgICAgICAgIFNWRyBhbmltYXRpb24gLSBhbmFseXplIGF0dHJpYnV0ZSB0
eXBlIGZvciBhbmltYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0NTQyCisKKyAgICAgICAgQW5hbHl6ZSBhbmltYXRlZCBhdHRyaWJ1dGUgdHlw
ZSB0byBkZXRlcm1pbmUgdGhlIGtpbmQgb2YgYW5pbWF0aW9uLiBSZW1vdmVkIGVudW0gUHJvcGVy
dHlUeXBlIGFuZCByZXBsYWNlIGl0CisgICAgICAgIHdpdGggQW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
IGluc3RlYWQuIE1vcmUgY2xlYW51cCBvZiB0aGUgYW5pbWF0aW9uIGNvZGUuCisgICAgICAgIEFk
ZGVkIG1pc3NpbmcgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkgZm9yIFNWR0dFbGVt
ZW50LgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBmdW5jdGlvbmFsaXR5IG9uIHRoZSBhbmltYXRp
b24gY29kZS4gVGhlIGNoYW5nZXMgZm9yIHRoZSA8Zz4tZWxlbWVudCBhZmZlY3QgYW5pbWF0ZVRy
YW5zZm9ybS4gU2FkbHkKKyAgICAgICAgYW5pbWF0ZVRyYW5zZm9ybSBpcyBub3Qgc3VwcG9ydGVk
IGJ5IG91ciBTVkcgYW5pbWF0aW9uIHRlc3Qgc2NyaXB0IGF0IHRoZSBtb21lbnQuIENhbiBzdGls
bCBiZSB0ZXN0ZWQgbWFudWFsbHkKKyAgICAgICAgd2l0aCB0aGUgVzNDIHRlc3Qgc3VpdGUgaW4g
dHJ1bmsuCisKKyAgICAgICAgVGhlIGNoYW5nZSBvbiBTVkdVc2VFbGVtZW50IGdldHMgY292ZXJl
ZCBieSBhbmltYXRlLWVsZW0tMzktdC5zdmcKKworICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0
ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlk
QXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6ZGV0
ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNl
dFRvQmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OmRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlQW5p
bWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2UpOgorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2V5VGltZXMp
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlS2V5VGltZXNG
b3JDYWxjTW9kZVBhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OnNvbHZlRXBzaWxvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVQZXJjZW50RnJvbUtl
eVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjdXJyZW50
VmFsdWVzRnJvbUtleVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVt
ZW50OjpjdXJyZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCk6CisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVu
dC5jcHA6IFNldCBhdHRyaWJ1dGUgdHlwZSBmb3IgeGxpbms6aHJlZiB0byBBbmltYXRlZFN0cmlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCk6CisgICAgICAgICogc3ZnL1NWR0dFbGVtZW50LmNwcDogQWRkZWQgbWlz
c2luZyBmdW5jdGlvbiBmaWxsQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdHRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHR0VsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCk6
CisgICAgICAgICogc3ZnL1NWR0dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwOiBTZXQgYXR0cmlidXRlIHR5cGUgZm9yIHhsaW5rOmhyZWYgdG8gQW5pbWF0ZWRTdHJp
bmcuCisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpmaWxsQXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXApOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlv
bnMpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoKKwogMjAxMS0w
Mi0xNiAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA3ODU1MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRl
ICJTVkdQYXRoU2VnTGlzdC5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgogI2luY2x1ZGUg
IlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKQEAgLTQ1LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBT
VkdBbmltYXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKLSAgICAsIG1fcHJvcGVydHlUeXBlKFN0cmluZ1Byb3BlcnR5KQor
ICAgICwgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUoQW5pbWF0ZWRTdHJpbmcpCiAgICAgLCBtX2Zy
b21OdW1iZXIoMCkKICAgICAsIG1fdG9OdW1iZXIoMCkKICAgICAsIG1fYW5pbWF0ZWROdW1iZXIo
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKQEAgLTExMywyMSArMTE0LDQ5IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RGb3JJbmhlcml0YW5jZSgKICAgICAgICAgdmFsdWUg
PSBjb21wdXRlZFN0eWxlKHN2Z1BhcmVudCktPmdldFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJ
RChhdHRyaWJ1dGVOYW1lKSk7CiB9CiAKLVNWR0FuaW1hdGVFbGVtZW50OjpQcm9wZXJ0eVR5cGUg
U1ZHQW5pbWF0ZUVsZW1lbnQ6OmRldGVybWluZVByb3BlcnR5VHlwZShjb25zdCBTdHJpbmcmIGF0
dHJpYnV0ZSkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRl
VHlwZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYWxsb3cgYW5pbWF0
aW9uIG9mIGF0dHJpYnV0ZSB0eXBlcyBvdGhlciB0aGFuIEFuaW1hdGVkQ29sb3IgZm9yIDxhbmlt
YXRlQ29sb3I+LgotICAgIGlmIChoYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlQ29sb3JUYWcp
KQotICAgICAgICByZXR1cm4gQ29sb3JQcm9wZXJ0eTsKLQotICAgIC8vIEZJWE1FOiBOb3cgdGhh
dCB3ZSBoYXZlIGEgZnVsbCBwcm9wZXJ0eSB0YWJsZSB3ZSBuZWVkIGEgbW9yZSBncmFudWxhciB0
eXBlIHNwZWNpZmljIGFuaW1hdGlvbi4KLSAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgdHlwZSA9
IHRhcmdldEVsZW1lbnQoKS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRyaWJ1dGUoUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgYXR0cmlidXRlLCBudWxsQXRvbSkpOwotICAgIGlmICh0eXBlID09
IEFuaW1hdGVkQ29sb3IpCi0gICAgICAgIHJldHVybiBDb2xvclByb3BlcnR5OwotICAgIGlmICh0
eXBlID09IEFuaW1hdGVkUGF0aCkKLSAgICAgICAgcmV0dXJuIFBhdGhQcm9wZXJ0eTsKLSAgICBp
ZiAodHlwZSA9PSBBbmltYXRlZFBvaW50cykKLSAgICAgICAgcmV0dXJuIFBvaW50c1Byb3BlcnR5
OwotICAgIHJldHVybiBOdW1iZXJQcm9wZXJ0eTsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBkZXRlcm1pbmVBbmltYXRlZEF0
dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCkgIT0gQW5pbWF0ZWRVbmtub3duOworfQorCitBbmlt
YXRlZEF0dHJpYnV0ZVR5cGUgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmRldGVybWluZUFuaW1hdGVkQXR0
cmlidXRlVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBjb25zdAoreworICAgIEFTU0VS
VCh0YXJnZXRFbGVtZW50KTsKKyAgICAKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgeGxpbmtIcmVmLCAoInhsaW5rOmhyZWYiKSk7CisKKyAgICAvLyB4bGluazpo
cmVmIGlzIHRoZSBvbmx5IGFuaW1hdGVkIGF0dHJpYnV0ZSBvdXRzaWRlIG9mIFNWRy4KKyAgICBj
b25zdCBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKKyAgICBR
dWFsaWZpZWROYW1lIGF0dHJOYW1lKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZU5h
bWUsIG51bGxBdG9tKSk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0geGxpbmtIcmVmKQorICAg
ICAgICBhdHRyTmFtZSA9IFhMaW5rTmFtZXM6OmhyZWZBdHRyOworCisgICAgQW5pbWF0ZWRBdHRy
aWJ1dGVUeXBlIHR5cGUgPSB0YXJnZXRFbGVtZW50LT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0
dHJpYnV0ZShhdHRyTmFtZSk7CisgICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVD
b2xvclRhZykgJiYgdHlwZSAhPSBBbmltYXRlZENvbG9yKQorICAgICAgICByZXR1cm4gQW5pbWF0
ZWRVbmtub3duOworICAgIAorICAgIGlmICh0eXBlID09IEFuaW1hdGVkQm9vbGVhbgorICAgICAg
ICB8fCB0eXBlID09IEFuaW1hdGVkRW51bWVyYXRpb24KKyAgICAgICAgfHwgdHlwZSA9PSBBbmlt
YXRlZExlbmd0aExpc3QKKyAgICAgICAgfHwgdHlwZSA9PSBBbmltYXRlZE51bWJlckxpc3QKKyAg
ICAgICAgfHwgdHlwZSA9PSBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyCisgICAgICAgIHx8
IHR5cGUgPT0gQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvCisgICAgICAgIHx8IHR5cGUgPT0g
QW5pbWF0ZWRSZWN0KQorICAgICAgICByZXR1cm4gQW5pbWF0ZWRTdHJpbmc7CisgICAgaWYgKHR5
cGUgPT0gQW5pbWF0ZWRBbmdsZQorICAgICAgICB8fCB0eXBlID09IEFuaW1hdGVkSW50ZWdlcgor
ICAgICAgICB8fCB0eXBlID09IEFuaW1hdGVkTGVuZ3RoKQorICAgICAgICByZXR1cm4gQW5pbWF0
ZWROdW1iZXI7CisgICAgLy8gQW5pbWF0aW9ucyBvZiB0cmFuc2Zvcm0gbGlzdHMgYXJlIG5vdCBh
bGxvd2VkIGZvciA8YW5pbWF0ZT4gb3IgPHNldD4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9TVkcvYW5pbWF0ZS5odG1sI0FuaW1hdGlvbkF0dHJpYnV0ZXNBbmRQcm9wZXJ0aWVzCisgICAg
aWYgKHR5cGUgPT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KQorICAgICAgICByZXR1cm4gQW5pbWF0
ZWRVbmtub3duOworCisgICAgcmV0dXJuIHR5cGU7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1l
bnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVw
ZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKQEAgLTE1Miw5ICsxODEsOSBAQCB2
b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgICAgIHJldHVybjsK
ICAgICBTVkdBbmltYXRlRWxlbWVudCogcmVzdWx0cyA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVF
bGVtZW50Kj4ocmVzdWx0RWxlbWVudCk7CiAgICAgLy8gQ2FuJ3QgYWNjdW11bGF0ZSBvdmVyIGEg
c3RyaW5nIHByb3BlcnR5LgotICAgIGlmIChyZXN1bHRzLT5tX3Byb3BlcnR5VHlwZSA9PSBTdHJp
bmdQcm9wZXJ0eSAmJiBtX3Byb3BlcnR5VHlwZSAhPSBTdHJpbmdQcm9wZXJ0eSkKKyAgICBpZiAo
cmVzdWx0cy0+bV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRTdHJpbmcgJiYgbV9h
bmltYXRlZEF0dHJpYnV0ZVR5cGUgIT0gQW5pbWF0ZWRTdHJpbmcpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gTnVtYmVyUHJvcGVydHkpIHsKKyAgICBpZiAobV9h
bmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWROdW1iZXIpIHsKICAgICAgICAgLy8gVG8g
YW5pbWF0aW9uIHVzZXMgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBsb3dlciBwcmlvcml0eSBhbmlt
YXRpb25zIGFzIHRoZSBiYXNlIHZhbHVlLgogICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBU
b0FuaW1hdGlvbikKICAgICAgICAgICAgIG1fZnJvbU51bWJlciA9IHJlc3VsdHMtPm1fYW5pbWF0
ZWROdW1iZXI7CkBAIC0xODgsNyArMjE3LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2Fs
Y3VsYXRlQW5pbWF0ZQogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZE51bWJlciA9IG51
bWJlcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCi0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09
IENvbG9yUHJvcGVydHkpIHsKKyAgICBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5p
bWF0ZWRDb2xvcikgewogICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikK
ICAgICAgICAgICAgIG1fZnJvbUNvbG9yID0gcmVzdWx0cy0+bV9hbmltYXRlZENvbG9yOwogCkBA
IC0yMjEsNyArMjUwLDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0
ZQogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZENvbG9yID0gY29sb3I7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFBhdGhQcm9wZXJ0eSkg
eworICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsKICAg
ICAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pIHsKICAgICAgICAgICAgIEFT
U0VSVChyZXN1bHRzLT5tX2FuaW1hdGVkUGF0aFBvaW50ZXIpOwogICAgICAgICAgICAgbV9mcm9t
UGF0aCA9IHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlci0+Y29weSgpOwpAQCAtMjMwLDcg
KzI1OSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICAg
ICAgICAgIEFTU0VSVChtX2Zyb21QYXRoKTsKICAgICAgICAgICAgIEFTU0VSVChwZXJjZW50YWdl
ID49IDApOwogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZFBhdGhQb2ludGVyID0gbV9m
cm9tUGF0aC5nZXQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50YWdlID09IDEuZikgewor
ICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPT0gMSkgewogICAgICAgICAgICAgQVNTRVJU
KG1fdG9QYXRoKTsKICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlciA9
IG1fdG9QYXRoLmdldCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjQ4LDE2ICsyNzcsMTYgQEAg
dm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAgICAgICAg
IEFTU0VSVChtX2Zyb21QYXRoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQobV90b1BhdGgpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0cy0+bV9hbmltYXRlZFBhdGgpOwotICAgICAg
ICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlciA9ICgoYW5pbWF0aW9uTW9k
ZSA9PSBGcm9tVG9BbmltYXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1v
ZGUgPT0gVG9BbmltYXRpb24gfHwgcGVyY2VudGFnZSA9PSAxLjBmKSAKKyAgICAgICAgICAgICAg
ICByZXN1bHRzLT5tX2FuaW1hdGVkUGF0aFBvaW50ZXIgPSAoKGFuaW1hdGlvbk1vZGUgPT0gRnJv
bVRvQW5pbWF0aW9uICYmIHBlcmNlbnRhZ2UgPiAwLjVmKSB8fCBhbmltYXRpb25Nb2RlID09IFRv
QW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMSkgCiAgICAgICAgICAgICAgICAgICAgID8gbV90
b1BhdGguZ2V0KCkgOiBtX2Zyb21QYXRoLmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFBvaW50
c1Byb3BlcnR5KSB7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVk
UG9pbnRzKSB7CiAgICAgICAgIGlmICghcGVyY2VudGFnZSkKICAgICAgICAgICAgIHJlc3VsdHMt
Pm1fYW5pbWF0ZWRQb2ludHMgPSBtX2Zyb21Qb2ludHM7Ci0gICAgICAgIGVsc2UgaWYgKHBlcmNl
bnRhZ2UgPT0gMS5mKQorICAgICAgICBlbHNlIGlmIChwZXJjZW50YWdlID09IDEpCiAgICAgICAg
ICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUG9pbnRzID0gbV90b1BvaW50czsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBpZiAoIW1fZnJvbVBvaW50cy5pc0VtcHR5KCkgJiYgIW1fdG9Qb2lu
dHMuaXNFbXB0eSgpKQpAQCAtMjY2LDcgKzI5NSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6
OmNhbGN1bGF0ZUFuaW1hdGUKICAgICAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUG9p
bnRzLmNsZWFyKCk7CiAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gZGlzY3JldGUgYW5pbWF0
aW9uIGlmIHRoZSBwb2ludHMgYXJlIG5vdCBjb21wYXRpYmxlCiAgICAgICAgICAgICBpZiAocmVz
dWx0cy0+bV9hbmltYXRlZFBvaW50cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0
cy0+bV9hbmltYXRlZFBvaW50cyA9ICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24g
JiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwg
cGVyY2VudGFnZSA9PSAxLjBmKSAKKyAgICAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVk
UG9pbnRzID0gKChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJjZW50YWdl
ID4gMC41ZikgfHwgYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbiB8fCBwZXJjZW50YWdlID09
IDEpIAogICAgICAgICAgICAgICAgICAgICA/IG1fdG9Qb2ludHMgOiBtX2Zyb21Qb2ludHM7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDcgKzMxMiw3IEBAIHZvaWQgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdHMt
Pm1fYW5pbWF0ZWRTdHJpbmcgPSBtX2Zyb21TdHJpbmc7CiAgICAgLy8gSGlnaGVyIHByaW9yaXR5
IHJlcGxhY2UgYW5pbWF0aW9uIG92ZXJyaWRlcyBhbnkgYWRkaXRpdmUgcmVzdWx0cyBzbyBmYXIu
Ci0gICAgcmVzdWx0cy0+bV9wcm9wZXJ0eVR5cGUgPSBTdHJpbmdQcm9wZXJ0eTsKKyAgICByZXN1
bHRzLT5tX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9IEFuaW1hdGVkU3RyaW5nOwogfQogCiBzdGF0
aWMgYm9vbCBpbmhlcml0c0Zyb21Qcm9wZXJ0eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBj
b25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0zMTEs
OCArMzQwLDggQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogICAg
IG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9IGluaGVyaXRzRnJvbVByb3BlcnR5KHRhcmdldEVsZW1l
bnQsIGF0dHJpYnV0ZU5hbWUoKSwgdG9TdHJpbmcpID8gSW5oZXJpdFZhbHVlIDogUmVndWxhclBy
b3BlcnR5VmFsdWU7CiAKICAgICAvLyBGSVhNRTogTmVlZHMgbW9yZSBzb2xpZCB3YXkgZGV0ZXJt
aW5lIHRhcmdldCBhdHRyaWJ1dGUgdHlwZS4KLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWlu
ZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9
PSBDb2xvclByb3BlcnR5KSB7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1p
bmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0
ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgYm9vbCBmcm9tSXND
dXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcpOwog
ICAgICAgICBib29sIHRvSXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENv
bG9yKHRvU3RyaW5nKTsKICAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRDb2xvcikKQEAgLTMyNywx
NCArMzU2LDE0IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKICAg
ICAgICAgYm9vbCB0b0lzVmFsaWQgPSBtX3RvQ29sb3IuaXNWYWxpZCgpIHx8IHRvSXNDdXJyZW50
Q29sb3IgfHwgbV90b1Byb3BlcnR5VmFsdWVUeXBlID09IEluaGVyaXRWYWx1ZTsKICAgICAgICAg
aWYgKChmcm9tSXNWYWxpZCAmJiB0b0lzVmFsaWQpIHx8ICh0b0lzVmFsaWQgJiYgYW5pbWF0aW9u
TW9kZSgpID09IFRvQW5pbWF0aW9uKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gTnVtYmVyUHJvcGVydHkpIHsKKyAgICB9IGVsc2Ug
aWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAg
IG1fbnVtYmVyVW5pdCA9IFN0cmluZygpOwogICAgICAgICBpZiAocGFyc2VOdW1iZXJWYWx1ZUFu
ZFVuaXQodG9TdHJpbmcsIG1fdG9OdW1iZXIsIG1fbnVtYmVyVW5pdCkpIHsKICAgICAgICAgICAg
IC8vIEZvciB0by1hbmltYXRpb25zIHRoZSBmcm9tIG51bWJlciBpcyBjYWxjdWxhdGVkIGxhdGVy
CiAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uIHx8IHBhcnNl
TnVtYmVyVmFsdWVBbmRVbml0KGZyb21TdHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAobV9wcm9wZXJ0eVR5cGUgPT0gUGF0aFByb3BlcnR5KSB7CisgICAgfSBlbHNlIGlmIChtX2Fu
aW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsKICAgICAgICAgU1ZHUGF0aFBh
cnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAg
ICAgICBpZiAoZmFjdG9yeS0+YnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcodG9TdHJp
bmcsIG1fdG9QYXRoLCBVbmFsdGVyZWRQYXJzaW5nKSkgewogICAgICAgICAgICAgLy8gRm9yIHRv
LWFuaW1hdGlvbnMgdGhlIGZyb20gbnVtYmVyIGlzIGNhbGN1bGF0ZWQgbGF0ZXIKQEAgLTM0Myw3
ICszNzIsNyBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAgICAg
ICAgIH0KICAgICAgICAgbV9mcm9tUGF0aC5jbGVhcigpOwogICAgICAgICBtX3RvUGF0aC5jbGVh
cigpOwotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUG9pbnRzUHJvcGVydHkpIHsK
KyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUG9pbnRz
KSB7CiAgICAgICAgIG1fZnJvbVBvaW50cy5jbGVhcigpOwogICAgICAgICBpZiAocG9pbnRzTGlz
dEZyb21TVkdEYXRhKG1fZnJvbVBvaW50cywgZnJvbVN0cmluZykpIHsKICAgICAgICAgICAgIG1f
dG9Qb2ludHMuY2xlYXIoKTsKQEAgLTM1Myw3ICszODIsNyBAQCBib29sIFNWR0FuaW1hdGVFbGVt
ZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAgICAgfQogICAgIG1fZnJvbVN0cmluZyA9IGZyb21TdHJp
bmc7CiAgICAgbV90b1N0cmluZyA9IHRvU3RyaW5nOwotICAgIG1fcHJvcGVydHlUeXBlID0gU3Ry
aW5nUHJvcGVydHk7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBBbmltYXRlZFN0cmlu
ZzsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzY2LDggKzM5NSw4IEBAIGJvb2wgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKICAgICBtX3RvUHJvcGVydHlWYWx1ZVR5cGUg
PSBpbmhlcml0c0Zyb21Qcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGJ5
U3RyaW5nKSA/IEluaGVyaXRWYWx1ZSA6IFJlZ3VsYXJQcm9wZXJ0eVZhbHVlOwogCiAgICAgQVNT
RVJUKCFoYXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpKTsKLSAgICBtX3Byb3BlcnR5VHlwZSA9
IGRldGVybWluZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3Bl
cnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUg
PSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYg
KG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgYm9v
bCBmcm9tSXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKGZyb21T
dHJpbmcpOwogICAgICAgICBib29sIGJ5SXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlz
Q3VycmVudENvbG9yKGJ5U3RyaW5nKTsKICAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRDb2xvcikK
QEAgLTM5NiwxNiArNDI1LDE4IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZy
b21BbmQKIAogdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBT
dHJpbmcmIGJhc2VTdHJpbmcpCiB7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRo
aXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CiAgICAgbV9h
bmltYXRlZFN0cmluZyA9IGJhc2VTdHJpbmc7Ci0gICAgUHJvcGVydHlUeXBlIGxhc3RUeXBlID0g
bV9wcm9wZXJ0eVR5cGU7Ci0gICAgbV9wcm9wZXJ0eVR5cGUgPSBkZXRlcm1pbmVQcm9wZXJ0eVR5
cGUoYXR0cmlidXRlTmFtZSgpKTsKLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9w
ZXJ0eSkgeworICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBsYXN0VHlwZSA9IG1fYW5pbWF0ZWRB
dHRyaWJ1dGVUeXBlOworICAgIG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID0gZGV0ZXJtaW5lQW5p
bWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQpOworICAgIGlmIChtX2FuaW1hdGVkQXR0
cmlidXRlVHlwZSA9PSBBbmltYXRlZENvbG9yKSB7CiAgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9
IGJhc2VTdHJpbmcuaXNFbXB0eSgpID8gQ29sb3IoKSA6IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhiYXNlU3RyaW5nKTsKICAgICAgICAgaWYgKGlzQ29udHJpYnV0aW5nKGVsYXBz
ZWQoKSkpIHsKLSAgICAgICAgICAgIG1fcHJvcGVydHlUeXBlID0gbGFzdFR5cGU7CisgICAgICAg
ICAgICBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9IGxhc3RUeXBlOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQ
cm9wZXJ0eSkgeworICAgIH0gZWxzZSBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5p
bWF0ZWROdW1iZXIpIHsKICAgICAgICAgaWYgKGJhc2VTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBtX2FuaW1hdGVkTnVtYmVyID0gMDsKICAgICAgICAgICAgIG1fbnVtYmVyVW5pdCA9
IFN0cmluZygpOwpAQCAtNDEzLDI3ICs0NDQsMjcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6
cmVzZXRUb0Jhc2VWYWx1ZQogICAgICAgICB9CiAgICAgICAgIGlmIChwYXJzZU51bWJlclZhbHVl
QW5kVW5pdChiYXNlU3RyaW5nLCBtX2FuaW1hdGVkTnVtYmVyLCBtX251bWJlclVuaXQpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUGF0aFBy
b3BlcnR5KSB7CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmlt
YXRlZFBhdGgpIHsKICAgICAgICAgbV9hbmltYXRlZFBhdGguY2xlYXIoKTsKICAgICAgICAgU1ZH
UGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigp
OwogICAgICAgICBmYWN0b3J5LT5idWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhiYXNl
U3RyaW5nLCBtX2FuaW1hdGVkUGF0aCwgVW5hbHRlcmVkUGFyc2luZyk7CiAgICAgICAgIG1fYW5p
bWF0ZWRQYXRoUG9pbnRlciA9IG1fYW5pbWF0ZWRQYXRoLmdldCgpOwogICAgICAgICByZXR1cm47
Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBQb2ludHNQcm9wZXJ0eSkgeworICAg
IH0gZWxzZSBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRQb2ludHMpIHsK
ICAgICAgICAgbV9hbmltYXRlZFBvaW50cy5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIG1fcHJvcGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7CisgICAgbV9hbmltYXRlZEF0
dHJpYnV0ZVR5cGUgPSBBbmltYXRlZFN0cmluZzsKIH0KICAgICAKIHZvaWQgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKIHsKICAgICBTdHJpbmcgdmFsdWVUb0FwcGx5
OwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KQorICAgIGlmIChtX2Fu
aW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZENvbG9yKQogICAgICAgICB2YWx1ZVRvQXBw
bHkgPSBtX2FuaW1hdGVkQ29sb3IubmFtZSgpOwotICAgIGVsc2UgaWYgKG1fcHJvcGVydHlUeXBl
ID09IE51bWJlclByb3BlcnR5KQorICAgIGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
ID09IEFuaW1hdGVkTnVtYmVyKQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBTdHJpbmc6Om51bWJl
cihtX2FuaW1hdGVkTnVtYmVyKSArIG1fbnVtYmVyVW5pdDsKLSAgICBlbHNlIGlmIChtX3Byb3Bl
cnR5VHlwZSA9PSBQYXRoUHJvcGVydHkpIHsKKyAgICBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmli
dXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsKICAgICAgICAgaWYgKCFtX2FuaW1hdGVkUGF0aFBv
aW50ZXIgfHwgbV9hbmltYXRlZFBhdGhQb2ludGVyLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICB2
YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOwogICAgICAgICBlbHNlIHsKQEAgLTQ0NCw3
ICs0NzUsNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3VsdHNUb1RhCiAgICAg
ICAgICAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0
b3J5OjpzZWxmKCk7CiAgICAgICAgICAgICBmYWN0b3J5LT5idWlsZFN0cmluZ0Zyb21CeXRlU3Ry
ZWFtKG1fYW5pbWF0ZWRQYXRoUG9pbnRlciwgdmFsdWVUb0FwcGx5LCBVbmFsdGVyZWRQYXJzaW5n
KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUG9pbnRzUHJv
cGVydHkpCisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRl
ZFBvaW50cykKICAgICAgICAgdmFsdWVUb0FwcGx5ID0gbV9hbmltYXRlZFBvaW50cy5pc0VtcHR5
KCkgPyBtX2FuaW1hdGVkU3RyaW5nIDogbV9hbmltYXRlZFBvaW50cy52YWx1ZUFzU3RyaW5nKCk7
CiAgICAgZWxzZQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOwpAQCAt
NDU0LDMxICs0ODUsMzEgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9U
YQogICAgIAogZmxvYXQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAgICBtX3By
b3BlcnR5VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwotICAg
IGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgIFNWR0VsZW1lbnQq
IHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRF
bGVtZW50KQorICAgICAgICByZXR1cm4gLTE7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUg
PSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYg
KG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAgIGRv
dWJsZSBmcm9tOwogICAgICAgICBkb3VibGUgdG87CiAgICAgICAgIFN0cmluZyB1bml0OwogICAg
ICAgICBpZiAoIXBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZyb21TdHJpbmcsIGZyb20sIHVuaXQp
KQotICAgICAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
ICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQodG9TdHJpbmcsIHRvLCB1bml0KSkKLSAg
ICAgICAgICAgIHJldHVybiAtMS5mOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBy
ZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChmYWJzKHRvIC0gZnJvbSkpOwogICAgIH0KLSAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAgIGlmIChtX2FuaW1h
dGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZENvbG9yKSB7CiAgICAgICAgIENvbG9yIGZyb20g
PSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJvbVN0cmluZyk7CiAgICAgICAg
IGlmICghZnJvbS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKICAgICAgICAgQ29sb3IgdG8gPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdC
Q29sb3JTdHJpbmcodG9TdHJpbmcpOwogICAgICAgICBpZiAoIXRvLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiAtMS5mOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1
cm4gQ29sb3JEaXN0YW5jZShmcm9tLCB0bykuZGlzdGFuY2UoKTsKICAgICB9Ci0gICAgcmV0dXJu
IC0xLmY7CisgICAgcmV0dXJuIC0xOwogfQogICAgCiB9Ci0KLS8vIHZpbTp0cz00Om5vZXQKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVs
ZW1lbnQuaAkocmV2aXNpb24gNzg1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgQ3VycmVudENvbG9yVmFsdWUsCiAgICAgICAgIEluaGVyaXRWYWx1ZQogICAgIH07Ci0g
ICAgZW51bSBQcm9wZXJ0eVR5cGUgeyBOdW1iZXJQcm9wZXJ0eSwgQ29sb3JQcm9wZXJ0eSwgU3Ry
aW5nUHJvcGVydHksIFBhdGhQcm9wZXJ0eSwgUG9pbnRzUHJvcGVydHkgfTsKLSAgICBQcm9wZXJ0
eVR5cGUgZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlKSBjb25z
dDsKLSAgICBQcm9wZXJ0eVR5cGUgbV9wcm9wZXJ0eVR5cGU7CisgICAgCisgICAgdmlydHVhbCBi
b29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0OworICAgIEFuaW1hdGVkQXR0cmlidXRl
VHlwZSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCopIGNvbnN0Owor
ICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZTsKIAogICAg
IEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGU7CiAgICAg
QW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX3RvUHJvcGVydHlWYWx1ZVR5cGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlz
aW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTQgKzUzLDE3IEBAIFBhc3NSZWZQdHI8U1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ+IFNWR0EKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFT
VkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQo
KTsKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFdlIGRvbid0IGhhdmUgYSBzcGVjaWFsIGF0dHJpYnV0ZSBuYW1lIHRvIHZlcmlmeSB0aGUg
YW5pbWF0aW9uIHR5cGUuIENoZWNrIHRoZSBlbGVtZW50IG5hbWUgaW5zdGVhZC4KICAgICBpZiAo
IXRhcmdldEVsZW1lbnQtPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpICYmICF0YXJnZXRFbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIC8vIFNwZWM6IFNWRyAxLjEgc2VjdGlvbiAxOS4yLjE1CisgICAgLy8gRklYTUU6IHN2Z1Rh
ZyBpcyBtaXNzaW5nLiBOZWVkcyB0byBiZSBjaGVja2VkLCBpZiB0cmFuc2Zvcm1pbmcgPHN2Zz4g
Y291bGQgY2F1c2UgcHJvYmxlbXMuCiAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUo
Z1RhZykKICAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShkZWZzVGFnKQogICAg
ICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKHVzZVRhZykKQEAgLTEzNCwxMSArMTM3
LDExIEBAIHN0YXRpYyBib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICBpZiAo
IXNraXBPcHRpb25hbFNwYWNlcyhjdXIsIGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBmbG9hdCB4ID0gMC4wZjsKKyAgICBmbG9hdCB4ID0gMDsKICAgICBpZiAoIXBhcnNl
TnVtYmVyKGN1ciwgZW5kLCB4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGZs
b2F0IHkgPSAwLjBmOworICAgIGZsb2F0IHkgPSAwOwogICAgIGlmICghcGFyc2VOdW1iZXIoY3Vy
LCBlbmQsIHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0xNTAsMTAgKzE1Myw5
IEBAIHN0YXRpYyBib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICAKIHZvaWQg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJikK
IHsKLSAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdl
dEVsZW1lbnQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldC0+c3Vw
cGxlbWVudGFsVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm0gPSB0
YXJnZXRFbGVtZW50KCktPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwogICAgIGlmICghdHJhbnNm
b3JtKQogICAgICAgICByZXR1cm47CiAgICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKQEAg
LTE3NywxNSArMTc5LDE1IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0
ZUYKIAogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1
ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCwgU1ZHU01JTEVsZW1lbnQqKQogewotICAgIFNW
R0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKLSAgICBpZiAoIXRhcmdldCkKKyAg
ICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAg
IGlmICghdGFyZ2V0RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIEFmZmluZVRyYW5zZm9y
bSogdHJhbnNmb3JtID0gdGFyZ2V0LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldEVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5z
Zm9ybSgpOwogICAgIGlmICghdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
dGFyZ2V0LT5yZW5kZXJlcigpKQotICAgICAgICB0YXJnZXQtPnJlbmRlcmVyKCktPnNldE5lZWRz
VHJhbnNmb3JtVXBkYXRlKCk7CisgICAgaWYgKHRhcmdldEVsZW1lbnQtPnJlbmRlcmVyKCkpCisg
ICAgICAgIHRhcmdldEVsZW1lbnQtPnJlbmRlcmVyKCktPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRl
KCk7CiAKICAgICBpZiAoIWlzQWRkaXRpdmUoKSkKICAgICAgICAgdHJhbnNmb3JtLT5tYWtlSWRl
bnRpdHkoKTsKQEAgLTIwNCw3ICsyMDYsNyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpjYWxjdWxhdGVBCiAgICAgICAgICAgICBpZiAocm90YXRlTW9kZSA9PSBSb3RhdGVBdXRvIHx8
IHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2UpIHsKICAgICAgICAgICAgICAgICBmbG9h
dCBhbmdsZSA9IHBhdGgubm9ybWFsQW5nbGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOwog
ICAgICAgICAgICAgICAgIGlmIChyb3RhdGVNb2RlID09IFJvdGF0ZUF1dG9SZXZlcnNlKQotICAg
ICAgICAgICAgICAgICAgICBhbmdsZSArPSAxODAuZjsKKyAgICAgICAgICAgICAgICAgICAgYW5n
bGUgKz0gMTgwOwogICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+cm90YXRlKGFuZ2xlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjUwLDEzICsyNTIsMTIgQEAgZmxvYXQgU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZQogICAgIEZsb2F0UG9pbnQgZnJvbTsKICAgICBG
bG9hdFBvaW50IHRvOwogICAgIGlmICghcGFyc2VQb2ludChmcm9tU3RyaW5nLCBmcm9tKSkKLSAg
ICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIXBhcnNlUG9p
bnQodG9TdHJpbmcsIHRvKSkKLSAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAt
MTsKICAgICBGbG9hdFNpemUgZGlmZiA9IHRvIC0gZnJvbTsKICAgICByZXR1cm4gc3FydGYoZGlm
Zi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkp
OwogfQogCiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDc4NTUxKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdBbmltYXRlTW90aW9u
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0
dHJpYnV0ZVR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKIApAQCAtNzMsNSArNzMsMyBAQCBwcml2YXRlOgogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNWR19BTklNQVRJT04pCiAjZW5kaWYgLy8gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnRfaAotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NTUxKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksMTQgKzU5LDI1IEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ+IFMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0CiB7CiAgICAgU1ZHRWxlbWVudCog
dGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKLSAgICByZXR1cm4gU1ZHQW5p
bWF0aW9uRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKQotICAgICAgICAmJiAodGFyZ2V0RWxlbWVu
dC0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkKLSAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6dGV4dFRhZykKLSAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWcpCi0gICAgICAgIHx8IHRhcmdldEVs
ZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnKSk7CisgICAgaWYg
KCF0YXJnZXRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBBbmltYXRl
ZFRyYW5zZm9ybUxpc3Q7Cit9CisKK0FuaW1hdGVkQXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6ZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQq
IHRhcmdldEVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworICAg
IAorICAgIC8vIEp1c3QgdHJhbnNmb3JtIGxpc3RzIGNhbiBiZSBhbmltYXRlZCB3aXRoIDxhbmlt
YXRlVHJhbnNmb3JtPgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9hbmltYXRlLmh0
bWwjQW5pbWF0aW9uQXR0cmlidXRlc0FuZFByb3BlcnRpZXMKKyAgICBpZiAodGFyZ2V0RWxlbWVu
dC0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgYXR0cmlidXRlTmFtZSgpLCBudWxsQXRvbSkpICE9IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCkK
KyAgICAgICAgcmV0dXJuIEFuaW1hdGVkVW5rbm93bjsKKworICAgIHJldHVybiBBbmltYXRlZFRy
YW5zZm9ybUxpc3Q7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKQEAgLTEwMiwyNiArMTEzLDI3IEBAIHN0
YXRpYyBTVkdUcmFuc2Zvcm1MaXN0KiB0cmFuc2Zvcm1MaXN0Rm8KICAgICAKIHZvaWQgU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJiBiYXNl
VmFsdWUpCiB7Ci0gICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQorICAgIFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVt
ZW50IHx8IGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBB
bmltYXRlZFVua25vd24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0YXJnZXRFbGVtZW50
KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmxpbmVhckdyYWRpZW50VGFnKSB8fCB0YXJnZXRFbGVt
ZW50KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnKSkgewotICAgICAg
ICB0YXJnZXRFbGVtZW50KCktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zv
cm1BdHRyLCBiYXNlVmFsdWUuaXNFbXB0eSgpID8gIm1hdHJpeCgxIDAgMCAxIDAgMCkiIDogYmFz
ZVZhbHVlKTsKKyAgICBpZiAodGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bGlu
ZWFyR3JhZGllbnRUYWcpIHx8IHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJh
ZGlhbEdyYWRpZW50VGFnKSkgeworICAgICAgICB0YXJnZXRFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0ciwgYmFzZVZhbHVlLmlzRW1wdHkoKSA/ICJt
YXRyaXgoMSAwIDAgMSAwIDApIiA6IGJhc2VWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoYmFzZVZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoU1ZHVHJhbnNm
b3JtTGlzdCogbGlzdCA9IHRyYW5zZm9ybUxpc3RGb3IodGFyZ2V0RWxlbWVudCgpKSkKKyAgICAg
ICAgaWYgKFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QgPSB0cmFuc2Zvcm1MaXN0Rm9yKHRhcmdldEVs
ZW1lbnQpKQogICAgICAgICAgICAgbGlzdC0+Y2xlYXIoKTsKICAgICB9IGVsc2UKLSAgICAgICAg
dGFyZ2V0RWxlbWVudCgpLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIGJh
c2VWYWx1ZSk7CisgICAgICAgIHRhcmdldEVsZW1lbnQtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6
dHJhbnNmb3JtQXR0ciwgYmFzZVZhbHVlKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25l
ZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KQordm9pZCBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdl
LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KikKIHsKLSAgICBpZiAoIWhhc1ZhbGlk
VGFyZ2V0KCkpCisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVs
ZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgZGV0ZXJtaW5lQW5pbWF0ZWRBdHRy
aWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQpID09IEFuaW1hdGVkVW5rbm93bikKICAgICAgICAgcmV0
dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSByZXN1bHRFbGVtZW50LT50YXJn
ZXRFbGVtZW50KCk7CiAgICAgU1ZHVHJhbnNmb3JtTGlzdCogdHJhbnNmb3JtTGlzdCA9IHRyYW5z
Zm9ybUxpc3RGb3IodGFyZ2V0RWxlbWVudCk7CiAgICAgQVNTRVJUKHRyYW5zZm9ybUxpc3QpOwog
CkBAIC0xNDYsNyArMTU4LDYgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2Fs
Y3VsYQogCiBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5k
QnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5n
KQogewotCiAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShmcm9tU3Ry
aW5nKTsKICAgICBpZiAoIW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE2OCwxMyArMTc5LDExIEBAIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDoKICAgICAKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFw
cGx5UmVzdWx0c1RvVGFyZ2V0KCkKIHsKLSAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAvLyBXZSBhY2N1bXVsYXRlIHRvIHRoZSB0YXJnZXQgZWxlbWVudCB0
cmFuc2Zvcm0gbGlzdCBzbyB0aGVyZSBpcyBub3QgbXVjaCB0byBkbyBoZXJlLgogICAgIFNWR0Vs
ZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgaWYgKCF0
YXJnZXRFbGVtZW50KQorICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCBkZXRlcm1pbmVBbmltYXRl
ZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCkgPT0gQW5pbWF0ZWRVbmtub3duKQogICAgICAg
ICByZXR1cm47CiAKKyAgICAvLyBXZSBhY2N1bXVsYXRlIHRvIHRoZSB0YXJnZXQgZWxlbWVudCB0
cmFuc2Zvcm0gbGlzdCBzbyB0aGVyZSBpcyBub3QgbXVjaCB0byBkbyBoZXJlLgogICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGFyZ2V0RWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAg
ICAgICByZW5kZXJlci0+c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKTsKICAgICAgICAgUmVuZGVy
U1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihy
ZW5kZXJlcik7CkBAIC0yMTAsMTAgKzIxOSwxMCBAQCBmbG9hdCBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6Y2FsY3VsCiAgICAgLy8gaXMgcGFjZWQgc2VwYXJhdGVseS4gVG8gaW1wbGVtZW50
IHRoaXMgd2UgbmVlZCB0byB0cmVhdCBlYWNoIGNvbXBvbmVudCBhcyBpbmRpdmlkdWFsIGFuaW1h
dGlvbiBldmVyeXdoZXJlLgogICAgIFNWR1RyYW5zZm9ybSBmcm9tID0gcGFyc2VUcmFuc2Zvcm1W
YWx1ZShmcm9tU3RyaW5nKTsKICAgICBpZiAoIWZyb20uaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm4gLTEuZjsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIFNWR1RyYW5zZm9ybSB0byA9IHBhcnNl
VHJhbnNmb3JtVmFsdWUodG9TdHJpbmcpOwogICAgIGlmICghdG8uaXNWYWxpZCgpIHx8IGZyb20u
dHlwZSgpICE9IHRvLnR5cGUoKSkKLSAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVy
biAtMTsKICAgICBpZiAodG8udHlwZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9U
UkFOU0xBVEUpIHsKICAgICAgICAgRmxvYXRTaXplIGRpZmYgPSB0by50cmFuc2xhdGUoKSAtIGZy
b20udHJhbnNsYXRlKCk7CiAgICAgICAgIHJldHVybiBzcXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZm
LndpZHRoKCkgKyBkaWZmLmhlaWdodCgpICogZGlmZi5oZWlnaHQoKSk7CkBAIC0yMjQsMTEgKzIz
Myw4IEBAIGZsb2F0IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWwKICAgICAgICAg
RmxvYXRTaXplIGRpZmYgPSB0by5zY2FsZSgpIC0gZnJvbS5zY2FsZSgpOwogICAgICAgICByZXR1
cm4gc3FydGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRp
ZmYuaGVpZ2h0KCkpOwogICAgIH0KLSAgICByZXR1cm4gLTEuZjsKKyAgICByZXR1cm4gLTE7CiB9
CiAKIH0KLQotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCShy
ZXZpc2lvbiA3ODU1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0OworICAg
IEFuaW1hdGVkQXR0cmlidXRlVHlwZSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZH
RWxlbWVudCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwogCkBAIC02NCw1ICs2NSwzIEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50X2gKLQotLy8g
dmltOnRzPTQ6bm9ldApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAkocmV2aXNpb24gNzg1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIHZv
aWQgcGFyc2VLZXlUaW1lcyhjb25zdCBTdHJpbmcmIAogICAgICAgICBTdHJpbmcgdGltZVN0cmlu
ZyA9IHBhcnNlTGlzdFtuXTsKICAgICAgICAgYm9vbCBvazsKICAgICAgICAgZmxvYXQgdGltZSA9
IHRpbWVTdHJpbmcudG9GbG9hdCgmb2spOwotICAgICAgICBpZiAoIW9rIHx8IHRpbWUgPCAwIHx8
IHRpbWUgPiAxLmYpCisgICAgICAgIGlmICghb2sgfHwgdGltZSA8IDAgfHwgdGltZSA+IDEpCiAg
ICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGlmICh2ZXJpZnlPcmRlcikgewogICAgICAg
ICAgICAgaWYgKCFuKSB7CkBAIC05OCwyNSArOTgsMjUgQEAgc3RhdGljIHZvaWQgcGFyc2VLZXlT
cGxpbmVzKGNvbnN0IFN0cmluZwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3
aGlsZSAoY3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAg
IGZsb2F0IHBvc0EgPSAwLjBmOworICAgICAgICBmbG9hdCBwb3NBID0gMDsKICAgICAgICAgaWYg
KCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zQSkpIHsKICAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXQgcG9z
QiA9IDAuMGY7CisgICAgICAgIGZsb2F0IHBvc0IgPSAwOwogICAgICAgICBpZiAoIXBhcnNlTnVt
YmVyKGN1ciwgZW5kLCBwb3NCKSkgewogICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBwb3NDID0gMC4wZjsK
KyAgICAgICAgZmxvYXQgcG9zQyA9IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBl
bmQsIHBvc0MpKSB7CiAgICAgICAgICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGZsb2F0IHBvc0QgPSAwLjBmOworICAgICAgICBm
bG9hdCBwb3NEID0gMDsKICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zRCwg
ZmFsc2UpKSB7CiAgICAgICAgICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTI5MCwxMSArMjkwLDYgQEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3Vt
dWxhdGVkKAogICAgIHJldHVybiB2YWx1ZSA9PSBzdW0gJiYgYW5pbWF0aW9uTW9kZSgpICE9IFRv
QW5pbWF0aW9uOwogfQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdGFyZ2V0RWxlbWVudCgpOwotfQotCiBib29sIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCog
dGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIEFTU0VS
VCh0YXJnZXRFbGVtZW50KTsKQEAgLTMwNiw3ICszMDEsNyBAQCBib29sIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmlzVGFyZ2V0QXR0cmliCiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFy
Z2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlm
ICghaGFzVmFsaWRUYXJnZXQoKSkKKyAgICBpZiAoIWhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRh
cmdldEVsZW1lbnQoKTsKICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0
ZU5hbWUoKTsKQEAgLTM3NSwxMyArMzcwLDEzIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
Y2FsY3VsYXRlS2V5VGkKICAgICAvLyBOb3JtYWxpemUuCiAgICAgZm9yICh1bnNpZ25lZCBuID0g
MTsgbiA8IGtleVRpbWVzRm9yUGFjZWQuc2l6ZSgpIC0gMTsgKytuKQogICAgICAgICBrZXlUaW1l
c0ZvclBhY2VkW25dID0ga2V5VGltZXNGb3JQYWNlZFtuIC0gMV0gKyBrZXlUaW1lc0ZvclBhY2Vk
W25dIC8gdG90YWxEaXN0YW5jZTsKLSAgICBrZXlUaW1lc0ZvclBhY2VkW2tleVRpbWVzRm9yUGFj
ZWQuc2l6ZSgpIC0gMV0gPSAxLmY7CisgICAga2V5VGltZXNGb3JQYWNlZFtrZXlUaW1lc0ZvclBh
Y2VkLnNpemUoKSAtIDFdID0gMTsKIAogICAgIC8vIFVzZSBrZXkgdGltZXMgY2FsY3VsYXRlZCBi
YXNlZCBvbiBwYWNpbmcgaW5zdGVhZCBvZiB0aGUgdXNlciBwcm92aWRlZCBvbmVzLgogICAgIG1f
a2V5VGltZXMuc3dhcChrZXlUaW1lc0ZvclBhY2VkKTsKIH0KIAotc3RhdGljIGlubGluZSBkb3Vi
bGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1
cmF0aW9uKTsgfQorc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJh
dGlvbikgeyByZXR1cm4gMSAvICgyMDAgKiBkdXJhdGlvbik7IH0KIAogdW5zaWduZWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlS2V5VGltZXNJbmRleChmbG9hdCBwZXJjZW50KSBjb25z
dAogewpAQCAtNDE5LDkgKzQxNCw5IEBAIGZsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1
bGF0ZVBlcmMKICAgICBmbG9hdCB0b0tleVBvaW50ID0gbV9rZXlQb2ludHNbaW5kZXggKyAxXTsK
ICAgICAKICAgICBpZiAoY2FsY01vZGUoKSA9PSBDYWxjTW9kZURpc2NyZXRlKQotICAgICAgICBy
ZXR1cm4gcGVyY2VudCA9PSAxLjBmID8gdG9LZXlQb2ludCA6IGZyb21LZXlQb2ludDsKKyAgICAg
ICAgcmV0dXJuIHBlcmNlbnQgPT0gMSA/IHRvS2V5UG9pbnQgOiBmcm9tS2V5UG9pbnQ7CiAgICAg
Ci0gICAgZmxvYXQga2V5UG9pbnRQZXJjZW50ID0gcGVyY2VudCA9PSAxLjBmID8gMS4wZiA6IChw
ZXJjZW50IC0gZnJvbVBlcmNlbnQpIC8gKHRvUGVyY2VudCAtIGZyb21QZXJjZW50KTsKKyAgICBm
bG9hdCBrZXlQb2ludFBlcmNlbnQgPSBwZXJjZW50ID09IDEgPyAxIDogKHBlcmNlbnQgLSBmcm9t
UGVyY2VudCkgLyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOwogICAgIAogICAgIGlmIChjYWxj
TW9kZSgpID09IENhbGNNb2RlU3BsaW5lKSB7CiAgICAgICAgIEFTU0VSVChtX2tleVNwbGluZXMu
c2l6ZSgpID09IG1fa2V5UG9pbnRzLnNpemUoKSAtIDEpOwpAQCAtNDM2LDcgKzQzMSw3IEBAIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0YKICAgICBBU1NFUlQobV9rZXlQ
b2ludHMuc2l6ZSgpID09IG1fa2V5VGltZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoY2FsY01vZGUo
KSAhPSBDYWxjTW9kZVBhY2VkKTsKICAgICBlZmZlY3RpdmVQZXJjZW50ID0gY2FsY3VsYXRlUGVy
Y2VudEZyb21LZXlQb2ludHMocGVyY2VudCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBlZmZlY3Rp
dmVQZXJjZW50ID09IDEuMGYgPyBtX3ZhbHVlcy5zaXplKCkgLSAyIDogc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVmZmVjdGl2ZVBlcmNlbnQgKiAobV92YWx1ZXMuc2l6ZSgpIC0gMSkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gZWZmZWN0aXZlUGVyY2VudCA9PSAxID8gbV92YWx1ZXMuc2l6ZSgpIC0g
MiA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlZmZlY3RpdmVQZXJjZW50ICogKG1fdmFsdWVzLnNp
emUoKSAtIDEpKTsKICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOwogICAgIHRvID0gbV92YWx1
ZXNbaW5kZXggKyAxXTsKIH0KQEAgLTQ1OCwxMCArNDUzLDEwIEBAIHZvaWQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6Y3VycmVudFZhbHVlc0YKICAgICB1bnNpZ25lZCBpbmRleCA9IGNhbGN1bGF0ZUtl
eVRpbWVzSW5kZXgocGVyY2VudCk7CiAgICAgaWYgKGNhbGNNb2RlID09IENhbGNNb2RlRGlzY3Jl
dGUpIHsKICAgICAgICAgaWYgKCFrZXlUaW1lc0NvdW50KSAKLSAgICAgICAgICAgIGluZGV4ID0g
cGVyY2VudCA9PSAxLjBmID8gdmFsdWVzQ291bnQgLSAxIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHBlcmNlbnQgKiB2YWx1ZXNDb3VudCk7CisgICAgICAgICAgICBpbmRleCA9IHBlcmNlbnQgPT0g
MSA/IHZhbHVlc0NvdW50IC0gMSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwZXJjZW50ICogdmFs
dWVzQ291bnQpOwogICAgICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOwogICAgICAgICB0byA9
IG1fdmFsdWVzW2luZGV4XTsKLSAgICAgICAgZWZmZWN0aXZlUGVyY2VudCA9IDAuMGY7CisgICAg
ICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApA
QCAtNDgxLDcgKzQ3Niw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVl
c0YKICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOwogICAgIHRvID0gbV92YWx1ZXNbaW5kZXgg
KyAxXTsKICAgICBBU1NFUlQodG9QZXJjZW50ID4gZnJvbVBlcmNlbnQpOwotICAgIGVmZmVjdGl2
ZVBlcmNlbnQgPSBwZXJjZW50ID09IDEuMGYgPyAxLjBmIDogKHBlcmNlbnQgLSBmcm9tUGVyY2Vu
dCkgLyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOworICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBw
ZXJjZW50ID09IDEgPyAxIDogKHBlcmNlbnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0g
ZnJvbVBlcmNlbnQpOwogICAgIAogICAgIGlmIChjYWxjTW9kZSA9PSBDYWxjTW9kZVNwbGluZSkg
ewogICAgICAgICBBU1NFUlQobV9rZXlTcGxpbmVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkg
LSAxKTsKQEAgLTQ5Myw3ICs0ODgsNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0
ZWRBY3RpdmVJCiB7CiAgICAgbV9hbmltYXRpb25WYWxpZCA9IGZhbHNlOwogCi0gICAgaWYgKCFo
YXNWYWxpZFRhcmdldCgpKQorICAgIGlmICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNlIHZhbGlkYXRpb25zIGFyZSBhcHByb3ByaWF0ZSBm
b3IgYWxsIGFuaW1hdGlvbiBtb2Rlcy4KQEAgLTU2OSw3ICs1NjQsNSBAQCB2b2lkIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmVuZGVkQWN0aXZlSW50CiB9CiAKIH0KLQotLy8gdmltOnRzPTQ6bm9ldAog
I2VuZGlmIC8vIEVOQUJMRShTVkdfQU5JTUFUSU9OKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgZW51bSBBbmltYXRpb25Nb2RlIHsgTm9BbmltYXRp
b24sIFRvQW5pbWF0aW9uLCBCeUFuaW1hdGlvbiwgVmFsdWVzQW5pbWF0aW9uLCBGcm9tVG9Bbmlt
YXRpb24sIEZyb21CeUFuaW1hdGlvbiwgUGF0aEFuaW1hdGlvbiB9OwogICAgIEFuaW1hdGlvbk1v
ZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFy
Z2V0KCkgY29uc3Q7CiAgICAgCiAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBT
dHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50
OjpmaWxsQXR0cmlidXRlVG9QcgogICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChT
VkdOYW1lczo6d2lkdGhBdHRyLCBBbmltYXRlZExlbmd0aCk7CiAgICAgYXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVzOjpoZWlnaHRBdHRyLCBBbmltYXRlZExlbmd0aCk7CiAg
ICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRy
LCBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyKTsKLSAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcC5zZXQoWExpbmtOYW1lczo6aHJlZkF0dHIsIEFuaW1hdGVkRW51bWVyYXRpb24pOwor
ICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwg
QW5pbWF0ZWRTdHJpbmcpOwogfQogCiB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OmNoaWxkcmVuQ2hh
bmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRl
ckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVt
ZW50LmNwcAkocmV2aXNpb24gNzg1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxNyBAQCB2b2lkIFNWR0dFbGVtZW50
OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvCiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVBy
b3BlcnRpZXModGhpcywgYXR0ck5hbWUpOwogfQogCitBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cCYgU1ZHR0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLCBzX2F0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwLCAoKSk7CisgICAgcmV0dXJuIHNfYXR0cmlidXRlVG9Qcm9wZXJ0eVR5
cGVNYXA7Cit9CisKK3ZvaWQgU1ZHR0VsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmZpbGxQYXNzZWRB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcChhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpKTsK
K30KKwogUmVuZGVyT2JqZWN0KiBTVkdHRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgLy8gU1ZHIDEuMSB0ZXN0c3Vp
dGUgZXhwbGljaXRlbHkgdXNlcyBjb25zdHJ1Y3RzIGxpa2UgPGcgZGlzcGxheT0ibm9uZSI+PGxp
bmVhckdyYWRpZW50PgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgJKHJldmlzaW9uIDc4
NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVBy
b3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CisgICAgdmlydHVhbCBBdHRyaWJ1dGVUb1Byb3BlcnR5
VHlwZU1hcCYgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKTsKIAogICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9p
ZCBTVkdVc2VFbGVtZW50OjpmaWxsQXR0cmlidXRlVG9Qcm9wZQogICAgIGF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6eUF0dHIsIEFuaW1hdGVkTGVuZ3RoKTsKICAgICBh
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcC5zZXQoU1ZHTmFtZXM6OndpZHRoQXR0ciwgQW5pbWF0
ZWRMZW5ndGgpOwogICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6
aGVpZ2h0QXR0ciwgQW5pbWF0ZWRMZW5ndGgpOwotICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwgQW5pbWF0ZWRMZW5ndGgpOworICAgIGF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwgQW5pbWF0ZWRT
dHJpbmcpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVDb250YWluZXJTaXplKFNWR1VzZUVsZW1l
bnQqIHVzZUVsZW1lbnQsIFNWR0VsZW1lbnRJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcAkocmV2aXNpb24gNzg1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NN
SUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDYgKzI3Niw4IEBAIHZv
aWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMKICAgICAgICAgRWxlbWVudEF0
dHJpYnV0ZVBhaXIga2V5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOyAKICAgICAgICAg
U1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQgPSByZXN1bHRzRWxlbWVudHMuZ2V0KGtleSku
Z2V0KCk7CiAgICAgICAgIGlmICghcmVzdWx0RWxlbWVudCkgeworICAgICAgICAgICAgaWYgKCFh
bmltYXRpb24tPmhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgcmVzdWx0RWxlbWVudCA9IGFuaW1hdGlvbjsKICAgICAgICAgICAg
IHJlc3VsdEVsZW1lbnQtPnJlc2V0VG9CYXNlVmFsdWUoYmFzZVZhbHVlRm9yKGtleSkpOwogICAg
ICAgICAgICAgcmVzdWx0c0VsZW1lbnRzLmFkZChrZXksIHJlc3VsdEVsZW1lbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2aXNp
b24gNzg1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCA9IDA7
CiAKICAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82684</attachid>
            <date>2011-02-16 13:31:26 -0800</date>
            <delta_ts>2011-02-16 14:11:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54542-20110216223123.patch</filename>
            <type>text/plain</type>
            <size>41272</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NzA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDItMTYgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIC0gYW5hbHl6ZSBhdHRyaWJ1dGUgdHlwZSBm
b3IgYW5pbWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDU0MgorCisgICAgICAgIEFuYWx5emUgYW5pbWF0ZWQgYXR0cmlidXRlIHR5cGUgdG8g
ZGV0ZXJtaW5lIHRoZSBraW5kIG9mIGFuaW1hdGlvbi4gUmVtb3ZlZCBlbnVtIFByb3BlcnR5VHlw
ZSBhbmQgcmVwbGFjZSBpdAorICAgICAgICB3aXRoIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBpbnN0
ZWFkLiBNb3JlIGNsZWFudXAgb2YgdGhlIGFuaW1hdGlvbiBjb2RlLgorICAgICAgICBBZGRlZCBt
aXNzaW5nIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpIGZvciBTVkdHRWxlbWVudC4K
KworICAgICAgICBObyBjaGFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSBvbiB0aGUgYW5pbWF0aW9uIGNv
ZGUuIFRoZSBjaGFuZ2VzIGZvciB0aGUgPGc+LWVsZW1lbnQgYWZmZWN0IGFuaW1hdGVUcmFuc2Zv
cm0uIFNhZGx5CisgICAgICAgIGFuaW1hdGVUcmFuc2Zvcm0gaXMgbm90IHN1cHBvcnRlZCBieSBv
dXIgU1ZHIGFuaW1hdGlvbiB0ZXN0IHNjcmlwdCBhdCB0aGUgbW9tZW50LiBDYW4gc3RpbGwgYmUg
dGVzdGVkIG1hbnVhbGx5CisgICAgICAgIHdpdGggdGhlIFczQyB0ZXN0IHN1aXRlIGluIHRydW5r
LgorCisgICAgICAgIFRoZSBjaGFuZ2Ugb24gU1ZHVXNlRWxlbWVudCBnZXRzIGNvdmVyZWQgYnkg
YW5pbWF0ZS1lbGVtLTM5LXQuc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OlNWR0FuaW1hdGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJp
YnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OnF1YWxpZmll
ZE5hbWVGb3JBdHRyaWJ1dGVXaXRoUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVFbGVtZW50OjpkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5
VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpyZXNldFRvQmFz
ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3Vs
dHNUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3Vs
YXRlRGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OnJlc2V0VG9CYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKToKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6ZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpyZXNldFRv
QmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVE
aXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VLZXlUaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleVNwbGluZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5p
bWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjYWxj
dWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6c29sdmVF
cHNpbG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0
ZVBlcmNlbnRGcm9tS2V5UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGcm9tS2V5UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGb3JWYWx1ZXNBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFs
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcDogU2V0IGF0dHJpYnV0ZSB0eXBlIGZvciB4bGluazpocmVmIHRv
IEFuaW1hdGVkU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6Zmls
bEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
Y3BwOiBBZGRlZCBtaXNzaW5nIGZ1bmN0aW9uIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0dFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwKToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVXNlRWxlbWVudC5jcHA6IFNldCBhdHRyaWJ1dGUgdHlwZSBmb3IgeGxpbms6aHJlZiB0
byBBbmltYXRlZFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmZpbGxB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6
dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oOgorCiAyMDExLTAyLTE2ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NTUyKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0
LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIlhMaW5rTmFtZXMu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDUsNyArNDYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFNWR0FuaW1hdGVFbGVtZW50OjpTVkdBbmltYXRlRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdBbmlt
YXRpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9wcm9wZXJ0eVR5cGUoU3Ry
aW5nUHJvcGVydHkpCisgICAgLCBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZShBbmltYXRlZFN0cmlu
ZykKICAgICAsIG1fZnJvbU51bWJlcigwKQogICAgICwgbV90b051bWJlcigwKQogICAgICwgbV9h
bmltYXRlZE51bWJlcihudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQpAQCAtMTEz
LDIxICsxMTQsNzIgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEZvckluaGVyaXRhbmNlKAog
ICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUoc3ZnUGFyZW50KS0+Z2V0UHJvcGVydHlWYWx1
ZShjc3NQcm9wZXJ0eUlEKGF0dHJpYnV0ZU5hbWUpKTsKIH0KIAotU1ZHQW5pbWF0ZUVsZW1lbnQ6
OlByb3BlcnR5VHlwZSBTVkdBbmltYXRlRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlKSBjb25zdAorYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6aGFz
VmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5v
dCBhbGxvdyBhbmltYXRpb24gb2YgYXR0cmlidXRlIHR5cGVzIG90aGVyIHRoYW4gQW5pbWF0ZWRD
b2xvciBmb3IgPGFuaW1hdGVDb2xvcj4uCi0gICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFu
aW1hdGVDb2xvclRhZykpCi0gICAgICAgIHJldHVybiBDb2xvclByb3BlcnR5OwotCi0gICAgLy8g
RklYTUU6IE5vdyB0aGF0IHdlIGhhdmUgYSBmdWxsIHByb3BlcnR5IHRhYmxlIHdlIG5lZWQgYSBt
b3JlIGdyYW51bGFyIHR5cGUgc3BlY2lmaWMgYW5pbWF0aW9uLgotICAgIEFuaW1hdGVkQXR0cmli
dXRlVHlwZSB0eXBlID0gdGFyZ2V0RWxlbWVudCgpLT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0
dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdHRyaWJ1dGUsIG51bGxBdG9tKSk7Ci0g
ICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRDb2xvcikKLSAgICAgICAgcmV0dXJuIENvbG9yUHJvcGVy
dHk7Ci0gICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRQYXRoKQotICAgICAgICByZXR1cm4gUGF0aFBy
b3BlcnR5OwotICAgIGlmICh0eXBlID09IEFuaW1hdGVkUG9pbnRzKQotICAgICAgICByZXR1cm4g
UG9pbnRzUHJvcGVydHk7Ci0gICAgcmV0dXJuIE51bWJlclByb3BlcnR5OworICAgIFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJn
ZXRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRldGVy
bWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSAhPSBBbmltYXRlZFVua25v
d247Cit9CisKK3N0YXRpYyBpbmxpbmUgUXVhbGlmaWVkTmFtZSBxdWFsaWZpZWROYW1lRm9yQXR0
cmlidXRlV2l0aFByZWZpeChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcm
IGF0dHJpYnV0ZU5hbWUpCit7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworCisgICAgU3Ry
aW5nIHByZWZpeDsKKyAgICBTdHJpbmcgbG9jYWxOYW1lOworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGlmICghRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFtZShhdHRyaWJ1dGVOYW1l
LCBwcmVmaXgsIGxvY2FsTmFtZSwgZWMpKQorICAgICAgICByZXR1cm4gYW55UU5hbWUoKTsKKyAg
ICBBU1NFUlQoIWVjKTsKKworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB0YXJnZXRFbGVtZW50
LT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KTsKKyAgICBpZiAobmFtZXNwYWNlVVJJLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGFueVFOYW1lKCk7CisKKyAgICByZXR1cm4gUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOworfQorCitBbmltYXRlZEF0
dHJpYnV0ZVR5cGUgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmRldGVybWluZUFuaW1hdGVkQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBjb25zdAoreworICAgIEFTU0VSVCh0YXJn
ZXRFbGVtZW50KTsKKworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRl
TmFtZSgpOworICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSB0eXBlID0gdGFyZ2V0RWxlbWVudC0+
YW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
YXR0cmlidXRlTmFtZSwgbnVsbEF0b20pKTsKKyAgICBpZiAodHlwZSA9PSBBbmltYXRlZFVua25v
d24pIHsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lLmNvbnRhaW5zKCc6JykpCisgICAgICAg
ICAgICByZXR1cm4gQW5pbWF0ZWRVbmtub3duOworICAgICAgICAvLyBBdHRyaWJ1dGUgaXMgbm90
IGluIHRoZSBTVkcgbmFtZXNwYWNlLCBjaGVjayBmb3Igb3RoZXIgbmFtZXNwYWNlcy4KKyAgICAg
ICAgUXVhbGlmaWVkTmFtZSBxbmFtZSA9IHF1YWxpZmllZE5hbWVGb3JBdHRyaWJ1dGVXaXRoUHJl
Zml4KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICBpZiAocW5hbWUgPT0g
YW55UU5hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZFVua25vd247CisgICAgICAg
IHR5cGUgPSB0YXJnZXRFbGVtZW50LT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShx
bmFtZSk7CisgICAgfQorCisgICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVDb2xv
clRhZykgJiYgdHlwZSAhPSBBbmltYXRlZENvbG9yKQorICAgICAgICByZXR1cm4gQW5pbWF0ZWRV
bmtub3duOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdHlwZSBzcGVjaWZpYyBhbmltYXRpb25z
IGluIHRoZSBmdXR1cmUuIE1hbnkgYW5pbWF0aW9ucyBtYXJrZWQgYXMgQW5pbWF0ZWRTdHJpbmcg
dG9kYXkgd2lsbAorICAgIC8vIHN1cHBvcnQgY29udGludW91cyBhbmltYXRpb25zLgorICAgIGlm
ICh0eXBlID09IEFuaW1hdGVkQm9vbGVhbgorICAgICAgICB8fCB0eXBlID09IEFuaW1hdGVkRW51
bWVyYXRpb24KKyAgICAgICAgfHwgdHlwZSA9PSBBbmltYXRlZExlbmd0aExpc3QKKyAgICAgICAg
fHwgdHlwZSA9PSBBbmltYXRlZE51bWJlckxpc3QKKyAgICAgICAgfHwgdHlwZSA9PSBBbmltYXRl
ZE51bWJlck9wdGlvbmFsTnVtYmVyCisgICAgICAgIHx8IHR5cGUgPT0gQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvCisgICAgICAgIHx8IHR5cGUgPT0gQW5pbWF0ZWRSZWN0KQorICAgICAgICBy
ZXR1cm4gQW5pbWF0ZWRTdHJpbmc7CisgICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRBbmdsZQorICAg
ICAgICB8fCB0eXBlID09IEFuaW1hdGVkSW50ZWdlcgorICAgICAgICB8fCB0eXBlID09IEFuaW1h
dGVkTGVuZ3RoKQorICAgICAgICByZXR1cm4gQW5pbWF0ZWROdW1iZXI7CisgICAgLy8gQW5pbWF0
aW9ucyBvZiB0cmFuc2Zvcm0gbGlzdHMgYXJlIG5vdCBhbGxvd2VkIGZvciA8YW5pbWF0ZT4gb3Ig
PHNldD4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvYW5pbWF0ZS5odG1sI0FuaW1h
dGlvbkF0dHJpYnV0ZXNBbmRQcm9wZXJ0aWVzCisgICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0KQorICAgICAgICByZXR1cm4gQW5pbWF0ZWRVbmtub3duOworCisgICAgcmV0dXJu
IHR5cGU7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFs
dWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVz
dWx0RWxlbWVudCkKQEAgLTE1Miw5ICsyMDQsOSBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50Ojpj
YWxjdWxhdGVBbmltYXRlCiAgICAgICAgIHJldHVybjsKICAgICBTVkdBbmltYXRlRWxlbWVudCog
cmVzdWx0cyA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVFbGVtZW50Kj4ocmVzdWx0RWxlbWVudCk7
CiAgICAgLy8gQ2FuJ3QgYWNjdW11bGF0ZSBvdmVyIGEgc3RyaW5nIHByb3BlcnR5LgotICAgIGlm
IChyZXN1bHRzLT5tX3Byb3BlcnR5VHlwZSA9PSBTdHJpbmdQcm9wZXJ0eSAmJiBtX3Byb3BlcnR5
VHlwZSAhPSBTdHJpbmdQcm9wZXJ0eSkKKyAgICBpZiAocmVzdWx0cy0+bV9hbmltYXRlZEF0dHJp
YnV0ZVR5cGUgPT0gQW5pbWF0ZWRTdHJpbmcgJiYgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgIT0g
QW5pbWF0ZWRTdHJpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUg
PT0gTnVtYmVyUHJvcGVydHkpIHsKKyAgICBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0g
QW5pbWF0ZWROdW1iZXIpIHsKICAgICAgICAgLy8gVG8gYW5pbWF0aW9uIHVzZXMgY29udHJpYnV0
aW9ucyBmcm9tIHRoZSBsb3dlciBwcmlvcml0eSBhbmltYXRpb25zIGFzIHRoZSBiYXNlIHZhbHVl
LgogICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAgICAgICAg
IG1fZnJvbU51bWJlciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWROdW1iZXI7CkBAIC0xODgsNyArMjQw
LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAg
ICAgcmVzdWx0cy0+bV9hbmltYXRlZE51bWJlciA9IG51bWJlcjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0gCi0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9yUHJvcGVydHkpIHsKKyAgICBp
ZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRDb2xvcikgewogICAgICAgICBp
ZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAgICAgICAgIG1fZnJvbUNvbG9y
ID0gcmVzdWx0cy0+bV9hbmltYXRlZENvbG9yOwogCkBAIC0yMjEsNyArMjczLDcgQEAgdm9pZCBT
VkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAgICAgcmVzdWx0cy0+
bV9hbmltYXRlZENvbG9yID0gY29sb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KG1fcHJvcGVydHlUeXBlID09IFBhdGhQcm9wZXJ0eSkgeworICAgIGlmIChtX2FuaW1hdGVkQXR0
cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsKICAgICAgICAgaWYgKGFuaW1hdGlvbk1vZGUg
PT0gVG9BbmltYXRpb24pIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRzLT5tX2FuaW1hdGVk
UGF0aFBvaW50ZXIpOwogICAgICAgICAgICAgbV9mcm9tUGF0aCA9IHJlc3VsdHMtPm1fYW5pbWF0
ZWRQYXRoUG9pbnRlci0+Y29weSgpOwpAQCAtMjMwLDcgKzI4Miw3IEBAIHZvaWQgU1ZHQW5pbWF0
ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICAgICAgICAgIEFTU0VSVChtX2Zyb21QYXRo
KTsKICAgICAgICAgICAgIEFTU0VSVChwZXJjZW50YWdlID49IDApOwogICAgICAgICAgICAgcmVz
dWx0cy0+bV9hbmltYXRlZFBhdGhQb2ludGVyID0gbV9mcm9tUGF0aC5nZXQoKTsKLSAgICAgICAg
fSBlbHNlIGlmIChwZXJjZW50YWdlID09IDEuZikgeworICAgICAgICB9IGVsc2UgaWYgKHBlcmNl
bnRhZ2UgPT0gMSkgewogICAgICAgICAgICAgQVNTRVJUKG1fdG9QYXRoKTsKICAgICAgICAgICAg
IHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlciA9IG1fdG9QYXRoLmdldCgpOwogICAgICAg
ICB9IGVsc2UgewpAQCAtMjQ4LDE2ICszMDAsMTYgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6
Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAgICAgICAgIEFTU0VSVChtX2Zyb21QYXRoKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQobV90b1BhdGgpOwogICAgICAgICAgICAgICAgIEFTU0VSVCgh
cmVzdWx0cy0+bV9hbmltYXRlZFBhdGgpOwotICAgICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5p
bWF0ZWRQYXRoUG9pbnRlciA9ICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24gJiYg
cGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgcGVy
Y2VudGFnZSA9PSAxLjBmKSAKKyAgICAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUGF0
aFBvaW50ZXIgPSAoKGFuaW1hdGlvbk1vZGUgPT0gRnJvbVRvQW5pbWF0aW9uICYmIHBlcmNlbnRh
Z2UgPiAwLjVmKSB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2Ug
PT0gMSkgCiAgICAgICAgICAgICAgICAgICAgID8gbV90b1BhdGguZ2V0KCkgOiBtX2Zyb21QYXRo
LmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFBvaW50c1Byb3BlcnR5KSB7CisgICAgaWYgKG1f
YW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUG9pbnRzKSB7CiAgICAgICAgIGlmICgh
cGVyY2VudGFnZSkKICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQb2ludHMgPSBtX2Zy
b21Qb2ludHM7Ci0gICAgICAgIGVsc2UgaWYgKHBlcmNlbnRhZ2UgPT0gMS5mKQorICAgICAgICBl
bHNlIGlmIChwZXJjZW50YWdlID09IDEpCiAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVk
UG9pbnRzID0gbV90b1BvaW50czsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW1f
ZnJvbVBvaW50cy5pc0VtcHR5KCkgJiYgIW1fdG9Qb2ludHMuaXNFbXB0eSgpKQpAQCAtMjY2LDcg
KzMxOCw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICAg
ICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUG9pbnRzLmNsZWFyKCk7CiAgICAgICAgICAg
ICAvLyBGYWxsIGJhY2sgdG8gZGlzY3JldGUgYW5pbWF0aW9uIGlmIHRoZSBwb2ludHMgYXJlIG5v
dCBjb21wYXRpYmxlCiAgICAgICAgICAgICBpZiAocmVzdWx0cy0+bV9hbmltYXRlZFBvaW50cy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZFBvaW50cyA9ICgo
YW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8
IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgcGVyY2VudGFnZSA9PSAxLjBmKSAKKyAg
ICAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUG9pbnRzID0gKChhbmltYXRpb25Nb2Rl
ID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJjZW50YWdlID4gMC41ZikgfHwgYW5pbWF0aW9uTW9k
ZSA9PSBUb0FuaW1hdGlvbiB8fCBwZXJjZW50YWdlID09IDEpIAogICAgICAgICAgICAgICAgICAg
ICA/IG1fdG9Qb2ludHMgOiBtX2Zyb21Qb2ludHM7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwpAQCAtMjgzLDcgKzMzNSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFu
aW1hdGUKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRTdHJpbmcgPSBtX2Zy
b21TdHJpbmc7CiAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJlcGxhY2UgYW5pbWF0aW9uIG92ZXJy
aWRlcyBhbnkgYWRkaXRpdmUgcmVzdWx0cyBzbyBmYXIuCi0gICAgcmVzdWx0cy0+bV9wcm9wZXJ0
eVR5cGUgPSBTdHJpbmdQcm9wZXJ0eTsKKyAgICByZXN1bHRzLT5tX2FuaW1hdGVkQXR0cmlidXRl
VHlwZSA9IEFuaW1hdGVkU3RyaW5nOwogfQogCiBzdGF0aWMgYm9vbCBpbmhlcml0c0Zyb21Qcm9w
ZXJ0eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0zMTEsOCArMzYzLDggQEAgYm9vbCBTVkdBbmlt
YXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9
IGluaGVyaXRzRnJvbVByb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgdG9T
dHJpbmcpID8gSW5oZXJpdFZhbHVlIDogUmVndWxhclByb3BlcnR5VmFsdWU7CiAKICAgICAvLyBG
SVhNRTogTmVlZHMgbW9yZSBzb2xpZCB3YXkgZGV0ZXJtaW5lIHRhcmdldCBhdHRyaWJ1dGUgdHlw
ZS4KLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVO
YW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7CisgICAg
bV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUo
dGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1h
dGVkQ29sb3IpIHsKICAgICAgICAgYm9vbCBmcm9tSXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVW
YWx1ZUlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcpOwogICAgICAgICBib29sIHRvSXNDdXJyZW50
Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKHRvU3RyaW5nKTsKICAgICAgICAg
aWYgKGZyb21Jc0N1cnJlbnRDb2xvcikKQEAgLTMyNywxNCArMzc5LDE0IEBAIGJvb2wgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKICAgICAgICAgYm9vbCB0b0lzVmFsaWQgPSBt
X3RvQ29sb3IuaXNWYWxpZCgpIHx8IHRvSXNDdXJyZW50Q29sb3IgfHwgbV90b1Byb3BlcnR5VmFs
dWVUeXBlID09IEluaGVyaXRWYWx1ZTsKICAgICAgICAgaWYgKChmcm9tSXNWYWxpZCAmJiB0b0lz
VmFsaWQpIHx8ICh0b0lzVmFsaWQgJiYgYW5pbWF0aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUg
PT0gTnVtYmVyUHJvcGVydHkpIHsKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVU
eXBlID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAgIG1fbnVtYmVyVW5pdCA9IFN0cmluZygp
OwogICAgICAgICBpZiAocGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQodG9TdHJpbmcsIG1fdG9OdW1i
ZXIsIG1fbnVtYmVyVW5pdCkpIHsKICAgICAgICAgICAgIC8vIEZvciB0by1hbmltYXRpb25zIHRo
ZSBmcm9tIG51bWJlciBpcyBjYWxjdWxhdGVkIGxhdGVyCiAgICAgICAgICAgICBpZiAoYW5pbWF0
aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uIHx8IHBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZyb21T
dHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUGF0
aFByb3BlcnR5KSB7CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBB
bmltYXRlZFBhdGgpIHsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBT
VkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBpZiAoZmFjdG9yeS0+YnVpbGRT
VkdQYXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcodG9TdHJpbmcsIG1fdG9QYXRoLCBVbmFsdGVyZWRQ
YXJzaW5nKSkgewogICAgICAgICAgICAgLy8gRm9yIHRvLWFuaW1hdGlvbnMgdGhlIGZyb20gbnVt
YmVyIGlzIGNhbGN1bGF0ZWQgbGF0ZXIKQEAgLTM0Myw3ICszOTUsNyBAQCBib29sIFNWR0FuaW1h
dGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAgICAgICAgIH0KICAgICAgICAgbV9mcm9tUGF0
aC5jbGVhcigpOwogICAgICAgICBtX3RvUGF0aC5jbGVhcigpOwotICAgIH0gZWxzZSBpZiAobV9w
cm9wZXJ0eVR5cGUgPT0gUG9pbnRzUHJvcGVydHkpIHsKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0
ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUG9pbnRzKSB7CiAgICAgICAgIG1fZnJvbVBvaW50
cy5jbGVhcigpOwogICAgICAgICBpZiAocG9pbnRzTGlzdEZyb21TVkdEYXRhKG1fZnJvbVBvaW50
cywgZnJvbVN0cmluZykpIHsKICAgICAgICAgICAgIG1fdG9Qb2ludHMuY2xlYXIoKTsKQEAgLTM1
Myw3ICs0MDUsNyBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAg
ICAgfQogICAgIG1fZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CiAgICAgbV90b1N0cmluZyA9IHRv
U3RyaW5nOwotICAgIG1fcHJvcGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7CisgICAgbV9hbmlt
YXRlZEF0dHJpYnV0ZVR5cGUgPSBBbmltYXRlZFN0cmluZzsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMzY2LDggKzQxOCw4IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZy
b21BbmQKICAgICBtX3RvUHJvcGVydHlWYWx1ZVR5cGUgPSBpbmhlcml0c0Zyb21Qcm9wZXJ0eSh0
YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGJ5U3RyaW5nKSA/IEluaGVyaXRWYWx1ZSA6
IFJlZ3VsYXJQcm9wZXJ0eVZhbHVlOwogCiAgICAgQVNTRVJUKCFoYXNUYWdOYW1lKFNWR05hbWVz
OjpzZXRUYWcpKTsKLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlwZShh
dHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5
KSB7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1pbmVBbmltYXRlZEF0dHJp
YnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
ID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgYm9vbCBmcm9tSXNDdXJyZW50Q29sb3IgPSBh
dHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcpOwogICAgICAgICBib29sIGJ5
SXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKGJ5U3RyaW5nKTsK
ICAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRDb2xvcikKQEAgLTM5NiwxNiArNDQ4LDE4IEBAIGJv
b2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKIAogdm9pZCBTVkdBbmltYXRl
RWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcmIGJhc2VTdHJpbmcpCiB7Cisg
ICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAg
ICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CiAgICAgbV9hbmltYXRlZFN0cmluZyA9IGJhc2VTdHJp
bmc7Ci0gICAgUHJvcGVydHlUeXBlIGxhc3RUeXBlID0gbV9wcm9wZXJ0eVR5cGU7Ci0gICAgbV9w
cm9wZXJ0eVR5cGUgPSBkZXRlcm1pbmVQcm9wZXJ0eVR5cGUoYXR0cmlidXRlTmFtZSgpKTsKLSAg
ICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAgIEFuaW1hdGVkQXR0
cmlidXRlVHlwZSBsYXN0VHlwZSA9IG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlOworICAgIG1fYW5p
bWF0ZWRBdHRyaWJ1dGVUeXBlID0gZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdl
dEVsZW1lbnQpOworICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZENv
bG9yKSB7CiAgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IGJhc2VTdHJpbmcuaXNFbXB0eSgpID8g
Q29sb3IoKSA6IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhiYXNlU3RyaW5nKTsK
ICAgICAgICAgaWYgKGlzQ29udHJpYnV0aW5nKGVsYXBzZWQoKSkpIHsKLSAgICAgICAgICAgIG1f
cHJvcGVydHlUeXBlID0gbGFzdFR5cGU7CisgICAgICAgICAgICBtX2FuaW1hdGVkQXR0cmlidXRl
VHlwZSA9IGxhc3RUeXBlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgIH0gZWxzZSBp
ZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWROdW1iZXIpIHsKICAgICAgICAg
aWYgKGJhc2VTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2FuaW1hdGVkTnVtYmVy
ID0gMDsKICAgICAgICAgICAgIG1fbnVtYmVyVW5pdCA9IFN0cmluZygpOwpAQCAtNDEzLDI3ICs0
NjcsMjcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZQogICAgICAg
ICB9CiAgICAgICAgIGlmIChwYXJzZU51bWJlclZhbHVlQW5kVW5pdChiYXNlU3RyaW5nLCBtX2Fu
aW1hdGVkTnVtYmVyLCBtX251bWJlclVuaXQpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0g
ZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUGF0aFByb3BlcnR5KSB7CisgICAgfSBlbHNlIGlm
IChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsKICAgICAgICAgbV9h
bmltYXRlZFBhdGguY2xlYXIoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3Rv
cnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBmYWN0b3J5LT5idWls
ZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhiYXNlU3RyaW5nLCBtX2FuaW1hdGVkUGF0aCwg
VW5hbHRlcmVkUGFyc2luZyk7CiAgICAgICAgIG1fYW5pbWF0ZWRQYXRoUG9pbnRlciA9IG1fYW5p
bWF0ZWRQYXRoLmdldCgpOwogICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChtX3Byb3Bl
cnR5VHlwZSA9PSBQb2ludHNQcm9wZXJ0eSkgeworICAgIH0gZWxzZSBpZiAobV9hbmltYXRlZEF0
dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRQb2ludHMpIHsKICAgICAgICAgbV9hbmltYXRlZFBvaW50
cy5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fcHJvcGVydHlUeXBlID0g
U3RyaW5nUHJvcGVydHk7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBBbmltYXRlZFN0
cmluZzsKIH0KICAgICAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFy
Z2V0KCkKIHsKICAgICBTdHJpbmcgdmFsdWVUb0FwcGx5OwotICAgIGlmIChtX3Byb3BlcnR5VHlw
ZSA9PSBDb2xvclByb3BlcnR5KQorICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBB
bmltYXRlZENvbG9yKQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkQ29sb3IubmFt
ZSgpOwotICAgIGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09IE51bWJlclByb3BlcnR5KQorICAg
IGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkTnVtYmVyKQogICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBTdHJpbmc6Om51bWJlcihtX2FuaW1hdGVkTnVtYmVyKSArIG1f
bnVtYmVyVW5pdDsKLSAgICBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBQYXRoUHJvcGVydHkp
IHsKKyAgICBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgp
IHsKICAgICAgICAgaWYgKCFtX2FuaW1hdGVkUGF0aFBvaW50ZXIgfHwgbV9hbmltYXRlZFBhdGhQ
b2ludGVyLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVk
U3RyaW5nOwogICAgICAgICBlbHNlIHsKQEAgLTQ0NCw3ICs0OTgsNyBAQCB2b2lkIFNWR0FuaW1h
dGVFbGVtZW50OjphcHBseVJlc3VsdHNUb1RhCiAgICAgICAgICAgICBTVkdQYXRoUGFyc2VyRmFj
dG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7CiAgICAgICAgICAg
ICBmYWN0b3J5LT5idWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtKG1fYW5pbWF0ZWRQYXRoUG9pbnRl
ciwgdmFsdWVUb0FwcGx5LCBVbmFsdGVyZWRQYXJzaW5nKTsKICAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUG9pbnRzUHJvcGVydHkpCisgICAgfSBlbHNlIGlmICht
X2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBvaW50cykKICAgICAgICAgdmFsdWVU
b0FwcGx5ID0gbV9hbmltYXRlZFBvaW50cy5pc0VtcHR5KCkgPyBtX2FuaW1hdGVkU3RyaW5nIDog
bV9hbmltYXRlZFBvaW50cy52YWx1ZUFzU3RyaW5nKCk7CiAgICAgZWxzZQogICAgICAgICB2YWx1
ZVRvQXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOwpAQCAtNDU0LDMxICs1MDgsMzEgQEAgdm9pZCBT
VkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYQogICAgIAogZmxvYXQgU1ZHQW5pbWF0
ZUVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVBy
b3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBO
dW1iZXJQcm9wZXJ0eSkgeworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50
YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KQorICAgICAgICByZXR1cm4g
LTE7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1pbmVBbmltYXRlZEF0dHJp
YnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
ID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAgIGRvdWJsZSBmcm9tOwogICAgICAgICBkb3Vi
bGUgdG87CiAgICAgICAgIFN0cmluZyB1bml0OwogICAgICAgICBpZiAoIXBhcnNlTnVtYmVyVmFs
dWVBbmRVbml0KGZyb21TdHJpbmcsIGZyb20sIHVuaXQpKQotICAgICAgICAgICAgcmV0dXJuIC0x
LmY7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1
ZUFuZFVuaXQodG9TdHJpbmcsIHRvLCB1bml0KSkKLSAgICAgICAgICAgIHJldHVybiAtMS5mOwor
ICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChmYWJzKHRvIC0gZnJvbSkpOwogICAgIH0KLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0g
Q29sb3JQcm9wZXJ0eSkgeworICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmlt
YXRlZENvbG9yKSB7CiAgICAgICAgIENvbG9yIGZyb20gPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdC
Q29sb3JTdHJpbmcoZnJvbVN0cmluZyk7CiAgICAgICAgIGlmICghZnJvbS5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAg
Q29sb3IgdG8gPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOwog
ICAgICAgICBpZiAoIXRvLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAtMS5mOworICAg
ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4gQ29sb3JEaXN0YW5jZShmcm9tLCB0
bykuZGlzdGFuY2UoKTsKICAgICB9Ci0gICAgcmV0dXJuIC0xLmY7CisgICAgcmV0dXJuIC0xOwog
fQogICAgCiB9Ci0KLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAkocmV2aXNpb24gNzg1NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsOSArNTgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgQ3VycmVudENvbG9yVmFsdWUs
CiAgICAgICAgIEluaGVyaXRWYWx1ZQogICAgIH07Ci0gICAgZW51bSBQcm9wZXJ0eVR5cGUgeyBO
dW1iZXJQcm9wZXJ0eSwgQ29sb3JQcm9wZXJ0eSwgU3RyaW5nUHJvcGVydHksIFBhdGhQcm9wZXJ0
eSwgUG9pbnRzUHJvcGVydHkgfTsKLSAgICBQcm9wZXJ0eVR5cGUgZGV0ZXJtaW5lUHJvcGVydHlU
eXBlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlKSBjb25zdDsKLSAgICBQcm9wZXJ0eVR5cGUgbV9w
cm9wZXJ0eVR5cGU7CisgICAgCisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlw
ZSgpIGNvbnN0OworICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBkZXRlcm1pbmVBbmltYXRlZEF0
dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCopIGNvbnN0OworICAgIEFuaW1hdGVkQXR0cmlidXRlVHlw
ZSBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZTsKIAogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5
cGUgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGU7CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlw
ZSBtX3RvUHJvcGVydHlWYWx1ZVR5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTQgKzUzLDE3IEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ+IFNWR0EK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlk
VGFyZ2V0KCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0
cmlidXRlVHlwZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFTVkdBbmltYXRpb25FbGVtZW50OjpoYXNW
YWxpZFRhcmdldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU1ZHRWxlbWVudCogdGFy
Z2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1l
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGRvbid0IGhhdmUgYSBzcGVj
aWFsIGF0dHJpYnV0ZSBuYW1lIHRvIHZlcmlmeSB0aGUgYW5pbWF0aW9uIHR5cGUuIENoZWNrIHRo
ZSBlbGVtZW50IG5hbWUgaW5zdGVhZC4KICAgICBpZiAoIXRhcmdldEVsZW1lbnQtPmlzU3R5bGVk
VHJhbnNmb3JtYWJsZSgpICYmICF0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0
ZXh0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFNwZWM6IFNWRyAxLjEgc2Vj
dGlvbiAxOS4yLjE1CisgICAgLy8gRklYTUU6IHN2Z1RhZyBpcyBtaXNzaW5nLiBOZWVkcyB0byBi
ZSBjaGVja2VkLCBpZiB0cmFuc2Zvcm1pbmcgPHN2Zz4gY291bGQgY2F1c2UgcHJvYmxlbXMuCiAg
ICAgaWYgKHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUoZ1RhZykKICAgICAgICAgfHwgdGFyZ2V0
RWxlbWVudC0+aGFzVGFnTmFtZShkZWZzVGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5o
YXNUYWdOYW1lKHVzZVRhZykKQEAgLTEzNCwxMSArMTM3LDExIEBAIHN0YXRpYyBib29sIHBhcnNl
UG9pbnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhjdXIs
IGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBmbG9hdCB4ID0gMC4wZjsK
KyAgICBmbG9hdCB4ID0gMDsKICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGZsb2F0IHkgPSAwLjBmOworICAgIGZsb2F0
IHkgPSAwOwogICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCkBAIC0xNTAsMTAgKzE1Myw5IEBAIHN0YXRpYyBib29sIHBhcnNlUG9p
bnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICAKIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OnJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJikKIHsKLSAgICBpZiAoIWhhc1ZhbGlkVGFy
Z2V0KCkpCisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKLSAgICBBZmZpbmVU
cmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldC0+c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm0gPSB0YXJnZXRFbGVtZW50KCktPnN1cHBsZW1l
bnRhbFRyYW5zZm9ybSgpOwogICAgIGlmICghdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAg
ICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKQEAgLTE3NywxNSArMTc5LDE1IEBAIGJvb2wg
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKIAogdm9pZCBTVkdBbmltYXRlTW90
aW9uRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNp
Z25lZCwgU1ZHU01JTEVsZW1lbnQqKQogewotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdl
dEVsZW1lbnQoKTsKLSAgICBpZiAoIXRhcmdldCkKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKICAg
ICAgICAgcmV0dXJuOwotICAgIEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtID0gdGFyZ2V0LT5z
dXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9
IHRhcmdldEVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwogICAgIGlmICghdHJhbnNm
b3JtKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodGFyZ2V0LT5yZW5kZXJlcigpKQotICAg
ICAgICB0YXJnZXQtPnJlbmRlcmVyKCktPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CisgICAg
aWYgKHRhcmdldEVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHRhcmdldEVsZW1lbnQtPnJl
bmRlcmVyKCktPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CiAKICAgICBpZiAoIWlzQWRkaXRp
dmUoKSkKICAgICAgICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKQEAgLTIwNCw3ICsyMDYs
NyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBCiAgICAgICAgICAg
ICBpZiAocm90YXRlTW9kZSA9PSBSb3RhdGVBdXRvIHx8IHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0
b1JldmVyc2UpIHsKICAgICAgICAgICAgICAgICBmbG9hdCBhbmdsZSA9IHBhdGgubm9ybWFsQW5n
bGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOwogICAgICAgICAgICAgICAgIGlmIChyb3Rh
dGVNb2RlID09IFJvdGF0ZUF1dG9SZXZlcnNlKQotICAgICAgICAgICAgICAgICAgICBhbmdsZSAr
PSAxODAuZjsKKyAgICAgICAgICAgICAgICAgICAgYW5nbGUgKz0gMTgwOwogICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybS0+cm90YXRlKGFuZ2xlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjUwLDEzICsyNTIsMTIgQEAgZmxvYXQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1
bGF0ZQogICAgIEZsb2F0UG9pbnQgZnJvbTsKICAgICBGbG9hdFBvaW50IHRvOwogICAgIGlmICgh
cGFyc2VQb2ludChmcm9tU3RyaW5nLCBmcm9tKSkKLSAgICAgICAgcmV0dXJuIC0xLmY7CisgICAg
ICAgIHJldHVybiAtMTsKICAgICBpZiAoIXBhcnNlUG9pbnQodG9TdHJpbmcsIHRvKSkKLSAgICAg
ICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAtMTsKICAgICBGbG9hdFNpemUgZGlmZiA9
IHRvIC0gZnJvbTsKICAgICByZXR1cm4gc3FydGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0aCgp
ICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwogfQogCiB9Ci0KICNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmgJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKIApAQCAt
NzMsNSArNzMsMyBAQCBwcml2YXRlOgogCiAjZW5kaWYgLy8gRU5BQkxFKFNWR19BTklNQVRJT04p
CiAjZW5kaWYgLy8gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnRfaAotCi0vLyB2aW06dHM9NDpub2V0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTQgKzU5LDI1IEBA
IFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+IFMKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7
CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkg
Y29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRl
VHlwZSgpIGNvbnN0CiB7CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRh
cmdldEVsZW1lbnQoKTsKLSAgICByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRU
YXJnZXQoKQotICAgICAgICAmJiAodGFyZ2V0RWxlbWVudC0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxl
KCkKLSAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFRh
ZykKLSAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bGluZWFy
R3JhZGllbnRUYWcpCi0gICAgICAgIHx8IHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnJhZGlhbEdyYWRpZW50VGFnKSk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRldGVybWluZUFuaW1hdGVkQXR0cmli
dXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBBbmltYXRlZFRyYW5zZm9ybUxpc3Q7Cit9CisKK0Fu
aW1hdGVkQXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6ZGV0ZXJtaW5l
QW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworICAgIAorICAgIC8vIEp1c3QgdHJhbnNmb3Jt
IGxpc3RzIGNhbiBiZSBhbmltYXRlZCB3aXRoIDxhbmltYXRlVHJhbnNmb3JtPgorICAgIC8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1NWRy9hbmltYXRlLmh0bWwjQW5pbWF0aW9uQXR0cmlidXRlc0Fu
ZFByb3BlcnRpZXMKKyAgICBpZiAodGFyZ2V0RWxlbWVudC0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGVG
b3JBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXR0cmlidXRlTmFtZSgpLCBudWxs
QXRvbSkpICE9IEFuaW1hdGVkVHJhbnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuIEFuaW1hdGVk
VW5rbm93bjsKKworICAgIHJldHVybiBBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CiB9CiAKIHZvaWQg
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKQEAgLTEwMiwyNiArMTEzLDI3IEBAIHN0YXRpYyBTVkdUcmFuc2Zvcm1MaXN0KiB0
cmFuc2Zvcm1MaXN0Rm8KICAgICAKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnJl
c2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJiBiYXNlVmFsdWUpCiB7Ci0gICAgaWYgKCFoYXNW
YWxpZFRhcmdldCgpKQorICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJn
ZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8IGRldGVybWluZUFuaW1hdGVk
QXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBBbmltYXRlZFVua25vd24pCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICh0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmxpbmVhckdyYWRpZW50VGFnKSB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnJhZGlhbEdyYWRpZW50VGFnKSkgewotICAgICAgICB0YXJnZXRFbGVtZW50KCktPnNldEF0
dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyLCBiYXNlVmFsdWUuaXNFbXB0
eSgpID8gIm1hdHJpeCgxIDAgMCAxIDAgMCkiIDogYmFzZVZhbHVlKTsKKyAgICBpZiAodGFyZ2V0
RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWcpIHx8IHRhcmdl
dEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnKSkgeworICAg
ICAgICB0YXJnZXRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNm
b3JtQXR0ciwgYmFzZVZhbHVlLmlzRW1wdHkoKSA/ICJtYXRyaXgoMSAwIDAgMSAwIDApIiA6IGJh
c2VWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYmFzZVZhbHVlLmlz
RW1wdHkoKSkgewotICAgICAgICBpZiAoU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCA9IHRyYW5zZm9y
bUxpc3RGb3IodGFyZ2V0RWxlbWVudCgpKSkKKyAgICAgICAgaWYgKFNWR1RyYW5zZm9ybUxpc3Qq
IGxpc3QgPSB0cmFuc2Zvcm1MaXN0Rm9yKHRhcmdldEVsZW1lbnQpKQogICAgICAgICAgICAgbGlz
dC0+Y2xlYXIoKTsKICAgICB9IGVsc2UKLSAgICAgICAgdGFyZ2V0RWxlbWVudCgpLT5zZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIGJhc2VWYWx1ZSk7CisgICAgICAgIHRhcmdl
dEVsZW1lbnQtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgYmFzZVZhbHVl
KTsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0
ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50
KiByZXN1bHRFbGVtZW50KQordm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3Vs
YXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXQsIFNWR1NN
SUxFbGVtZW50KikKIHsKLSAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgU1ZHRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdl
dEVsZW1lbnQgfHwgZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQp
ID09IEFuaW1hdGVkVW5rbm93bikKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQgPSByZXN1bHRFbGVtZW50LT50YXJnZXRFbGVtZW50KCk7CiAgICAgU1ZHVHJh
bnNmb3JtTGlzdCogdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybUxpc3RGb3IodGFyZ2V0RWxlbWVu
dCk7CiAgICAgQVNTRVJUKHRyYW5zZm9ybUxpc3QpOwogCkBAIC0xNDYsNyArMTU4LDYgQEAgYm9v
bCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYQogCiBib29sIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBm
cm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQogewotCiAgICAgbV9mcm9tVHJhbnNm
b3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShmcm9tU3RyaW5nKTsKICAgICBpZiAoIW1fZnJvbVRy
YW5zZm9ybS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2OCwxMyArMTc5
LDExIEBAIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDoKICAgICAKIHZv
aWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKIHsK
LSAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBXZSBh
Y2N1bXVsYXRlIHRvIHRoZSB0YXJnZXQgZWxlbWVudCB0cmFuc2Zvcm0gbGlzdCBzbyB0aGVyZSBp
cyBub3QgbXVjaCB0byBkbyBoZXJlLgogICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0
aGlzLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXRFbGVtZW50KQorICAgIGlmICgh
dGFyZ2V0RWxlbWVudCB8fCBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxl
bWVudCkgPT0gQW5pbWF0ZWRVbmtub3duKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBXZSBh
Y2N1bXVsYXRlIHRvIHRoZSB0YXJnZXQgZWxlbWVudCB0cmFuc2Zvcm0gbGlzdCBzbyB0aGVyZSBp
cyBub3QgbXVjaCB0byBkbyBoZXJlLgogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dGFyZ2V0RWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNU
cmFuc2Zvcm1VcGRhdGUoKTsKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7CkBAIC0yMTAsMTAgKzIx
OSwxMCBAQCBmbG9hdCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsCiAgICAgLy8g
aXMgcGFjZWQgc2VwYXJhdGVseS4gVG8gaW1wbGVtZW50IHRoaXMgd2UgbmVlZCB0byB0cmVhdCBl
YWNoIGNvbXBvbmVudCBhcyBpbmRpdmlkdWFsIGFuaW1hdGlvbiBldmVyeXdoZXJlLgogICAgIFNW
R1RyYW5zZm9ybSBmcm9tID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShmcm9tU3RyaW5nKTsKICAgICBp
ZiAoIWZyb20uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAgcmV0dXJu
IC0xOwogICAgIFNWR1RyYW5zZm9ybSB0byA9IHBhcnNlVHJhbnNmb3JtVmFsdWUodG9TdHJpbmcp
OwogICAgIGlmICghdG8uaXNWYWxpZCgpIHx8IGZyb20udHlwZSgpICE9IHRvLnR5cGUoKSkKLSAg
ICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAodG8udHlwZSgp
ID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEUpIHsKICAgICAgICAgRmxv
YXRTaXplIGRpZmYgPSB0by50cmFuc2xhdGUoKSAtIGZyb20udHJhbnNsYXRlKCk7CiAgICAgICAg
IHJldHVybiBzcXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZmLndpZHRoKCkgKyBkaWZmLmhlaWdodCgp
ICogZGlmZi5oZWlnaHQoKSk7CkBAIC0yMjQsMTEgKzIzMyw4IEBAIGZsb2F0IFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpjYWxjdWwKICAgICAgICAgRmxvYXRTaXplIGRpZmYgPSB0by5zY2Fs
ZSgpIC0gZnJvbS5zY2FsZSgpOwogICAgICAgICByZXR1cm4gc3FydGYoZGlmZi53aWR0aCgpICog
ZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwogICAgIH0KLSAg
ICByZXR1cm4gLTEuZjsKKyAgICByZXR1cm4gLTE7CiB9CiAKIH0KLQotLy8gdmltOnRzPTQ6bm9l
dAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCShyZXZpc2lvbiA3ODU1MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCi0gICAg
dmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0OworICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBk
ZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCopIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCkBAIC02NCw1
ICs2NSwzIEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50X2gKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNzg1NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIHZvaWQgcGFyc2VLZXlUaW1lcyhjb25zdCBT
dHJpbmcmIAogICAgICAgICBTdHJpbmcgdGltZVN0cmluZyA9IHBhcnNlTGlzdFtuXTsKICAgICAg
ICAgYm9vbCBvazsKICAgICAgICAgZmxvYXQgdGltZSA9IHRpbWVTdHJpbmcudG9GbG9hdCgmb2sp
OwotICAgICAgICBpZiAoIW9rIHx8IHRpbWUgPCAwIHx8IHRpbWUgPiAxLmYpCisgICAgICAgIGlm
ICghb2sgfHwgdGltZSA8IDAgfHwgdGltZSA+IDEpCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAg
ICAgICAgIGlmICh2ZXJpZnlPcmRlcikgewogICAgICAgICAgICAgaWYgKCFuKSB7CkBAIC05OCwy
NSArOTgsMjUgQEAgc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZwogICAg
IGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CiAgICAg
ICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0IHBvc0EgPSAwLjBmOworICAg
ICAgICBmbG9hdCBwb3NBID0gMDsKICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
cG9zQSkpIHsKICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXQgcG9zQiA9IDAuMGY7CisgICAgICAgIGZsb2F0
IHBvc0IgPSAwOwogICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NCKSkgewog
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBmbG9hdCBwb3NDID0gMC4wZjsKKyAgICAgICAgZmxvYXQgcG9zQyA9IDA7
CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7CiAgICAgICAgICAg
ICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGZsb2F0IHBvc0QgPSAwLjBmOworICAgICAgICBmbG9hdCBwb3NEID0gMDsKICAgICAgICAg
aWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zRCwgZmFsc2UpKSB7CiAgICAgICAgICAgICBy
ZXN1bHQuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MCwxMSArMjkwLDYgQEAg
Ym9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3VtdWxhdGVkKAogICAgIHJldHVybiB2YWx1
ZSA9PSBzdW0gJiYgYW5pbWF0aW9uTW9kZSgpICE9IFRvQW5pbWF0aW9uOwogfQogCi1ib29sIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
dGFyZ2V0RWxlbWVudCgpOwotfQotCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0
QXR0cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKQEAgLTMw
Niw3ICszMDEsNyBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmliCiAK
IHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKKyAg
ICBpZiAoIWhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpKQogICAgICAgICByZXR1cm47CiAgICAgU1ZH
RWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKICAgICBTdHJp
bmcgYXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKQEAgLTM3NSwxMyArMzcw
LDEzIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlS2V5VGkKICAgICAvLyBO
b3JtYWxpemUuCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMTsgbiA8IGtleVRpbWVzRm9yUGFjZWQu
c2l6ZSgpIC0gMTsgKytuKQogICAgICAgICBrZXlUaW1lc0ZvclBhY2VkW25dID0ga2V5VGltZXNG
b3JQYWNlZFtuIC0gMV0gKyBrZXlUaW1lc0ZvclBhY2VkW25dIC8gdG90YWxEaXN0YW5jZTsKLSAg
ICBrZXlUaW1lc0ZvclBhY2VkW2tleVRpbWVzRm9yUGFjZWQuc2l6ZSgpIC0gMV0gPSAxLmY7Cisg
ICAga2V5VGltZXNGb3JQYWNlZFtrZXlUaW1lc0ZvclBhY2VkLnNpemUoKSAtIDFdID0gMTsKIAog
ICAgIC8vIFVzZSBrZXkgdGltZXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBwYWNpbmcgaW5zdGVhZCBv
ZiB0aGUgdXNlciBwcm92aWRlZCBvbmVzLgogICAgIG1fa2V5VGltZXMuc3dhcChrZXlUaW1lc0Zv
clBhY2VkKTsKIH0KIAotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBk
dXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsgfQorc3RhdGljIGlubGlu
ZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMSAvICgyMDAg
KiBkdXJhdGlvbik7IH0KIAogdW5zaWduZWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRl
S2V5VGltZXNJbmRleChmbG9hdCBwZXJjZW50KSBjb25zdAogewpAQCAtNDE5LDkgKzQxNCw5IEBA
IGZsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVBlcmMKICAgICBmbG9hdCB0b0tl
eVBvaW50ID0gbV9rZXlQb2ludHNbaW5kZXggKyAxXTsKICAgICAKICAgICBpZiAoY2FsY01vZGUo
KSA9PSBDYWxjTW9kZURpc2NyZXRlKQotICAgICAgICByZXR1cm4gcGVyY2VudCA9PSAxLjBmID8g
dG9LZXlQb2ludCA6IGZyb21LZXlQb2ludDsKKyAgICAgICAgcmV0dXJuIHBlcmNlbnQgPT0gMSA/
IHRvS2V5UG9pbnQgOiBmcm9tS2V5UG9pbnQ7CiAgICAgCi0gICAgZmxvYXQga2V5UG9pbnRQZXJj
ZW50ID0gcGVyY2VudCA9PSAxLjBmID8gMS4wZiA6IChwZXJjZW50IC0gZnJvbVBlcmNlbnQpIC8g
KHRvUGVyY2VudCAtIGZyb21QZXJjZW50KTsKKyAgICBmbG9hdCBrZXlQb2ludFBlcmNlbnQgPSBw
ZXJjZW50ID09IDEgPyAxIDogKHBlcmNlbnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0g
ZnJvbVBlcmNlbnQpOwogICAgIAogICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlU3BsaW5l
KSB7CiAgICAgICAgIEFTU0VSVChtX2tleVNwbGluZXMuc2l6ZSgpID09IG1fa2V5UG9pbnRzLnNp
emUoKSAtIDEpOwpAQCAtNDM2LDcgKzQzMSw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
Y3VycmVudFZhbHVlc0YKICAgICBBU1NFUlQobV9rZXlQb2ludHMuc2l6ZSgpID09IG1fa2V5VGlt
ZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoY2FsY01vZGUoKSAhPSBDYWxjTW9kZVBhY2VkKTsKICAg
ICBlZmZlY3RpdmVQZXJjZW50ID0gY2FsY3VsYXRlUGVyY2VudEZyb21LZXlQb2ludHMocGVyY2Vu
dCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBlZmZlY3RpdmVQZXJjZW50ID09IDEuMGYgPyBtX3Zh
bHVlcy5zaXplKCkgLSAyIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVmZmVjdGl2ZVBlcmNlbnQg
KiAobV92YWx1ZXMuc2l6ZSgpIC0gMSkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZWZmZWN0aXZl
UGVyY2VudCA9PSAxID8gbV92YWx1ZXMuc2l6ZSgpIC0gMiA6IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihlZmZlY3RpdmVQZXJjZW50ICogKG1fdmFsdWVzLnNpemUoKSAtIDEpKTsKICAgICBmcm9tID0g
bV92YWx1ZXNbaW5kZXhdOwogICAgIHRvID0gbV92YWx1ZXNbaW5kZXggKyAxXTsKIH0KQEAgLTQ1
OCwxMCArNDUzLDEwIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0YK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGNhbGN1bGF0ZUtleVRpbWVzSW5kZXgocGVyY2VudCk7CiAg
ICAgaWYgKGNhbGNNb2RlID09IENhbGNNb2RlRGlzY3JldGUpIHsKICAgICAgICAgaWYgKCFrZXlU
aW1lc0NvdW50KSAKLSAgICAgICAgICAgIGluZGV4ID0gcGVyY2VudCA9PSAxLjBmID8gdmFsdWVz
Q291bnQgLSAxIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBlcmNlbnQgKiB2YWx1ZXNDb3VudCk7
CisgICAgICAgICAgICBpbmRleCA9IHBlcmNlbnQgPT0gMSA/IHZhbHVlc0NvdW50IC0gMSA6IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwZXJjZW50ICogdmFsdWVzQ291bnQpOwogICAgICAgICBmcm9t
ID0gbV92YWx1ZXNbaW5kZXhdOwogICAgICAgICB0byA9IG1fdmFsdWVzW2luZGV4XTsKLSAgICAg
ICAgZWZmZWN0aXZlUGVyY2VudCA9IDAuMGY7CisgICAgICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSAw
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNDgxLDcgKzQ3Niw3IEBAIHZvaWQg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0YKICAgICBmcm9tID0gbV92YWx1ZXNb
aW5kZXhdOwogICAgIHRvID0gbV92YWx1ZXNbaW5kZXggKyAxXTsKICAgICBBU1NFUlQodG9QZXJj
ZW50ID4gZnJvbVBlcmNlbnQpOwotICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBwZXJjZW50ID09IDEu
MGYgPyAxLjBmIDogKHBlcmNlbnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0gZnJvbVBl
cmNlbnQpOworICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBwZXJjZW50ID09IDEgPyAxIDogKHBlcmNl
bnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOwogICAgIAogICAg
IGlmIChjYWxjTW9kZSA9PSBDYWxjTW9kZVNwbGluZSkgewogICAgICAgICBBU1NFUlQobV9rZXlT
cGxpbmVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkgLSAxKTsKQEAgLTQ5Myw3ICs0ODgsNyBA
QCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJCiB7CiAgICAgbV9hbmlt
YXRpb25WYWxpZCA9IGZhbHNlOwogCi0gICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQorICAgIGlm
ICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRo
ZXNlIHZhbGlkYXRpb25zIGFyZSBhcHByb3ByaWF0ZSBmb3IgYWxsIGFuaW1hdGlvbiBtb2Rlcy4K
QEAgLTU2OSw3ICs1NjQsNSBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZGVkQWN0aXZl
SW50CiB9CiAKIH0KLQotLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIEVOQUJMRShTVkdfQU5J
TUFUSU9OKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJ
KHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAg
ICAgZW51bSBBbmltYXRpb25Nb2RlIHsgTm9BbmltYXRpb24sIFRvQW5pbWF0aW9uLCBCeUFuaW1h
dGlvbiwgVmFsdWVzQW5pbWF0aW9uLCBGcm9tVG9BbmltYXRpb24sIEZyb21CeUFuaW1hdGlvbiwg
UGF0aEFuaW1hdGlvbiB9OwogICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CiAgICAgCiAgICAg
U3RyaW5nIHRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGFy
Z2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQs
NyArMjE0LDcgQEAgdm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpmaWxsQXR0cmlidXRlVG9QcgogICAg
IGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6d2lkdGhBdHRyLCBBbmlt
YXRlZExlbmd0aCk7CiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVz
OjpoZWlnaHRBdHRyLCBBbmltYXRlZExlbmd0aCk7CiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5
cGVNYXAuc2V0KFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyLCBBbmltYXRlZE51bWJlck9wdGlvbmFs
TnVtYmVyKTsKLSAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcC5zZXQoWExpbmtOYW1lczo6
aHJlZkF0dHIsIEFuaW1hdGVkRW51bWVyYXRpb24pOworICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwgQW5pbWF0ZWRTdHJpbmcpOwogfQogCiB2
b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNl
ciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnRE
ZWx0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmNwcAkocmV2aXNpb24gNzg1NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Myw2ICs5MywxNyBAQCB2b2lkIFNWR0dFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
CiAgICAgICAgIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUp
OwogfQogCitBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgU1ZHR0VsZW1lbnQ6OmF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwLCBzX2F0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLCAoKSk7Cisg
ICAgcmV0dXJuIHNfYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXA7Cit9CisKK3ZvaWQgU1ZHR0Vs
ZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpCit7CisgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmZpbGxQYXNzZWRBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cChhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpKTsKK30KKwogUmVuZGVyT2JqZWN0KiBTVkdH
RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSog
c3R5bGUpCiB7CiAgICAgLy8gU1ZHIDEuMSB0ZXN0c3VpdGUgZXhwbGljaXRlbHkgdXNlcyBjb25z
dHJ1Y3RzIGxpa2UgPGcgZGlzcGxheT0ibm9uZSI+PGxpbmVhckdyYWRpZW50PgpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0dFbGVtZW50LmgJKHJldmlzaW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7
CisgICAgdmlydHVhbCBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgYXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXAoKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDc4NTUxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpmaWxsQXR0
cmlidXRlVG9Qcm9wZQogICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1l
czo6eUF0dHIsIEFuaW1hdGVkTGVuZ3RoKTsKICAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cC5zZXQoU1ZHTmFtZXM6OndpZHRoQXR0ciwgQW5pbWF0ZWRMZW5ndGgpOwogICAgIGF0dHJpYnV0
ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6aGVpZ2h0QXR0ciwgQW5pbWF0ZWRMZW5n
dGgpOwotICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpocmVm
QXR0ciwgQW5pbWF0ZWRMZW5ndGgpOworICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNl
dChYTGlua05hbWVzOjpocmVmQXR0ciwgQW5pbWF0ZWRTdHJpbmcpOwogfQogCiBzdGF0aWMgdm9p
ZCB1cGRhdGVDb250YWluZXJTaXplKFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQsIFNWR0VsZW1l
bnRJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzg1NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjc2LDYgKzI3Niw4IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVw
ZGF0ZUFuaW1hdGlvbnMKICAgICAgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5KHRhcmdldEVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOyAKICAgICAgICAgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVs
ZW1lbnQgPSByZXN1bHRzRWxlbWVudHMuZ2V0KGtleSkuZ2V0KCk7CiAgICAgICAgIGlmICghcmVz
dWx0RWxlbWVudCkgeworICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc1ZhbGlkQXR0cmli
dXRlVHlwZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcmVzdWx0
RWxlbWVudCA9IGFuaW1hdGlvbjsKICAgICAgICAgICAgIHJlc3VsdEVsZW1lbnQtPnJlc2V0VG9C
YXNlVmFsdWUoYmFzZVZhbHVlRm9yKGtleSkpOwogICAgICAgICAgICAgcmVzdWx0c0VsZW1lbnRz
LmFkZChrZXksIHJlc3VsdEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2aXNpb24gNzg1NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDYgKzQ5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVh
bCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBo
YXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCA9IDA7CiAKICAgICBTTUlMVGltZUNvbnRhaW5l
ciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsg
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82691</attachid>
            <date>2011-02-16 14:11:59 -0800</date>
            <delta_ts>2011-02-17 12:41:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54542-20110216231157.patch</filename>
            <type>text/plain</type>
            <size>41130</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDItMTYgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIC0gYW5hbHl6ZSBhdHRyaWJ1dGUgdHlwZSBm
b3IgYW5pbWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDU0MgorCisgICAgICAgIEFuYWx5emUgYW5pbWF0ZWQgYXR0cmlidXRlIHR5cGUgdG8g
ZGV0ZXJtaW5lIHRoZSBraW5kIG9mIGFuaW1hdGlvbi4gUmVtb3ZlZCBlbnVtIFByb3BlcnR5VHlw
ZSBhbmQgcmVwbGFjZSBpdAorICAgICAgICB3aXRoIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBpbnN0
ZWFkLiBNb3JlIGNsZWFudXAgb2YgdGhlIGFuaW1hdGlvbiBjb2RlLgorICAgICAgICBBZGRlZCBt
aXNzaW5nIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpIGZvciBTVkdHRWxlbWVudC4K
KworICAgICAgICBObyBjaGFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSBvbiB0aGUgYW5pbWF0aW9uIGNv
ZGUuIFRoZSBjaGFuZ2VzIGZvciB0aGUgPGc+LWVsZW1lbnQgYWZmZWN0IGFuaW1hdGVUcmFuc2Zv
cm0uIFNhZGx5CisgICAgICAgIGFuaW1hdGVUcmFuc2Zvcm0gaXMgbm90IHN1cHBvcnRlZCBieSBv
dXIgU1ZHIGFuaW1hdGlvbiB0ZXN0IHNjcmlwdCBhdCB0aGUgbW9tZW50LiBDYW4gc3RpbGwgYmUg
dGVzdGVkIG1hbnVhbGx5CisgICAgICAgIHdpdGggdGhlIFczQyB0ZXN0IHN1aXRlIGluIHRydW5r
LgorCisgICAgICAgIFRoZSBjaGFuZ2Ugb24gU1ZHVXNlRWxlbWVudCBnZXRzIGNvdmVyZWQgYnkg
YW5pbWF0ZS1lbGVtLTM5LXQuc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OlNWR0FuaW1hdGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJp
YnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OnF1YWxpZmll
ZE5hbWVGb3JBdHRyaWJ1dGVXaXRoUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVFbGVtZW50OjpkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5
VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpyZXNldFRvQmFz
ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3Vs
dHNUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3Vs
YXRlRGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OnJlc2V0VG9CYXNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKToKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6ZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpyZXNldFRv
QmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVE
aXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VLZXlUaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleVNwbGluZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5p
bWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjYWxj
dWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6c29sdmVF
cHNpbG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0
ZVBlcmNlbnRGcm9tS2V5UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGcm9tS2V5UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGb3JWYWx1ZXNBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUludGVydmFs
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcDogU2V0IGF0dHJpYnV0ZSB0eXBlIGZvciB4bGluazpocmVmIHRv
IEFuaW1hdGVkU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyRWxlbWVudDo6Zmls
bEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQu
Y3BwOiBBZGRlZCBtaXNzaW5nIGZ1bmN0aW9uIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1h
cC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0dFbGVtZW50OjphdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwKToKKyAgICAgICAgKiBzdmcvU1ZHR0VsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHVXNlRWxlbWVudC5jcHA6IFNldCBhdHRyaWJ1dGUgdHlwZSBmb3IgeGxpbms6aHJlZiB0
byBBbmltYXRlZFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmZpbGxB
dHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6
dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oOgorCiAyMDExLTAyLTE1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHQW5pbWF0ZUVsZW1lbnQ6OlNW
R0FuaW1hdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCkKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0g
ICAgLCBtX3Byb3BlcnR5VHlwZShTdHJpbmdQcm9wZXJ0eSkKKyAgICAsIG1fYW5pbWF0ZWRBdHRy
aWJ1dGVUeXBlKEFuaW1hdGVkU3RyaW5nKQogICAgICwgbV9mcm9tTnVtYmVyKDApCiAgICAgLCBt
X3RvTnVtYmVyKDApCiAgICAgLCBtX2FuaW1hdGVkTnVtYmVyKG51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCkpCkBAIC0xMTMsMjEgKzExMyw3MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
YWRqdXN0Rm9ySW5oZXJpdGFuY2UoCiAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZShzdmdQ
YXJlbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZSkpOwog
fQogCi1TVkdBbmltYXRlRWxlbWVudDo6UHJvcGVydHlUeXBlIFNWR0FuaW1hdGVFbGVtZW50Ojpk
ZXRlcm1pbmVQcm9wZXJ0eVR5cGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUpIGNvbnN0Citib29s
IFNWR0FuaW1hdGVFbGVtZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGFsbG93IGFuaW1hdGlvbiBvZiBhdHRyaWJ1dGUgdHlw
ZXMgb3RoZXIgdGhhbiBBbmltYXRlZENvbG9yIGZvciA8YW5pbWF0ZUNvbG9yPi4KLSAgICBpZiAo
aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSkKLSAgICAgICAgcmV0dXJuIENv
bG9yUHJvcGVydHk7Ci0KLSAgICAvLyBGSVhNRTogTm93IHRoYXQgd2UgaGF2ZSBhIGZ1bGwgcHJv
cGVydHkgdGFibGUgd2UgbmVlZCBhIG1vcmUgZ3JhbnVsYXIgdHlwZSBzcGVjaWZpYyBhbmltYXRp
b24uCi0gICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIHR5cGUgPSB0YXJnZXRFbGVtZW50KCktPmFu
aW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0
dHJpYnV0ZSwgbnVsbEF0b20pKTsKLSAgICBpZiAodHlwZSA9PSBBbmltYXRlZENvbG9yKQotICAg
ICAgICByZXR1cm4gQ29sb3JQcm9wZXJ0eTsKLSAgICBpZiAodHlwZSA9PSBBbmltYXRlZFBhdGgp
Ci0gICAgICAgIHJldHVybiBQYXRoUHJvcGVydHk7Ci0gICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRQ
b2ludHMpCi0gICAgICAgIHJldHVybiBQb2ludHNQcm9wZXJ0eTsKLSAgICByZXR1cm4gTnVtYmVy
UHJvcGVydHk7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVs
ZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdldEVs
ZW1lbnQpICE9IEFuaW1hdGVkVW5rbm93bjsKK30KKworc3RhdGljIGlubGluZSBRdWFsaWZpZWRO
YW1lIHF1YWxpZmllZE5hbWVGb3JBdHRyaWJ1dGVXaXRoUHJlZml4KFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBBU1NFUlQodGFy
Z2V0RWxlbWVudCk7CisKKyAgICBTdHJpbmcgcHJlZml4OworICAgIFN0cmluZyBsb2NhbE5hbWU7
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKCFEb2N1bWVudDo6cGFyc2VRdWFs
aWZpZWROYW1lKGF0dHJpYnV0ZU5hbWUsIHByZWZpeCwgbG9jYWxOYW1lLCBlYykpCisgICAgICAg
IHJldHVybiBhbnlRTmFtZSgpOworICAgIEFTU0VSVCghZWMpOworCisgICAgU3RyaW5nIG5hbWVz
cGFjZVVSSSA9IHRhcmdldEVsZW1lbnQtPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpOworICAg
IGlmIChuYW1lc3BhY2VVUkkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYW55UU5hbWUoKTsK
KworICAgIHJldHVybiBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSk7Cit9CisKK0FuaW1hdGVkQXR0cmlidXRlVHlwZSBTVkdBbmltYXRlRWxlbWVudDo6ZGV0
ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworCisgICAgU3RyaW5nIGF0dHJpYnV0
ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CisgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
IHR5cGUgPSB0YXJnZXRFbGVtZW50LT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdHRyaWJ1dGVOYW1lLCBudWxsQXRvbSkpOworICAgIGlm
ICh0eXBlID09IEFuaW1hdGVkVW5rbm93bikgeworICAgICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUu
Y29udGFpbnMoJzonKSkKKyAgICAgICAgICAgIHJldHVybiBBbmltYXRlZFVua25vd247CisgICAg
ICAgIC8vIEF0dHJpYnV0ZSBpcyBub3QgaW4gdGhlIFNWRyBuYW1lc3BhY2UsIGNoZWNrIGZvciBv
dGhlciBuYW1lc3BhY2VzLgorICAgICAgICBRdWFsaWZpZWROYW1lIHFuYW1lID0gcXVhbGlmaWVk
TmFtZUZvckF0dHJpYnV0ZVdpdGhQcmVmaXgodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7
CisgICAgICAgIGlmIChxbmFtZSA9PSBhbnlRTmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIEFu
aW1hdGVkVW5rbm93bjsKKyAgICAgICAgdHlwZSA9IHRhcmdldEVsZW1lbnQtPmFuaW1hdGVkUHJv
cGVydHlUeXBlRm9yQXR0cmlidXRlKHFuYW1lKTsKKyAgICB9CisKKyAgICBpZiAoaGFzVGFnTmFt
ZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSAmJiB0eXBlICE9IEFuaW1hdGVkQ29sb3IpCisg
ICAgICAgIHJldHVybiBBbmltYXRlZFVua25vd247CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0
eXBlIHNwZWNpZmljIGFuaW1hdGlvbnMgaW4gdGhlIGZ1dHVyZS4gTWFueSBhbmltYXRpb25zIG1h
cmtlZCBhcyBBbmltYXRlZFN0cmluZyB0b2RheSB3aWxsCisgICAgLy8gc3VwcG9ydCBjb250aW51
b3VzIGFuaW1hdGlvbnMuCisgICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRCb29sZWFuCisgICAgICAg
IHx8IHR5cGUgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbgorICAgICAgICB8fCB0eXBlID09IEFuaW1h
dGVkTGVuZ3RoTGlzdAorICAgICAgICB8fCB0eXBlID09IEFuaW1hdGVkTnVtYmVyTGlzdAorICAg
ICAgICB8fCB0eXBlID09IEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIKKyAgICAgICAgfHwg
dHlwZSA9PSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8KKyAgICAgICAgfHwgdHlwZSA9PSBB
bmltYXRlZFJlY3QpCisgICAgICAgIHJldHVybiBBbmltYXRlZFN0cmluZzsKKyAgICBpZiAodHlw
ZSA9PSBBbmltYXRlZEFuZ2xlCisgICAgICAgIHx8IHR5cGUgPT0gQW5pbWF0ZWRJbnRlZ2VyCisg
ICAgICAgIHx8IHR5cGUgPT0gQW5pbWF0ZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBBbmltYXRl
ZE51bWJlcjsKKyAgICAvLyBBbmltYXRpb25zIG9mIHRyYW5zZm9ybSBsaXN0cyBhcmUgbm90IGFs
bG93ZWQgZm9yIDxhbmltYXRlPiBvciA8c2V0PgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRy9hbmltYXRlLmh0bWwjQW5pbWF0aW9uQXR0cmlidXRlc0FuZFByb3BlcnRpZXMKKyAgICBp
ZiAodHlwZSA9PSBBbmltYXRlZFRyYW5zZm9ybUxpc3QpCisgICAgICAgIHJldHVybiBBbmltYXRl
ZFVua25vd247CisKKyAgICByZXR1cm4gdHlwZTsKIH0KIAogdm9pZCBTVkdBbmltYXRlRWxlbWVu
dDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBl
YXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KQpAQCAtMTUyLDkgKzIwMyw5IEBAIHZv
aWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICAgICAgcmV0dXJuOwog
ICAgIFNWR0FuaW1hdGVFbGVtZW50KiByZXN1bHRzID0gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUVs
ZW1lbnQqPihyZXN1bHRFbGVtZW50KTsKICAgICAvLyBDYW4ndCBhY2N1bXVsYXRlIG92ZXIgYSBz
dHJpbmcgcHJvcGVydHkuCi0gICAgaWYgKHJlc3VsdHMtPm1fcHJvcGVydHlUeXBlID09IFN0cmlu
Z1Byb3BlcnR5ICYmIG1fcHJvcGVydHlUeXBlICE9IFN0cmluZ1Byb3BlcnR5KQorICAgIGlmIChy
ZXN1bHRzLT5tX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFN0cmluZyAmJiBtX2Fu
aW1hdGVkQXR0cmlidXRlVHlwZSAhPSBBbmltYXRlZFN0cmluZykKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgIGlmIChtX2Fu
aW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZE51bWJlcikgewogICAgICAgICAvLyBUbyBh
bmltYXRpb24gdXNlcyBjb250cmlidXRpb25zIGZyb20gdGhlIGxvd2VyIHByaW9yaXR5IGFuaW1h
dGlvbnMgYXMgdGhlIGJhc2UgdmFsdWUuCiAgICAgICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRv
QW5pbWF0aW9uKQogICAgICAgICAgICAgbV9mcm9tTnVtYmVyID0gcmVzdWx0cy0+bV9hbmltYXRl
ZE51bWJlcjsKQEAgLTE4OCw3ICsyMzksNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxj
dWxhdGVBbmltYXRlCiAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkTnVtYmVyID0gbnVt
YmVyOwogICAgICAgICByZXR1cm47CiAgICAgfSAKLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0g
Q29sb3JQcm9wZXJ0eSkgeworICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmlt
YXRlZENvbG9yKSB7CiAgICAgICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uKQog
ICAgICAgICAgICAgbV9mcm9tQ29sb3IgPSByZXN1bHRzLT5tX2FuaW1hdGVkQ29sb3I7CiAKQEAg
LTIyMSw3ICsyNzIsNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
CiAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkQ29sb3IgPSBjb2xvcjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUGF0aFByb3BlcnR5KSB7
CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUGF0aCkgewogICAg
ICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikgewogICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlcik7CiAgICAgICAgICAgICBtX2Zyb21Q
YXRoID0gcmVzdWx0cy0+bV9hbmltYXRlZFBhdGhQb2ludGVyLT5jb3B5KCk7CkBAIC0yMzAsNyAr
MjgxLDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAg
ICAgICAgQVNTRVJUKG1fZnJvbVBhdGgpOwogICAgICAgICAgICAgQVNTRVJUKHBlcmNlbnRhZ2Ug
Pj0gMCk7CiAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUGF0aFBvaW50ZXIgPSBtX2Zy
b21QYXRoLmdldCgpOwotICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPT0gMS5mKSB7Cisg
ICAgICAgIH0gZWxzZSBpZiAocGVyY2VudGFnZSA9PSAxKSB7CiAgICAgICAgICAgICBBU1NFUlQo
bV90b1BhdGgpOwogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZFBhdGhQb2ludGVyID0g
bV90b1BhdGguZ2V0KCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yNDgsMTYgKzI5OSwxNiBAQCB2
b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgICAgICAgICAgICAg
QVNTRVJUKG1fZnJvbVBhdGgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX3RvUGF0aCk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHRzLT5tX2FuaW1hdGVkUGF0aCk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZFBhdGhQb2ludGVyID0gKChhbmltYXRpb25Nb2Rl
ID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJjZW50YWdlID4gMC41ZikgfHwgYW5pbWF0aW9uTW9k
ZSA9PSBUb0FuaW1hdGlvbiB8fCBwZXJjZW50YWdlID09IDEuMGYpIAorICAgICAgICAgICAgICAg
IHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlciA9ICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9t
VG9BbmltYXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9B
bmltYXRpb24gfHwgcGVyY2VudGFnZSA9PSAxKSAKICAgICAgICAgICAgICAgICAgICAgPyBtX3Rv
UGF0aC5nZXQoKSA6IG1fZnJvbVBhdGguZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUG9pbnRz
UHJvcGVydHkpIHsKKyAgICBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRQ
b2ludHMpIHsKICAgICAgICAgaWYgKCFwZXJjZW50YWdlKQogICAgICAgICAgICAgcmVzdWx0cy0+
bV9hbmltYXRlZFBvaW50cyA9IG1fZnJvbVBvaW50czsKLSAgICAgICAgZWxzZSBpZiAocGVyY2Vu
dGFnZSA9PSAxLmYpCisgICAgICAgIGVsc2UgaWYgKHBlcmNlbnRhZ2UgPT0gMSkKICAgICAgICAg
ICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQb2ludHMgPSBtX3RvUG9pbnRzOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIGlmICghbV9mcm9tUG9pbnRzLmlzRW1wdHkoKSAmJiAhbV90b1BvaW50
cy5pc0VtcHR5KCkpCkBAIC0yNjYsNyArMzE3LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6
Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQb2lu
dHMuY2xlYXIoKTsKICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBkaXNjcmV0ZSBhbmltYXRp
b24gaWYgdGhlIHBvaW50cyBhcmUgbm90IGNvbXBhdGlibGUKICAgICAgICAgICAgIGlmIChyZXN1
bHRzLT5tX2FuaW1hdGVkUG9pbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXN1bHRz
LT5tX2FuaW1hdGVkUG9pbnRzID0gKChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiAm
JiBwZXJjZW50YWdlID4gMC41ZikgfHwgYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbiB8fCBw
ZXJjZW50YWdlID09IDEuMGYpIAorICAgICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQ
b2ludHMgPSAoKGFuaW1hdGlvbk1vZGUgPT0gRnJvbVRvQW5pbWF0aW9uICYmIHBlcmNlbnRhZ2Ug
PiAwLjVmKSB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0g
MSkgCiAgICAgICAgICAgICAgICAgICAgID8gbV90b1BvaW50cyA6IG1fZnJvbVBvaW50czsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC0yODMsNyArMzM0LDcgQEAgdm9pZCBTVkdBbmlt
YXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0cy0+
bV9hbmltYXRlZFN0cmluZyA9IG1fZnJvbVN0cmluZzsKICAgICAvLyBIaWdoZXIgcHJpb3JpdHkg
cmVwbGFjZSBhbmltYXRpb24gb3ZlcnJpZGVzIGFueSBhZGRpdGl2ZSByZXN1bHRzIHNvIGZhci4K
LSAgICByZXN1bHRzLT5tX3Byb3BlcnR5VHlwZSA9IFN0cmluZ1Byb3BlcnR5OworICAgIHJlc3Vs
dHMtPm1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID0gQW5pbWF0ZWRTdHJpbmc7CiB9CiAKIHN0YXRp
YyBib29sIGluaGVyaXRzRnJvbVByb3BlcnR5KFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTMxMSw4
ICszNjIsOCBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAgICAg
bV90b1Byb3BlcnR5VmFsdWVUeXBlID0gaW5oZXJpdHNGcm9tUHJvcGVydHkodGFyZ2V0RWxlbWVu
dCwgYXR0cmlidXRlTmFtZSgpLCB0b1N0cmluZykgPyBJbmhlcml0VmFsdWUgOiBSZWd1bGFyUHJv
cGVydHlWYWx1ZTsKIAogICAgIC8vIEZJWE1FOiBOZWVkcyBtb3JlIHNvbGlkIHdheSBkZXRlcm1p
bmUgdGFyZ2V0IGF0dHJpYnV0ZSB0eXBlLgotICAgIG1fcHJvcGVydHlUeXBlID0gZGV0ZXJtaW5l
UHJvcGVydHlUeXBlKGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09
IENvbG9yUHJvcGVydHkpIHsKKyAgICBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9IGRldGVybWlu
ZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KTsKKyAgICBpZiAobV9hbmltYXRl
ZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRDb2xvcikgewogICAgICAgICBib29sIGZyb21Jc0N1
cnJlbnRDb2xvciA9IGF0dHJpYnV0ZVZhbHVlSXNDdXJyZW50Q29sb3IoZnJvbVN0cmluZyk7CiAg
ICAgICAgIGJvb2wgdG9Jc0N1cnJlbnRDb2xvciA9IGF0dHJpYnV0ZVZhbHVlSXNDdXJyZW50Q29s
b3IodG9TdHJpbmcpOwogICAgICAgICBpZiAoZnJvbUlzQ3VycmVudENvbG9yKQpAQCAtMzI3LDE0
ICszNzgsMTQgQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogICAg
ICAgICBib29sIHRvSXNWYWxpZCA9IG1fdG9Db2xvci5pc1ZhbGlkKCkgfHwgdG9Jc0N1cnJlbnRD
b2xvciB8fCBtX3RvUHJvcGVydHlWYWx1ZVR5cGUgPT0gSW5oZXJpdFZhbHVlOwogICAgICAgICBp
ZiAoKGZyb21Jc1ZhbGlkICYmIHRvSXNWYWxpZCkgfHwgKHRvSXNWYWxpZCAmJiBhbmltYXRpb25N
b2RlKCkgPT0gVG9BbmltYXRpb24pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBl
bHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgIH0gZWxzZSBp
ZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWROdW1iZXIpIHsKICAgICAgICAg
bV9udW1iZXJVbml0ID0gU3RyaW5nKCk7CiAgICAgICAgIGlmIChwYXJzZU51bWJlclZhbHVlQW5k
VW5pdCh0b1N0cmluZywgbV90b051bWJlciwgbV9udW1iZXJVbml0KSkgewogICAgICAgICAgICAg
Ly8gRm9yIHRvLWFuaW1hdGlvbnMgdGhlIGZyb20gbnVtYmVyIGlzIGNhbGN1bGF0ZWQgbGF0ZXIK
ICAgICAgICAgICAgIGlmIChhbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24gfHwgcGFyc2VO
dW1iZXJWYWx1ZUFuZFVuaXQoZnJvbVN0cmluZywgbV9mcm9tTnVtYmVyLCBtX251bWJlclVuaXQp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChtX3Byb3BlcnR5VHlwZSA9PSBQYXRoUHJvcGVydHkpIHsKKyAgICB9IGVsc2UgaWYgKG1fYW5p
bWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUGF0aCkgewogICAgICAgICBTVkdQYXRoUGFy
c2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7CiAgICAg
ICAgIGlmIChmYWN0b3J5LT5idWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyh0b1N0cmlu
ZywgbV90b1BhdGgsIFVuYWx0ZXJlZFBhcnNpbmcpKSB7CiAgICAgICAgICAgICAvLyBGb3IgdG8t
YW5pbWF0aW9ucyB0aGUgZnJvbSBudW1iZXIgaXMgY2FsY3VsYXRlZCBsYXRlcgpAQCAtMzQzLDcg
KzM5NCw3IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKICAgICAg
ICAgfQogICAgICAgICBtX2Zyb21QYXRoLmNsZWFyKCk7CiAgICAgICAgIG1fdG9QYXRoLmNsZWFy
KCk7Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBQb2ludHNQcm9wZXJ0eSkgewor
ICAgIH0gZWxzZSBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRQb2ludHMp
IHsKICAgICAgICAgbV9mcm9tUG9pbnRzLmNsZWFyKCk7CiAgICAgICAgIGlmIChwb2ludHNMaXN0
RnJvbVNWR0RhdGEobV9mcm9tUG9pbnRzLCBmcm9tU3RyaW5nKSkgewogICAgICAgICAgICAgbV90
b1BvaW50cy5jbGVhcigpOwpAQCAtMzUzLDcgKzQwNCw3IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1l
bnQ6OmNhbGN1bGF0ZUZyb21BbmQKICAgICB9CiAgICAgbV9mcm9tU3RyaW5nID0gZnJvbVN0cmlu
ZzsKICAgICBtX3RvU3RyaW5nID0gdG9TdHJpbmc7Ci0gICAgbV9wcm9wZXJ0eVR5cGUgPSBTdHJp
bmdQcm9wZXJ0eTsKKyAgICBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9IEFuaW1hdGVkU3RyaW5n
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNjYsOCArNDE3LDggQEAgYm9vbCBTVkdBbmlt
YXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9
IGluaGVyaXRzRnJvbVByb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgYnlT
dHJpbmcpID8gSW5oZXJpdFZhbHVlIDogUmVndWxhclByb3BlcnR5VmFsdWU7CiAKICAgICBBU1NF
UlQoIWhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpOwotICAgIG1fcHJvcGVydHlUeXBlID0g
ZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgaWYgKG1fcHJvcGVy
dHlUeXBlID09IENvbG9yUHJvcGVydHkpIHsKKyAgICBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9
IGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KTsKKyAgICBpZiAo
bV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRDb2xvcikgewogICAgICAgICBib29s
IGZyb21Jc0N1cnJlbnRDb2xvciA9IGF0dHJpYnV0ZVZhbHVlSXNDdXJyZW50Q29sb3IoZnJvbVN0
cmluZyk7CiAgICAgICAgIGJvb2wgYnlJc0N1cnJlbnRDb2xvciA9IGF0dHJpYnV0ZVZhbHVlSXND
dXJyZW50Q29sb3IoYnlTdHJpbmcpOwogICAgICAgICBpZiAoZnJvbUlzQ3VycmVudENvbG9yKQpA
QCAtMzk2LDE2ICs0NDcsMTggQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJv
bUFuZAogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKGNvbnN0IFN0
cmluZyYgYmFzZVN0cmluZykKIHsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhp
cy0+dGFyZ2V0RWxlbWVudCgpOworICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKICAgICBtX2Fu
aW1hdGVkU3RyaW5nID0gYmFzZVN0cmluZzsKLSAgICBQcm9wZXJ0eVR5cGUgbGFzdFR5cGUgPSBt
X3Byb3BlcnR5VHlwZTsKLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlw
ZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3Bl
cnR5KSB7CisgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGxhc3RUeXBlID0gbV9hbmltYXRlZEF0
dHJpYnV0ZVR5cGU7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1pbmVBbmlt
YXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRy
aWJ1dGVUeXBlID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgbV9hbmltYXRlZENvbG9yID0g
YmFzZVN0cmluZy5pc0VtcHR5KCkgPyBDb2xvcigpIDogU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNv
bG9yU3RyaW5nKGJhc2VTdHJpbmcpOwogICAgICAgICBpZiAoaXNDb250cmlidXRpbmcoZWxhcHNl
ZCgpKSkgewotICAgICAgICAgICAgbV9wcm9wZXJ0eVR5cGUgPSBsYXN0VHlwZTsKKyAgICAgICAg
ICAgIG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID0gbGFzdFR5cGU7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09IE51bWJlclBy
b3BlcnR5KSB7CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmlt
YXRlZE51bWJlcikgewogICAgICAgICBpZiAoYmFzZVN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIG1fYW5pbWF0ZWROdW1iZXIgPSAwOwogICAgICAgICAgICAgbV9udW1iZXJVbml0ID0g
U3RyaW5nKCk7CkBAIC00MTMsMjcgKzQ2NiwyNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50Ojpy
ZXNldFRvQmFzZVZhbHVlCiAgICAgICAgIH0KICAgICAgICAgaWYgKHBhcnNlTnVtYmVyVmFsdWVB
bmRVbml0KGJhc2VTdHJpbmcsIG1fYW5pbWF0ZWROdW1iZXIsIG1fbnVtYmVyVW5pdCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBQYXRoUHJv
cGVydHkpIHsKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1h
dGVkUGF0aCkgewogICAgICAgICBtX2FuaW1hdGVkUGF0aC5jbGVhcigpOwogICAgICAgICBTVkdQ
YXRoUGFyc2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7
CiAgICAgICAgIGZhY3RvcnktPmJ1aWxkU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGJhc2VT
dHJpbmcsIG1fYW5pbWF0ZWRQYXRoLCBVbmFsdGVyZWRQYXJzaW5nKTsKICAgICAgICAgbV9hbmlt
YXRlZFBhdGhQb2ludGVyID0gbV9hbmltYXRlZFBhdGguZ2V0KCk7CiAgICAgICAgIHJldHVybjsK
LSAgICB9IGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09IFBvaW50c1Byb3BlcnR5KSB7CisgICAg
fSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBvaW50cykgewog
ICAgICAgICBtX2FuaW1hdGVkUG9pbnRzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbV9wcm9wZXJ0eVR5cGUgPSBTdHJpbmdQcm9wZXJ0eTsKKyAgICBtX2FuaW1hdGVkQXR0
cmlidXRlVHlwZSA9IEFuaW1hdGVkU3RyaW5nOwogfQogICAgIAogdm9pZCBTVkdBbmltYXRlRWxl
bWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogewogICAgIFN0cmluZyB2YWx1ZVRvQXBwbHk7
Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9yUHJvcGVydHkpCisgICAgaWYgKG1fYW5p
bWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkQ29sb3IpCiAgICAgICAgIHZhbHVlVG9BcHBs
eSA9IG1fYW5pbWF0ZWRDb2xvci5zZXJpYWxpemVkKCk7Ci0gICAgZWxzZSBpZiAobV9wcm9wZXJ0
eVR5cGUgPT0gTnVtYmVyUHJvcGVydHkpCisgICAgZWxzZSBpZiAobV9hbmltYXRlZEF0dHJpYnV0
ZVR5cGUgPT0gQW5pbWF0ZWROdW1iZXIpCiAgICAgICAgIHZhbHVlVG9BcHBseSA9IFN0cmluZzo6
bnVtYmVyKG1fYW5pbWF0ZWROdW1iZXIpICsgbV9udW1iZXJVbml0OwotICAgIGVsc2UgaWYgKG1f
cHJvcGVydHlUeXBlID09IFBhdGhQcm9wZXJ0eSkgeworICAgIGVsc2UgaWYgKG1fYW5pbWF0ZWRB
dHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUGF0aCkgewogICAgICAgICBpZiAoIW1fYW5pbWF0ZWRQ
YXRoUG9pbnRlciB8fCBtX2FuaW1hdGVkUGF0aFBvaW50ZXItPmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIHZhbHVlVG9BcHBseSA9IG1fYW5pbWF0ZWRTdHJpbmc7CiAgICAgICAgIGVsc2UgewpAQCAt
NDQ0LDcgKzQ5Nyw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGEK
ICAgICAgICAgICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNl
ckZhY3Rvcnk6OnNlbGYoKTsKICAgICAgICAgICAgIGZhY3RvcnktPmJ1aWxkU3RyaW5nRnJvbUJ5
dGVTdHJlYW0obV9hbmltYXRlZFBhdGhQb2ludGVyLCB2YWx1ZVRvQXBwbHksIFVuYWx0ZXJlZFBh
cnNpbmcpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBQb2lu
dHNQcm9wZXJ0eSkKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFu
aW1hdGVkUG9pbnRzKQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkUG9pbnRzLmlz
RW1wdHkoKSA/IG1fYW5pbWF0ZWRTdHJpbmcgOiBtX2FuaW1hdGVkUG9pbnRzLnZhbHVlQXNTdHJp
bmcoKTsKICAgICBlbHNlCiAgICAgICAgIHZhbHVlVG9BcHBseSA9IG1fYW5pbWF0ZWRTdHJpbmc7
CkBAIC00NTQsMzEgKzUwNywzMSBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3Vs
dHNUb1RhCiAgICAgCiBmbG9hdCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2Uo
Y29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewotICAg
IG1fcHJvcGVydHlUeXBlID0gZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGF0dHJpYnV0ZU5hbWUoKSk7
Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IE51bWJlclByb3BlcnR5KSB7CisgICAgU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBpZiAoIXRh
cmdldEVsZW1lbnQpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBtX2FuaW1hdGVkQXR0cmlidXRl
VHlwZSA9IGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KTsKKyAg
ICBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWROdW1iZXIpIHsKICAgICAg
ICAgZG91YmxlIGZyb207CiAgICAgICAgIGRvdWJsZSB0bzsKICAgICAgICAgU3RyaW5nIHVuaXQ7
CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoZnJvbVN0cmluZywgZnJvbSwg
dW5pdCkpCi0gICAgICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
ICAgICAgICAgaWYgKCFwYXJzZU51bWJlclZhbHVlQW5kVW5pdCh0b1N0cmluZywgdG8sIHVuaXQp
KQotICAgICAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
ICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZhYnModG8gLSBmcm9tKSk7CiAgICAg
fQotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7CisgICAgaWYgKG1f
YW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgQ29sb3Ig
ZnJvbSA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsKICAg
ICAgICAgaWYgKCFmcm9tLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAtMS5mOworICAg
ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBDb2xvciB0byA9IFNWR0NvbG9yOjpjb2xvckZy
b21SR0JDb2xvclN0cmluZyh0b1N0cmluZyk7CiAgICAgICAgIGlmICghdG8uaXNWYWxpZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg
IHJldHVybiBDb2xvckRpc3RhbmNlKGZyb20sIHRvKS5kaXN0YW5jZSgpOwogICAgIH0KLSAgICBy
ZXR1cm4gLTEuZjsKKyAgICByZXR1cm4gLTE7CiB9CiAgICAKIH0KLQotLy8gdmltOnRzPTQ6bm9l
dAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlRWxlbWVudC5oCShyZXZpc2lvbiA3ODczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCwxMCBAQCBwcml2YXRl
OgogICAgICAgICBDdXJyZW50Q29sb3JWYWx1ZSwKICAgICAgICAgSW5oZXJpdFZhbHVlCiAgICAg
fTsKLSAgICBlbnVtIFByb3BlcnR5VHlwZSB7IE51bWJlclByb3BlcnR5LCBDb2xvclByb3BlcnR5
LCBTdHJpbmdQcm9wZXJ0eSwgUGF0aFByb3BlcnR5LCBQb2ludHNQcm9wZXJ0eSB9OwotICAgIFBy
b3BlcnR5VHlwZSBkZXRlcm1pbmVQcm9wZXJ0eVR5cGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUp
IGNvbnN0OwotICAgIFByb3BlcnR5VHlwZSBtX3Byb3BlcnR5VHlwZTsKKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Q7CisgICAgQW5pbWF0ZWRBdHRy
aWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZShTVkdFbGVtZW50KikgY29u
c3Q7CisgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlOwog
CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX2Zyb21Qcm9wZXJ0eVZhbHVlVHlwZTsK
ICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNCArNTMsMTcgQEAgUGFzc1JlZlB0cjxT
VkdBbmltYXRlTW90aW9uRWxlbWVudD4gU1ZHQQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdB
bmltYXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKSBjb25zdAorYm9vbCBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKIHsKLSAgICBp
ZiAoIVNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxl
bWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHNwZWNpYWwgYXR0cmlidXRlIG5hbWUgdG8gdmVyaWZ5
IHRoZSBhbmltYXRpb24gdHlwZS4gQ2hlY2sgdGhlIGVsZW1lbnQgbmFtZSBpbnN0ZWFkLgogICAg
IGlmICghdGFyZ2V0RWxlbWVudC0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkgJiYgIXRhcmdldEVs
ZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRUYWcpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgLy8gU3BlYzogU1ZHIDEuMSBzZWN0aW9uIDE5LjIuMTUKKyAgICAvLyBGSVhNRTog
c3ZnVGFnIGlzIG1pc3NpbmcuIE5lZWRzIHRvIGJlIGNoZWNrZWQsIGlmIHRyYW5zZm9ybWluZyA8
c3ZnPiBjb3VsZCBjYXVzZSBwcm9ibGVtcy4KICAgICBpZiAodGFyZ2V0RWxlbWVudC0+aGFzVGFn
TmFtZShnVGFnKQogICAgICAgICB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKGRlZnNUYWcp
CiAgICAgICAgIHx8IHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUodXNlVGFnKQpAQCAtMTM0LDEx
ICsxMzcsMTEgQEAgc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIAogICAg
IGlmICghc2tpcE9wdGlvbmFsU3BhY2VzKGN1ciwgZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGZsb2F0IHggPSAwLjBmOworICAgIGZsb2F0IHggPSAwOwogICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgZmxvYXQgeSA9IDAuMGY7CisgICAgZmxvYXQgeSA9IDA7CiAgICAgaWYgKCFwYXJzZU51bWJl
cihjdXIsIGVuZCwgeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTE1MCwxMCAr
MTUzLDkgQEAgc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIAogICAgIAog
dm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJp
bmcmKQogewotICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKKyAgICBpZiAoIWhhc1ZhbGlkQXR0
cmlidXRlVHlwZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0g
dGFyZ2V0RWxlbWVudCgpOwotICAgIEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtID0gdGFyZ2V0
LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9y
bSA9IHRhcmdldEVsZW1lbnQoKS0+c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CiAgICAgaWYgKCF0
cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKICAgICB0cmFuc2Zvcm0tPm1ha2VJZGVudGl0eSgp
OwpAQCAtMTc3LDE1ICsxNzksMTUgQEAgYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2Fs
Y3VsYXRlRgogCiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkLCBTVkdTTUlMRWxlbWVudCopCiB7Ci0g
ICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudCgpOwotICAgIGlmICghdGFyZ2V0
KQorICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7
CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgQWZmaW5lVHJh
bnNmb3JtKiB0cmFuc2Zvcm0gPSB0YXJnZXQtPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOworICAg
IEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtID0gdGFyZ2V0RWxlbWVudC0+c3VwcGxlbWVudGFs
VHJhbnNmb3JtKCk7CiAgICAgaWYgKCF0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICh0YXJnZXQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHRhcmdldC0+cmVuZGVyZXIoKS0+c2V0
TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKTsKKyAgICBpZiAodGFyZ2V0RWxlbWVudC0+cmVuZGVyZXIo
KSkKKyAgICAgICAgdGFyZ2V0RWxlbWVudC0+cmVuZGVyZXIoKS0+c2V0TmVlZHNUcmFuc2Zvcm1V
cGRhdGUoKTsKIAogICAgIGlmICghaXNBZGRpdGl2ZSgpKQogICAgICAgICB0cmFuc2Zvcm0tPm1h
a2VJZGVudGl0eSgpOwpAQCAtMjA0LDcgKzIwNiw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICAgICAgICAgIGlmIChyb3RhdGVNb2RlID09IFJvdGF0ZUF1
dG8gfHwgcm90YXRlTW9kZSA9PSBSb3RhdGVBdXRvUmV2ZXJzZSkgewogICAgICAgICAgICAgICAg
IGZsb2F0IGFuZ2xlID0gcGF0aC5ub3JtYWxBbmdsZUF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBv
ayk7CiAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2Up
Ci0gICAgICAgICAgICAgICAgICAgIGFuZ2xlICs9IDE4MC5mOworICAgICAgICAgICAgICAgICAg
ICBhbmdsZSArPSAxODA7CiAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5yb3RhdGUoYW5nbGUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTAsMTMgKzI1MiwxMiBAQCBmbG9hdCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlCiAgICAgRmxvYXRQb2ludCBmcm9tOwog
ICAgIEZsb2F0UG9pbnQgdG87CiAgICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20p
KQotICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghcGFy
c2VQb2ludCh0b1N0cmluZywgdG8pKQotICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAgcmV0
dXJuIC0xOwogICAgIEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOwogICAgIHJldHVybiBzcXJ0
ZihkaWZmLndpZHRoKCkgKiBkaWZmLndpZHRoKCkgKyBkaWZmLmhlaWdodCgpICogZGlmZi5oZWln
aHQoKSk7CiB9CiAKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNzg3MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgdmly
dHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1Zh
bGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCkBAIC03Myw1ICs3MywzIEBAIHByaXZhdGU6CiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNlbmRpZiAvLyBTVkdBbmltYXRlTW90aW9u
RWxlbWVudF9oCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNzg3MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSwxNCArNTksMjUgQEAgUGFzc1JlZlB0cjxTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudD4gUwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKSBjb25zdAorYm9vbCBTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3QKIHsKICAgICBTVkdFbGVt
ZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwotICAgIHJldHVybiBT
VkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpCi0gICAgICAgICYmICh0YXJnZXRF
bGVtZW50LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKQotICAgICAgICB8fCB0YXJnZXRFbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKQotICAgICAgICB8fCB0YXJnZXRFbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykKLSAgICAgICAgfHwgdGFy
Z2V0RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKTsKKyAg
ICBpZiAoIXRhcmdldEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQpID09IEFu
aW1hdGVkVHJhbnNmb3JtTGlzdDsKK30KKworQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OjpkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7
CisgICAgCisgICAgLy8gSnVzdCB0cmFuc2Zvcm0gbGlzdHMgY2FuIGJlIGFuaW1hdGVkIHdpdGgg
PGFuaW1hdGVUcmFuc2Zvcm0+CisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2FuaW1h
dGUuaHRtbCNBbmltYXRpb25BdHRyaWJ1dGVzQW5kUHJvcGVydGllcworICAgIGlmICh0YXJnZXRF
bGVtZW50LT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBhdHRyaWJ1dGVOYW1lKCksIG51bGxBdG9tKSkgIT0gQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0KQorICAgICAgICByZXR1cm4gQW5pbWF0ZWRVbmtub3duOworCisgICAgcmV0dXJuIEFuaW1h
dGVkVHJhbnNmb3JtTGlzdDsKIH0KIAogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQpAQCAtMTAyLDI2ICsxMTMsMjcg
QEAgc3RhdGljIFNWR1RyYW5zZm9ybUxpc3QqIHRyYW5zZm9ybUxpc3RGbwogICAgIAogdm9pZCBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcm
IGJhc2VWYWx1ZSkKIHsKLSAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgU1ZHRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdl
dEVsZW1lbnQgfHwgZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQp
ID09IEFuaW1hdGVkVW5rbm93bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRhcmdldEVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWcpIHx8IHRhcmdl
dEVsZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKSB7Ci0g
ICAgICAgIHRhcmdldEVsZW1lbnQoKS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVudFRy
YW5zZm9ybUF0dHIsIGJhc2VWYWx1ZS5pc0VtcHR5KCkgPyAibWF0cml4KDEgMCAwIDEgMCAwKSIg
OiBiYXNlVmFsdWUpOworICAgIGlmICh0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVz
OjpsaW5lYXJHcmFkaWVudFRhZykgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1l
czo6cmFkaWFsR3JhZGllbnRUYWcpKSB7CisgICAgICAgIHRhcmdldEVsZW1lbnQtPnNldEF0dHJp
YnV0ZShTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyLCBiYXNlVmFsdWUuaXNFbXB0eSgp
ID8gIm1hdHJpeCgxIDAgMCAxIDAgMCkiIDogYmFzZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChiYXNlVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChTVkdU
cmFuc2Zvcm1MaXN0KiBsaXN0ID0gdHJhbnNmb3JtTGlzdEZvcih0YXJnZXRFbGVtZW50KCkpKQor
ICAgICAgICBpZiAoU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCA9IHRyYW5zZm9ybUxpc3RGb3IodGFy
Z2V0RWxlbWVudCkpCiAgICAgICAgICAgICBsaXN0LT5jbGVhcigpOwogICAgIH0gZWxzZQotICAg
ICAgICB0YXJnZXRFbGVtZW50KCktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0
ciwgYmFzZVZhbHVlKTsKKyAgICAgICAgdGFyZ2V0RWxlbWVudC0+c2V0QXR0cmlidXRlKFNWR05h
bWVzOjp0cmFuc2Zvcm1BdHRyLCBiYXNlVmFsdWUpOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVu
c2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpCit2b2lkIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNl
bnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqKQogewotICAgIGlmICghaGFz
VmFsaWRUYXJnZXQoKSkKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFy
Z2V0RWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCBkZXRlcm1pbmVBbmltYXRl
ZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCkgPT0gQW5pbWF0ZWRVbmtub3duKQogICAgICAg
ICByZXR1cm47Ci0gICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHJlc3VsdEVsZW1lbnQt
PnRhcmdldEVsZW1lbnQoKTsKICAgICBTVkdUcmFuc2Zvcm1MaXN0KiB0cmFuc2Zvcm1MaXN0ID0g
dHJhbnNmb3JtTGlzdEZvcih0YXJnZXRFbGVtZW50KTsKICAgICBBU1NFUlQodHJhbnNmb3JtTGlz
dCk7CiAKQEAgLTE0Niw3ICsxNTgsNiBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpjYWxjdWxhCiAKIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUZy
b21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlT
dHJpbmcpCiB7Ci0KICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKGZy
b21TdHJpbmcpOwogICAgIGlmICghbV9mcm9tVHJhbnNmb3JtLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTY4LDEzICsxNzksMTEgQEAgU1ZHVHJhbnNmb3JtIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OgogICAgIAogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogewotICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIFdlIGFjY3VtdWxhdGUgdG8gdGhlIHRhcmdldCBlbGVt
ZW50IHRyYW5zZm9ybSBsaXN0IHNvIHRoZXJlIGlzIG5vdCBtdWNoIHRvIGRvIGhlcmUuCiAgICAg
U1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKLSAgICBp
ZiAoIXRhcmdldEVsZW1lbnQpCisgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8IGRldGVybWluZUFu
aW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBBbmltYXRlZFVua25vd24pCiAg
ICAgICAgIHJldHVybjsKIAorICAgIC8vIFdlIGFjY3VtdWxhdGUgdG8gdGhlIHRhcmdldCBlbGVt
ZW50IHRyYW5zZm9ybSBsaXN0IHNvIHRoZXJlIGlzIG5vdCBtdWNoIHRvIGRvIGhlcmUuCiAgICAg
aWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0YXJnZXRFbGVtZW50LT5yZW5kZXJlcigpKSB7
CiAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpOwogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uKHJlbmRlcmVyKTsKQEAgLTIxMCwxMCArMjE5LDEwIEBAIGZsb2F0IFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpjYWxjdWwKICAgICAvLyBpcyBwYWNlZCBzZXBhcmF0ZWx5LiBUbyBpbXBs
ZW1lbnQgdGhpcyB3ZSBuZWVkIHRvIHRyZWF0IGVhY2ggY29tcG9uZW50IGFzIGluZGl2aWR1YWwg
YW5pbWF0aW9uIGV2ZXJ5d2hlcmUuCiAgICAgU1ZHVHJhbnNmb3JtIGZyb20gPSBwYXJzZVRyYW5z
Zm9ybVZhbHVlKGZyb21TdHJpbmcpOwogICAgIGlmICghZnJvbS5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybiAtMS5mOworICAgICAgICByZXR1cm4gLTE7CiAgICAgU1ZHVHJhbnNmb3JtIHRvID0g
cGFyc2VUcmFuc2Zvcm1WYWx1ZSh0b1N0cmluZyk7CiAgICAgaWYgKCF0by5pc1ZhbGlkKCkgfHwg
ZnJvbS50eXBlKCkgIT0gdG8udHlwZSgpKQotICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAg
cmV0dXJuIC0xOwogICAgIGlmICh0by50eXBlKCkgPT0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1RSQU5TTEFURSkgewogICAgICAgICBGbG9hdFNpemUgZGlmZiA9IHRvLnRyYW5zbGF0ZSgp
IC0gZnJvbS50cmFuc2xhdGUoKTsKICAgICAgICAgcmV0dXJuIHNxcnRmKGRpZmYud2lkdGgoKSAq
IGRpZmYud2lkdGgoKSArIGRpZmYuaGVpZ2h0KCkgKiBkaWZmLmhlaWdodCgpKTsKQEAgLTIyNCwx
MSArMjMzLDggQEAgZmxvYXQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bAogICAg
ICAgICBGbG9hdFNpemUgZGlmZiA9IHRvLnNjYWxlKCkgLSBmcm9tLnNjYWxlKCk7CiAgICAgICAg
IHJldHVybiBzcXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZmLndpZHRoKCkgKyBkaWZmLmhlaWdodCgp
ICogZGlmZi5oZWlnaHQoKSk7CiAgICAgfQotICAgIHJldHVybiAtMS5mOworICAgIHJldHVybiAt
MTsKIH0KIAogfQotCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKLQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
LmgJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkgY29uc3Q7
CisgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIGRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlw
ZShTVkdFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CiAKQEAgLTY0LDUgKzY1LDMgQEAgcHJpdmF0ZToKIAogI2VuZGlm
IC8vIEVOQUJMRShTVkcpCiAjZW5kaWYgLy8gU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnRfaAot
Ci0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwCShyZXZpc2lvbiA3ODczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBzdGF0
aWMgdm9pZCBwYXJzZUtleVRpbWVzKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIFN0cmluZyB0aW1l
U3RyaW5nID0gcGFyc2VMaXN0W25dOwogICAgICAgICBib29sIG9rOwogICAgICAgICBmbG9hdCB0
aW1lID0gdGltZVN0cmluZy50b0Zsb2F0KCZvayk7Ci0gICAgICAgIGlmICghb2sgfHwgdGltZSA8
IDAgfHwgdGltZSA+IDEuZikKKyAgICAgICAgaWYgKCFvayB8fCB0aW1lIDwgMCB8fCB0aW1lID4g
MSkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgaWYgKHZlcmlmeU9yZGVyKSB7CiAg
ICAgICAgICAgICBpZiAoIW4pIHsKQEAgLTk4LDI1ICs5OCwyNSBAQCBzdGF0aWMgdm9pZCBwYXJz
ZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwog
ICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICAgICAgZmxvYXQgcG9zQSA9IDAuMGY7CisgICAgICAgIGZsb2F0IHBvc0EgPSAwOwogICAgICAg
ICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewogICAgICAgICAgICAgcmVzdWx0
LmNsZWFyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmbG9h
dCBwb3NCID0gMC4wZjsKKyAgICAgICAgZmxvYXQgcG9zQiA9IDA7CiAgICAgICAgIGlmICghcGFy
c2VOdW1iZXIoY3VyLCBlbmQsIHBvc0IpKSB7CiAgICAgICAgICAgICByZXN1bHQuY2xlYXIoKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGZsb2F0IHBvc0MgPSAw
LjBmOworICAgICAgICBmbG9hdCBwb3NDID0gMDsKICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQykpIHsKICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXQgcG9zRCA9IDAuMGY7CisgICAg
ICAgIGZsb2F0IHBvc0QgPSAwOwogICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBw
b3NELCBmYWxzZSkpIHsKICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjkwLDExICsyOTAsNiBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omlz
QWNjdW11bGF0ZWQoCiAgICAgcmV0dXJuIHZhbHVlID09IHN1bSAmJiBhbmltYXRpb25Nb2RlKCkg
IT0gVG9BbmltYXRpb247CiB9CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiB0YXJnZXRFbGVtZW50KCk7Ci19Ci0KIGJvb2wg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eShTVkdFbGVt
ZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAg
QVNTRVJUKHRhcmdldEVsZW1lbnQpOwpAQCAtMzA2LDcgKzMwMSw3IEBAIGJvb2wgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWIKIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojpz
ZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQorICAgIGlmICghaGFzVmFsaWRBdHRyaWJ1dGVUeXBl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhp
cy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0
cmlidXRlTmFtZSgpOwpAQCAtMzc1LDEzICszNzAsMTMgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVt
ZW50OjpjYWxjdWxhdGVLZXlUaQogICAgIC8vIE5vcm1hbGl6ZS4KICAgICBmb3IgKHVuc2lnbmVk
IG4gPSAxOyBuIDwga2V5VGltZXNGb3JQYWNlZC5zaXplKCkgLSAxOyArK24pCiAgICAgICAgIGtl
eVRpbWVzRm9yUGFjZWRbbl0gPSBrZXlUaW1lc0ZvclBhY2VkW24gLSAxXSArIGtleVRpbWVzRm9y
UGFjZWRbbl0gLyB0b3RhbERpc3RhbmNlOwotICAgIGtleVRpbWVzRm9yUGFjZWRba2V5VGltZXNG
b3JQYWNlZC5zaXplKCkgLSAxXSA9IDEuZjsKKyAgICBrZXlUaW1lc0ZvclBhY2VkW2tleVRpbWVz
Rm9yUGFjZWQuc2l6ZSgpIC0gMV0gPSAxOwogCiAgICAgLy8gVXNlIGtleSB0aW1lcyBjYWxjdWxh
dGVkIGJhc2VkIG9uIHBhY2luZyBpbnN0ZWFkIG9mIHRoZSB1c2VyIHByb3ZpZGVkIG9uZXMuCiAg
ICAgbV9rZXlUaW1lcy5zd2FwKGtleVRpbWVzRm9yUGFjZWQpOwogfQogCi1zdGF0aWMgaW5saW5l
IGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKSB7IHJldHVybiAxLiAvICgyMDAu
ICogZHVyYXRpb24pOyB9CitzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91Ymxl
IGR1cmF0aW9uKSB7IHJldHVybiAxIC8gKDIwMCAqIGR1cmF0aW9uKTsgfQogCiB1bnNpZ25lZCBT
VkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVLZXlUaW1lc0luZGV4KGZsb2F0IHBlcmNlbnQp
IGNvbnN0CiB7CkBAIC00MTksOSArNDE0LDkgQEAgZmxvYXQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
Y2FsY3VsYXRlUGVyYwogICAgIGZsb2F0IHRvS2V5UG9pbnQgPSBtX2tleVBvaW50c1tpbmRleCAr
IDFdOwogICAgIAogICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlRGlzY3JldGUpCi0gICAg
ICAgIHJldHVybiBwZXJjZW50ID09IDEuMGYgPyB0b0tleVBvaW50IDogZnJvbUtleVBvaW50Owor
ICAgICAgICByZXR1cm4gcGVyY2VudCA9PSAxID8gdG9LZXlQb2ludCA6IGZyb21LZXlQb2ludDsK
ICAgICAKLSAgICBmbG9hdCBrZXlQb2ludFBlcmNlbnQgPSBwZXJjZW50ID09IDEuMGYgPyAxLjBm
IDogKHBlcmNlbnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOwor
ICAgIGZsb2F0IGtleVBvaW50UGVyY2VudCA9IHBlcmNlbnQgPT0gMSA/IDEgOiAocGVyY2VudCAt
IGZyb21QZXJjZW50KSAvICh0b1BlcmNlbnQgLSBmcm9tUGVyY2VudCk7CiAgICAgCiAgICAgaWYg
KGNhbGNNb2RlKCkgPT0gQ2FsY01vZGVTcGxpbmUpIHsKICAgICAgICAgQVNTRVJUKG1fa2V5U3Bs
aW5lcy5zaXplKCkgPT0gbV9rZXlQb2ludHMuc2l6ZSgpIC0gMSk7CkBAIC00MzYsNyArNDMxLDcg
QEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjdXJyZW50VmFsdWVzRgogICAgIEFTU0VSVCht
X2tleVBvaW50cy5zaXplKCkgPT0gbV9rZXlUaW1lcy5zaXplKCkpOwogICAgIEFTU0VSVChjYWxj
TW9kZSgpICE9IENhbGNNb2RlUGFjZWQpOwogICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBjYWxjdWxh
dGVQZXJjZW50RnJvbUtleVBvaW50cyhwZXJjZW50KTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGVm
ZmVjdGl2ZVBlcmNlbnQgPT0gMS4wZiA/IG1fdmFsdWVzLnNpemUoKSAtIDIgOiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZWZmZWN0aXZlUGVyY2VudCAqIChtX3ZhbHVlcy5zaXplKCkgLSAxKSk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBlZmZlY3RpdmVQZXJjZW50ID09IDEgPyBtX3ZhbHVlcy5zaXpl
KCkgLSAyIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVmZmVjdGl2ZVBlcmNlbnQgKiAobV92YWx1
ZXMuc2l6ZSgpIC0gMSkpOwogICAgIGZyb20gPSBtX3ZhbHVlc1tpbmRleF07CiAgICAgdG8gPSBt
X3ZhbHVlc1tpbmRleCArIDFdOwogfQpAQCAtNDU4LDEwICs0NTMsMTAgQEAgdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpjdXJyZW50VmFsdWVzRgogICAgIHVuc2lnbmVkIGluZGV4ID0gY2FsY3Vs
YXRlS2V5VGltZXNJbmRleChwZXJjZW50KTsKICAgICBpZiAoY2FsY01vZGUgPT0gQ2FsY01vZGVE
aXNjcmV0ZSkgewogICAgICAgICBpZiAoIWtleVRpbWVzQ291bnQpIAotICAgICAgICAgICAgaW5k
ZXggPSBwZXJjZW50ID09IDEuMGYgPyB2YWx1ZXNDb3VudCAtIDEgOiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocGVyY2VudCAqIHZhbHVlc0NvdW50KTsKKyAgICAgICAgICAgIGluZGV4ID0gcGVyY2Vu
dCA9PSAxID8gdmFsdWVzQ291bnQgLSAxIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBlcmNlbnQg
KiB2YWx1ZXNDb3VudCk7CiAgICAgICAgIGZyb20gPSBtX3ZhbHVlc1tpbmRleF07CiAgICAgICAg
IHRvID0gbV92YWx1ZXNbaW5kZXhdOwotICAgICAgICBlZmZlY3RpdmVQZXJjZW50ID0gMC4wZjsK
KyAgICAgICAgZWZmZWN0aXZlUGVyY2VudCA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCkBAIC00ODEsNyArNDc2LDcgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjdXJyZW50
VmFsdWVzRgogICAgIGZyb20gPSBtX3ZhbHVlc1tpbmRleF07CiAgICAgdG8gPSBtX3ZhbHVlc1tp
bmRleCArIDFdOwogICAgIEFTU0VSVCh0b1BlcmNlbnQgPiBmcm9tUGVyY2VudCk7Ci0gICAgZWZm
ZWN0aXZlUGVyY2VudCA9IHBlcmNlbnQgPT0gMS4wZiA/IDEuMGYgOiAocGVyY2VudCAtIGZyb21Q
ZXJjZW50KSAvICh0b1BlcmNlbnQgLSBmcm9tUGVyY2VudCk7CisgICAgZWZmZWN0aXZlUGVyY2Vu
dCA9IHBlcmNlbnQgPT0gMSA/IDEgOiAocGVyY2VudCAtIGZyb21QZXJjZW50KSAvICh0b1BlcmNl
bnQgLSBmcm9tUGVyY2VudCk7CiAgICAgCiAgICAgaWYgKGNhbGNNb2RlID09IENhbGNNb2RlU3Bs
aW5lKSB7CiAgICAgICAgIEFTU0VSVChtX2tleVNwbGluZXMuc2l6ZSgpID09IG1fdmFsdWVzLnNp
emUoKSAtIDEpOwpAQCAtNDkzLDcgKzQ4OCw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
c3RhcnRlZEFjdGl2ZUkKIHsKICAgICBtX2FuaW1hdGlvblZhbGlkID0gZmFsc2U7CiAKLSAgICBp
ZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlc2UgdmFsaWRhdGlvbnMgYXJlIGFwcHJvcHJp
YXRlIGZvciBhbGwgYW5pbWF0aW9uIG1vZGVzLgpAQCAtNTY5LDcgKzU2NCw1IEBAIHZvaWQgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6ZW5kZWRBY3RpdmVJbnQKIH0KIAogfQotCi0vLyB2aW06dHM9NDpu
b2V0CiAjZW5kaWYgLy8gRU5BQkxFKFNWR19BTklNQVRJT04pCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4
ICs3NSw2IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBlbnVtIEFuaW1hdGlvbk1vZGUgeyBOb0Fu
aW1hdGlvbiwgVG9BbmltYXRpb24sIEJ5QW5pbWF0aW9uLCBWYWx1ZXNBbmltYXRpb24sIEZyb21U
b0FuaW1hdGlvbiwgRnJvbUJ5QW5pbWF0aW9uLCBQYXRoQW5pbWF0aW9uIH07CiAgICAgQW5pbWF0
aW9uTW9kZSBhbmltYXRpb25Nb2RlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVmFs
aWRUYXJnZXQoKSBjb25zdDsKICAgICAKICAgICBTdHJpbmcgdGFyZ2V0QXR0cmlidXRlQmFzZVZh
bHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNv
bnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNw
cAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFNWR0ZpbHRlckVs
ZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1ByCiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAu
c2V0KFNWR05hbWVzOjp3aWR0aEF0dHIsIEFuaW1hdGVkTGVuZ3RoKTsKICAgICBhdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcC5zZXQoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIEFuaW1hdGVkTGVuZ3Ro
KTsKICAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcC5zZXQoU1ZHTmFtZXM6OmZpbHRlclJl
c0F0dHIsIEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIpOwotICAgIGF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwgQW5pbWF0ZWRFbnVtZXJhdGlv
bik7CisgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFhMaW5rTmFtZXM6OmhyZWZB
dHRyLCBBbmltYXRlZFN0cmluZyk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUq
IGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
R0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3ODczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdH
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDE3IEBAIHZvaWQgU1ZHR0Vs
ZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY28KICAgICAgICAgU1ZHVGVzdHM6OnN5bmNocm9u
aXplUHJvcGVydGllcyh0aGlzLCBhdHRyTmFtZSk7CiB9CiAKK0F0dHJpYnV0ZVRvUHJvcGVydHlU
eXBlTWFwJiBTVkdHRWxlbWVudDo6YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAsIHNfYXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAsICgpKTsKKyAgICByZXR1cm4gc19hdHRyaWJ1dGVUb1Byb3Bl
cnR5VHlwZU1hcDsKK30KKwordm9pZCBTVkdHRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJvcGVy
dHlUeXBlTWFwKCkKK3sKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6ZmlsbFBh
c3NlZEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFw
KCkpOworfQorCiBSZW5kZXJPYmplY3QqIFNWR0dFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICAvLyBTVkcgMS4xIHRl
c3RzdWl0ZSBleHBsaWNpdGVseSB1c2VzIGNvbnN0cnVjdHMgbGlrZSA8ZyBkaXNwbGF5PSJub25l
Ij48bGluZWFyR3JhZGllbnQ+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuaAkocmV2aXNp
b24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9u
aXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxs
QXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKTsKKyAgICB2aXJ0dWFsIEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOwogCiAgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBA
QCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlCiAgICAgYXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVzOjp5QXR0ciwgQW5pbWF0ZWRMZW5ndGgpOwog
ICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6d2lkdGhBdHRyLCBB
bmltYXRlZExlbmd0aCk7CiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05h
bWVzOjpoZWlnaHRBdHRyLCBBbmltYXRlZExlbmd0aCk7Ci0gICAgYXR0cmlidXRlVG9Qcm9wZXJ0
eVR5cGVNYXAuc2V0KFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBBbmltYXRlZExlbmd0aCk7CisgICAg
YXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBBbmlt
YXRlZFN0cmluZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUNvbnRhaW5lclNpemUoU1ZHVXNl
RWxlbWVudCogdXNlRWxlbWVudCwgU1ZHRWxlbWVudEluc3RhbmNlKiB0YXJnZXRJbnN0YW5jZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250
YWluZXIuY3BwCShyZXZpc2lvbiA3ODczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNiArMjc2LDgg
QEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucwogICAgICAgICBFbGVt
ZW50QXR0cmlidXRlUGFpciBrZXkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7IAogICAg
ICAgICBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCA9IHJlc3VsdHNFbGVtZW50cy5nZXQo
a2V5KS5nZXQoKTsKICAgICAgICAgaWYgKCFyZXN1bHRFbGVtZW50KSB7CisgICAgICAgICAgICBp
ZiAoIWFuaW1hdGlvbi0+aGFzVmFsaWRBdHRyaWJ1dGVUeXBlKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICByZXN1bHRFbGVtZW50ID0gYW5pbWF0aW9uOwogICAgICAg
ICAgICAgcmVzdWx0RWxlbWVudC0+cmVzZXRUb0Jhc2VWYWx1ZShiYXNlVmFsdWVGb3Ioa2V5KSk7
CiAgICAgICAgICAgICByZXN1bHRzRWxlbWVudHMuYWRkKGtleSwgcmVzdWx0RWxlbWVudCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCShy
ZXZpc2lvbiA3ODczNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0
ID0gMDsKIAogICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82848</attachid>
            <date>2011-02-17 12:41:47 -0800</date>
            <delta_ts>2011-02-19 00:09:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54542-20110217214144.patch</filename>
            <type>text/plain</type>
            <size>56563</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDItMTcgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIC0gYW5hbHl6ZSBhdHRyaWJ1dGUgdHlwZSBm
b3IgYW5pbWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDU0MgorCisgICAgICAgIEFuYWx5emUgYW5pbWF0ZWQgYXR0cmlidXRlIHR5cGUgdG8g
ZGV0ZXJtaW5lIHRoZSBraW5kIG9mIGFuaW1hdGlvbi4gUmVtb3ZlZCBlbnVtIFByb3BlcnR5VHlw
ZSBhbmQgcmVwbGFjZSBpdAorICAgICAgICB3aXRoIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBpbnN0
ZWFkLiBNb3JlIGNsZWFudXAgb2YgdGhlIGFuaW1hdGlvbiBjb2RlLgorICAgICAgICBBZGRlZCBt
aXNzaW5nIGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpIGZvciBTVkdHRWxlbWVudC4K
KworICAgICAgICBVc2UgUXVhbGlmaWVkTmFtZSBpbnN0ZWFkIG9mIEF0b21pY1N0cmluZ3MgZm9y
IGF0dHJpYnV0ZSBuYW1lcy4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gaGFuZGxlIGFuaW1hdGVk
IGF0dHJpYnV0ZXMKKyAgICAgICAgZnJvbSBhIGRpZmZlcmVudCBuYW1lc3BhY2UgbGlrZSB4bGlu
azpocmVmLiBUaGUgcmVzdCBvZiB0aGUgU1ZHIGNvZGUgaXMgdXNpbmcgUXVhbGlmaWVkTmFtZXMg
YXMgd2VsbC4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSBvbiB0aGUgYW5p
bWF0aW9uIGNvZGUuIFRoZSBjaGFuZ2VzIGZvciB0aGUgPGc+LWVsZW1lbnQgYWZmZWN0IGFuaW1h
dGVUcmFuc2Zvcm0uIFNhZGx5CisgICAgICAgIGFuaW1hdGVUcmFuc2Zvcm0gaXMgbm90IHN1cHBv
cnRlZCBieSBvdXIgU1ZHIGFuaW1hdGlvbiB0ZXN0IHNjcmlwdCBhdCB0aGUgbW9tZW50LiBDYW4g
c3RpbGwgYmUgdGVzdGVkIG1hbnVhbGx5CisgICAgICAgIHdpdGggdGhlIFczQyB0ZXN0IHN1aXRl
IGluIHRydW5rLgorCisgICAgICAgIFRoZSBjaGFuZ2Ugb24gU1ZHVXNlRWxlbWVudCBnZXRzIGNv
dmVyZWQgYnkgYW5pbWF0ZS1lbGVtLTM5LXQuc3ZnCisKKyAgICAgICAgVGVzdDogc3ZnL2FuaW1h
dGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmh0bWwKKworICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlRWxlbWVudDo6U1ZHQW5pbWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZUVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlRWxlbWVudDo6ZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OmluaGVyaXRzRnJvbVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZURpc3Rh
bmNlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50OjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50OjpoYXNWYWxpZEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmRldGVybWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3Vs
YXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2Up
OgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2V5
VGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxpbmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmli
dXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
OjpjYWxjdWxhdGVLZXlUaW1lc0ZvckNhbGNNb2RlUGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6
c29sdmVFcHNpbG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNh
bGN1bGF0ZVBlcmNlbnRGcm9tS2V5UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGcm9tS2V5UG9pbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmN1cnJlbnRWYWx1ZXNGb3JWYWx1ZXNBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c3RhcnRlZEFjdGl2ZUlu
dGVydmFsKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckVs
ZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCk6CisgICAgICAgICogc3ZnL1NW
R0dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dFbGVtZW50OjphdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6ZmlsbEF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKTogQWRkZWQgdG8gZmlsbCB0aGUgYW5pbWF0ZWQgYXR0
cmlidXRlIG1hcCBmb3IgdGhpcyBlbGVtZW50LgorICAgICAgICAqIHN2Zy9TVkdHRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCk6IENoYW5nZWQgYXR0
cmlidXRlIHR5cGUgdG8gQW5pbWF0ZWRTdHJpbmcgZm9yIHhsaW5rOmhyZWYuCisgICAgICAgICog
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
TUlMVGltZUNvbnRhaW5lcjo6YmFzZVZhbHVlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxU
aW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6U1ZHU01JTEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0UXVhbGlmaWVkTmFtZSk6IENyZWF0ZSBh
IFF1YWxpZmllZE5hbWUgZnJvbSBhIGF0dHJpYnV0ZSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogVXBkYXRlIGxvY2FsIHZhcmFp
YmxlIG9mIGF0dHJpYnV0ZSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmF0
dHJpYnV0ZU5hbWUpOgorCiAyMDExLTAyLTE3ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVv
bGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQgZml4ZXMgYWZ0ZXIgcmVjZW50IGNo
YW5nZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNWR0FuaW1hdGVFbGVtZW50OjpTVkdBbmltYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9wcm9wZXJ0eVR5cGUoU3RyaW5nUHJvcGVydHkp
CisgICAgLCBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZShBbmltYXRlZFN0cmluZykKICAgICAsIG1f
ZnJvbU51bWJlcigwKQogICAgICwgbV90b051bWJlcigwKQogICAgICwgbV9hbmltYXRlZE51bWJl
cihudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQpAQCAtMTEzLDIxICsxMTMsNDYg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEZvckluaGVyaXRhbmNlKAogICAgICAgICB2YWx1
ZSA9IGNvbXB1dGVkU3R5bGUoc3ZnUGFyZW50KS0+Z2V0UHJvcGVydHlWYWx1ZShjc3NQcm9wZXJ0
eUlEKGF0dHJpYnV0ZU5hbWUpKTsKIH0KIAotU1ZHQW5pbWF0ZUVsZW1lbnQ6OlByb3BlcnR5VHlw
ZSBTVkdBbmltYXRlRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlKSBjb25zdAorYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6aGFzVmFsaWRBdHRyaWJ1
dGVUeXBlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBhbGxvdyBhbmlt
YXRpb24gb2YgYXR0cmlidXRlIHR5cGVzIG90aGVyIHRoYW4gQW5pbWF0ZWRDb2xvciBmb3IgPGFu
aW1hdGVDb2xvcj4uCi0gICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVDb2xvclRh
ZykpCi0gICAgICAgIHJldHVybiBDb2xvclByb3BlcnR5OwotCi0gICAgLy8gRklYTUU6IE5vdyB0
aGF0IHdlIGhhdmUgYSBmdWxsIHByb3BlcnR5IHRhYmxlIHdlIG5lZWQgYSBtb3JlIGdyYW51bGFy
IHR5cGUgc3BlY2lmaWMgYW5pbWF0aW9uLgotICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSB0eXBl
ID0gdGFyZ2V0RWxlbWVudCgpLT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCBhdHRyaWJ1dGUsIG51bGxBdG9tKSk7Ci0gICAgaWYgKHR5cGUg
PT0gQW5pbWF0ZWRDb2xvcikKLSAgICAgICAgcmV0dXJuIENvbG9yUHJvcGVydHk7Ci0gICAgaWYg
KHR5cGUgPT0gQW5pbWF0ZWRQYXRoKQotICAgICAgICByZXR1cm4gUGF0aFByb3BlcnR5OwotICAg
IGlmICh0eXBlID09IEFuaW1hdGVkUG9pbnRzKQotICAgICAgICByZXR1cm4gUG9pbnRzUHJvcGVy
dHk7Ci0gICAgcmV0dXJuIE51bWJlclByb3BlcnR5OworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVs
ZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRldGVybWluZUFuaW1hdGVk
QXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSAhPSBBbmltYXRlZFVua25vd247Cit9CisKK0Fu
aW1hdGVkQXR0cmlidXRlVHlwZSBTVkdBbmltYXRlRWxlbWVudDo6ZGV0ZXJtaW5lQW5pbWF0ZWRB
dHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHRhcmdldEVsZW1lbnQpOworCisgICAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIHR5cGUgPSB0
YXJnZXRFbGVtZW50LT5hbmltYXRlZFByb3BlcnR5VHlwZUZvckF0dHJpYnV0ZShhdHRyaWJ1dGVO
YW1lKCkpOworICAgIGlmICh0eXBlID09IEFuaW1hdGVkVW5rbm93bikKKyAgICAgICAgcmV0dXJu
IEFuaW1hdGVkVW5rbm93bjsKKworICAgIGlmIChoYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRl
Q29sb3JUYWcpICYmIHR5cGUgIT0gQW5pbWF0ZWRDb2xvcikKKyAgICAgICAgcmV0dXJuIEFuaW1h
dGVkVW5rbm93bjsKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHR5cGUgc3BlY2lmaWMgYW5pbWF0
aW9ucyBpbiB0aGUgZnV0dXJlLiBNYW55IGFuaW1hdGlvbnMgbWFya2VkIGFzIEFuaW1hdGVkU3Ry
aW5nIHRvZGF5IHdpbGwKKyAgICAvLyBzdXBwb3J0IGNvbnRpbnVvdXMgYW5pbWF0aW9ucy4KKyAg
ICBpZiAodHlwZSA9PSBBbmltYXRlZEJvb2xlYW4KKyAgICAgICAgfHwgdHlwZSA9PSBBbmltYXRl
ZEVudW1lcmF0aW9uCisgICAgICAgIHx8IHR5cGUgPT0gQW5pbWF0ZWRMZW5ndGhMaXN0CisgICAg
ICAgIHx8IHR5cGUgPT0gQW5pbWF0ZWROdW1iZXJMaXN0CisgICAgICAgIHx8IHR5cGUgPT0gQW5p
bWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcgorICAgICAgICB8fCB0eXBlID09IEFuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpbworICAgICAgICB8fCB0eXBlID09IEFuaW1hdGVkUmVjdCkKKyAgICAg
ICAgcmV0dXJuIEFuaW1hdGVkU3RyaW5nOworICAgIGlmICh0eXBlID09IEFuaW1hdGVkQW5nbGUK
KyAgICAgICAgfHwgdHlwZSA9PSBBbmltYXRlZEludGVnZXIKKyAgICAgICAgfHwgdHlwZSA9PSBB
bmltYXRlZExlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFuaW1hdGVkTnVtYmVyOworICAgIC8vIEFu
aW1hdGlvbnMgb2YgdHJhbnNmb3JtIGxpc3RzIGFyZSBub3QgYWxsb3dlZCBmb3IgPGFuaW1hdGU+
IG9yIDxzZXQ+CisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2FuaW1hdGUuaHRtbCNB
bmltYXRpb25BdHRyaWJ1dGVzQW5kUHJvcGVydGllcworICAgIGlmICh0eXBlID09IEFuaW1hdGVk
VHJhbnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuIEFuaW1hdGVkVW5rbm93bjsKKworICAgIHJl
dHVybiB0eXBlOwogfQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQq
IHJlc3VsdEVsZW1lbnQpCkBAIC0xNTIsOSArMTc3LDkgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVu
dDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICByZXR1cm47CiAgICAgU1ZHQW5pbWF0ZUVsZW1l
bnQqIHJlc3VsdHMgPSBzdGF0aWNfY2FzdDxTVkdBbmltYXRlRWxlbWVudCo+KHJlc3VsdEVsZW1l
bnQpOwogICAgIC8vIENhbid0IGFjY3VtdWxhdGUgb3ZlciBhIHN0cmluZyBwcm9wZXJ0eS4KLSAg
ICBpZiAocmVzdWx0cy0+bV9wcm9wZXJ0eVR5cGUgPT0gU3RyaW5nUHJvcGVydHkgJiYgbV9wcm9w
ZXJ0eVR5cGUgIT0gU3RyaW5nUHJvcGVydHkpCisgICAgaWYgKHJlc3VsdHMtPm1fYW5pbWF0ZWRB
dHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkU3RyaW5nICYmIG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
ICE9IEFuaW1hdGVkU3RyaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcHJvcGVydHlU
eXBlID09IE51bWJlclByb3BlcnR5KSB7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
ID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAgIC8vIFRvIGFuaW1hdGlvbiB1c2VzIGNvbnRy
aWJ1dGlvbnMgZnJvbSB0aGUgbG93ZXIgcHJpb3JpdHkgYW5pbWF0aW9ucyBhcyB0aGUgYmFzZSB2
YWx1ZS4KICAgICAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pCiAgICAgICAg
ICAgICBtX2Zyb21OdW1iZXIgPSByZXN1bHRzLT5tX2FuaW1hdGVkTnVtYmVyOwpAQCAtMTYyLDEz
ICsxODcsMTMgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAg
ICAgICAvLyBSZXBsYWNlICdjdXJyZW50Q29sb3InIC8gJ2luaGVyaXQnIGJ5IHRoZWlyIGNvbXB1
dGVkIHByb3BlcnR5IHZhbHVlcy4KICAgICAgICAgaWYgKG1fZnJvbVByb3BlcnR5VmFsdWVUeXBl
ID09IEluaGVyaXRWYWx1ZSkgewogICAgICAgICAgICAgU3RyaW5nIGZyb21OdW1iZXJTdHJpbmc7
Ci0gICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1
dGVOYW1lKCksIGZyb21OdW1iZXJTdHJpbmcpOworICAgICAgICAgICAgYWRqdXN0Rm9ySW5oZXJp
dGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpLmxvY2FsTmFtZSgpLCBmcm9tTnVt
YmVyU3RyaW5nKTsKICAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoZnJv
bU51bWJlclN0cmluZywgbV9mcm9tTnVtYmVyLCBtX251bWJlclVuaXQpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobV90b1Byb3BlcnR5VmFsdWVUeXBl
ID09IEluaGVyaXRWYWx1ZSkgewogICAgICAgICAgICAgU3RyaW5nIHRvTnVtYmVyU3RyaW5nOwot
ICAgICAgICAgICAgYWRqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRl
TmFtZSgpLCB0b051bWJlclN0cmluZyk7CisgICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5j
ZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkubG9jYWxOYW1lKCksIHRvTnVtYmVyU3Ry
aW5nKTsKICAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQodG9OdW1iZXJT
dHJpbmcsIG1fdG9OdW1iZXIsIG1fbnVtYmVyVW5pdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0xODgsNyArMjEzLDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6
Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZE51bWJlciA9
IG51bWJlcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCi0gICAgaWYgKG1fcHJvcGVydHlUeXBl
ID09IENvbG9yUHJvcGVydHkpIHsKKyAgICBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0g
QW5pbWF0ZWRDb2xvcikgewogICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlv
bikKICAgICAgICAgICAgIG1fZnJvbUNvbG9yID0gcmVzdWx0cy0+bV9hbmltYXRlZENvbG9yOwog
CkBAIC0xOTcsMTQgKzIyMiwxNCBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVB
bmltYXRlCiAgICAgICAgICAgICBhZGp1c3RGb3JDdXJyZW50Q29sb3IodGFyZ2V0RWxlbWVudCwg
bV9mcm9tQ29sb3IpOwogICAgICAgICBlbHNlIGlmIChtX2Zyb21Qcm9wZXJ0eVZhbHVlVHlwZSA9
PSBJbmhlcml0VmFsdWUpIHsKICAgICAgICAgICAgIFN0cmluZyBmcm9tQ29sb3JTdHJpbmc7Ci0g
ICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lKCksIGZyb21Db2xvclN0cmluZyk7CisgICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5j
ZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkubG9jYWxOYW1lKCksIGZyb21Db2xvclN0
cmluZyk7CiAgICAgICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhmcm9tQ29sb3JTdHJpbmcpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX3Rv
UHJvcGVydHlWYWx1ZVR5cGUgPT0gQ3VycmVudENvbG9yVmFsdWUpCiAgICAgICAgICAgICBhZGp1
c3RGb3JDdXJyZW50Q29sb3IodGFyZ2V0RWxlbWVudCwgbV90b0NvbG9yKTsKICAgICAgICAgZWxz
ZSBpZiAobV90b1Byb3BlcnR5VmFsdWVUeXBlID09IEluaGVyaXRWYWx1ZSkgewogICAgICAgICAg
ICAgU3RyaW5nIHRvQ29sb3JTdHJpbmc7Ci0gICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5j
ZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIHRvQ29sb3JTdHJpbmcpOworICAgICAg
ICAgICAgYWRqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgp
LmxvY2FsTmFtZSgpLCB0b0NvbG9yU3RyaW5nKTsKICAgICAgICAgICAgIG1fdG9Db2xvciA9IFNW
R0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyh0b0NvbG9yU3RyaW5nKTsKICAgICAgICAg
fQogCkBAIC0yMjEsNyArMjQ2LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRl
QW5pbWF0ZQogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZENvbG9yID0gY29sb3I7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFBhdGhQcm9w
ZXJ0eSkgeworICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgp
IHsKICAgICAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pIHsKICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHRzLT5tX2FuaW1hdGVkUGF0aFBvaW50ZXIpOwogICAgICAgICAgICAg
bV9mcm9tUGF0aCA9IHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlci0+Y29weSgpOwpAQCAt
MjMwLDcgKzI1NSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUK
ICAgICAgICAgICAgIEFTU0VSVChtX2Zyb21QYXRoKTsKICAgICAgICAgICAgIEFTU0VSVChwZXJj
ZW50YWdlID49IDApOwogICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmltYXRlZFBhdGhQb2ludGVy
ID0gbV9mcm9tUGF0aC5nZXQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50YWdlID09IDEu
ZikgeworICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPT0gMSkgewogICAgICAgICAgICAg
QVNTRVJUKG1fdG9QYXRoKTsKICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9p
bnRlciA9IG1fdG9QYXRoLmdldCgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjQ4LDE2ICsyNzMs
MTYgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2Zyb21QYXRoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQobV90b1Bh
dGgpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0cy0+bV9hbmltYXRlZFBhdGgpOwot
ICAgICAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRQYXRoUG9pbnRlciA9ICgoYW5pbWF0
aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1h
dGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgcGVyY2VudGFnZSA9PSAxLjBmKSAKKyAgICAgICAg
ICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUGF0aFBvaW50ZXIgPSAoKGFuaW1hdGlvbk1vZGUg
PT0gRnJvbVRvQW5pbWF0aW9uICYmIHBlcmNlbnRhZ2UgPiAwLjVmKSB8fCBhbmltYXRpb25Nb2Rl
ID09IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMSkgCiAgICAgICAgICAgICAgICAgICAg
ID8gbV90b1BhdGguZ2V0KCkgOiBtX2Zyb21QYXRoLmdldCgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fcHJvcGVydHlUeXBlID09
IFBvaW50c1Byb3BlcnR5KSB7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFu
aW1hdGVkUG9pbnRzKSB7CiAgICAgICAgIGlmICghcGVyY2VudGFnZSkKICAgICAgICAgICAgIHJl
c3VsdHMtPm1fYW5pbWF0ZWRQb2ludHMgPSBtX2Zyb21Qb2ludHM7Ci0gICAgICAgIGVsc2UgaWYg
KHBlcmNlbnRhZ2UgPT0gMS5mKQorICAgICAgICBlbHNlIGlmIChwZXJjZW50YWdlID09IDEpCiAg
ICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkUG9pbnRzID0gbV90b1BvaW50czsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW1fZnJvbVBvaW50cy5pc0VtcHR5KCkgJiYgIW1f
dG9Qb2ludHMuaXNFbXB0eSgpKQpAQCAtMjY2LDcgKzI5MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICAgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1h
dGVkUG9pbnRzLmNsZWFyKCk7CiAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gZGlzY3JldGUg
YW5pbWF0aW9uIGlmIHRoZSBwb2ludHMgYXJlIG5vdCBjb21wYXRpYmxlCiAgICAgICAgICAgICBp
ZiAocmVzdWx0cy0+bV9hbmltYXRlZFBvaW50cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0cy0+bV9hbmltYXRlZFBvaW50cyA9ICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9Bbmlt
YXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRp
b24gfHwgcGVyY2VudGFnZSA9PSAxLjBmKSAKKyAgICAgICAgICAgICAgICByZXN1bHRzLT5tX2Fu
aW1hdGVkUG9pbnRzID0gKChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJj
ZW50YWdlID4gMC41ZikgfHwgYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbiB8fCBwZXJjZW50
YWdlID09IDEpIAogICAgICAgICAgICAgICAgICAgICA/IG1fdG9Qb2ludHMgOiBtX2Zyb21Qb2lu
dHM7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMjc0LDI2ICsyOTksMjYgQEAgdm9p
ZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgIEFTU0VSVChhbmltYXRp
b25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9u
IHx8IGFuaW1hdGlvbk1vZGUgPT0gVmFsdWVzQW5pbWF0aW9uKTsKICAgICAvLyBSZXBsYWNlICdj
dXJyZW50Q29sb3InIC8gJ2luaGVyaXQnIGJ5IHRoZWlyIGNvbXB1dGVkIHByb3BlcnR5IHZhbHVl
cy4KICAgICBpZiAobV9mcm9tUHJvcGVydHlWYWx1ZVR5cGUgPT0gSW5oZXJpdFZhbHVlKQotICAg
ICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCks
IG1fZnJvbVN0cmluZyk7CisgICAgICAgIGFkanVzdEZvckluaGVyaXRhbmNlKHRhcmdldEVsZW1l
bnQsIGF0dHJpYnV0ZU5hbWUoKS5sb2NhbE5hbWUoKSwgbV9mcm9tU3RyaW5nKTsKICAgICBpZiAo
bV90b1Byb3BlcnR5VmFsdWVUeXBlID09IEluaGVyaXRWYWx1ZSkKLSAgICAgICAgYWRqdXN0Rm9y
SW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpLCBtX3RvU3RyaW5nKTsK
KyAgICAgICAgYWRqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSgpLmxvY2FsTmFtZSgpLCBtX3RvU3RyaW5nKTsKIAogICAgIGlmICgoYW5pbWF0aW9uTW9kZSA9
PSBGcm9tVG9BbmltYXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUg
PT0gVG9BbmltYXRpb24gfHwgcGVyY2VudGFnZSA9PSAxKQogICAgICAgICByZXN1bHRzLT5tX2Fu
aW1hdGVkU3RyaW5nID0gbV90b1N0cmluZzsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdHMtPm1f
YW5pbWF0ZWRTdHJpbmcgPSBtX2Zyb21TdHJpbmc7CiAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJl
cGxhY2UgYW5pbWF0aW9uIG92ZXJyaWRlcyBhbnkgYWRkaXRpdmUgcmVzdWx0cyBzbyBmYXIuCi0g
ICAgcmVzdWx0cy0+bV9wcm9wZXJ0eVR5cGUgPSBTdHJpbmdQcm9wZXJ0eTsKKyAgICByZXN1bHRz
LT5tX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9IEFuaW1hdGVkU3RyaW5nOwogfQogCi1zdGF0aWMg
Ym9vbCBpbmhlcml0c0Zyb21Qcm9wZXJ0eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgYm9v
bCBpbmhlcml0c0Zyb21Qcm9wZXJ0eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAg
IEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgaW5oZXJpdCwgKCJpbmhlcml0IikpOwogCiAgICAgaWYgKHZhbHVlLmlzRW1w
dHkoKSB8fCB2YWx1ZSAhPSBpbmhlcml0IHx8ICF0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5p
bWF0YWJsZUNTU1Byb3BlcnR5KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUs
IG51bGxBdG9tKSk7CisgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5pbWF0YWJsZUNT
U1Byb3BlcnR5KGF0dHJpYnV0ZU5hbWUpOwogfQogCiBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1
ZUlzQ3VycmVudENvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0zMTEsOCArMzM2LDggQEAg
Ym9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogICAgIG1fdG9Qcm9wZXJ0
eVZhbHVlVHlwZSA9IGluaGVyaXRzRnJvbVByb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0
ZU5hbWUoKSwgdG9TdHJpbmcpID8gSW5oZXJpdFZhbHVlIDogUmVndWxhclByb3BlcnR5VmFsdWU7
CiAKICAgICAvLyBGSVhNRTogTmVlZHMgbW9yZSBzb2xpZCB3YXkgZGV0ZXJtaW5lIHRhcmdldCBh
dHRyaWJ1dGUgdHlwZS4KLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlw
ZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3Bl
cnR5KSB7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1pbmVBbmltYXRlZEF0
dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVU
eXBlID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgYm9vbCBmcm9tSXNDdXJyZW50Q29sb3Ig
PSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcpOwogICAgICAgICBib29s
IHRvSXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKHRvU3RyaW5n
KTsKICAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRDb2xvcikKQEAgLTMyNywxNCArMzUyLDE0IEBA
IGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKICAgICAgICAgYm9vbCB0
b0lzVmFsaWQgPSBtX3RvQ29sb3IuaXNWYWxpZCgpIHx8IHRvSXNDdXJyZW50Q29sb3IgfHwgbV90
b1Byb3BlcnR5VmFsdWVUeXBlID09IEluaGVyaXRWYWx1ZTsKICAgICAgICAgaWYgKChmcm9tSXNW
YWxpZCAmJiB0b0lzVmFsaWQpIHx8ICh0b0lzVmFsaWQgJiYgYW5pbWF0aW9uTW9kZSgpID09IFRv
QW5pbWF0aW9uKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAobV9w
cm9wZXJ0eVR5cGUgPT0gTnVtYmVyUHJvcGVydHkpIHsKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0
ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAgIG1fbnVtYmVyVW5p
dCA9IFN0cmluZygpOwogICAgICAgICBpZiAocGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQodG9TdHJp
bmcsIG1fdG9OdW1iZXIsIG1fbnVtYmVyVW5pdCkpIHsKICAgICAgICAgICAgIC8vIEZvciB0by1h
bmltYXRpb25zIHRoZSBmcm9tIG51bWJlciBpcyBjYWxjdWxhdGVkIGxhdGVyCiAgICAgICAgICAg
ICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IFRvQW5pbWF0aW9uIHx8IHBhcnNlTnVtYmVyVmFsdWVB
bmRVbml0KGZyb21TdHJpbmcsIG1fZnJvbU51bWJlciwgbV9udW1iZXJVbml0KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0
eVR5cGUgPT0gUGF0aFByb3BlcnR5KSB7CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmli
dXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3Rvcnkq
IGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBpZiAoZmFj
dG9yeS0+YnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TdHJpbmcodG9TdHJpbmcsIG1fdG9QYXRo
LCBVbmFsdGVyZWRQYXJzaW5nKSkgewogICAgICAgICAgICAgLy8gRm9yIHRvLWFuaW1hdGlvbnMg
dGhlIGZyb20gbnVtYmVyIGlzIGNhbGN1bGF0ZWQgbGF0ZXIKQEAgLTM0Myw3ICszNjgsNyBAQCBi
b29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAgICAgICAgIH0KICAgICAg
ICAgbV9mcm9tUGF0aC5jbGVhcigpOwogICAgICAgICBtX3RvUGF0aC5jbGVhcigpOwotICAgIH0g
ZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUG9pbnRzUHJvcGVydHkpIHsKKyAgICB9IGVsc2Ug
aWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkUG9pbnRzKSB7CiAgICAgICAg
IG1fZnJvbVBvaW50cy5jbGVhcigpOwogICAgICAgICBpZiAocG9pbnRzTGlzdEZyb21TVkdEYXRh
KG1fZnJvbVBvaW50cywgZnJvbVN0cmluZykpIHsKICAgICAgICAgICAgIG1fdG9Qb2ludHMuY2xl
YXIoKTsKQEAgLTM1Myw3ICszNzgsNyBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxh
dGVGcm9tQW5kCiAgICAgfQogICAgIG1fZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7CiAgICAgbV90
b1N0cmluZyA9IHRvU3RyaW5nOwotICAgIG1fcHJvcGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7
CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBBbmltYXRlZFN0cmluZzsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzY2LDggKzM5MSw4IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6
OmNhbGN1bGF0ZUZyb21BbmQKICAgICBtX3RvUHJvcGVydHlWYWx1ZVR5cGUgPSBpbmhlcml0c0Zy
b21Qcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGJ5U3RyaW5nKSA/IElu
aGVyaXRWYWx1ZSA6IFJlZ3VsYXJQcm9wZXJ0eVZhbHVlOwogCiAgICAgQVNTRVJUKCFoYXNUYWdO
YW1lKFNWR05hbWVzOjpzZXRUYWcpKTsKLSAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVBy
b3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBD
b2xvclByb3BlcnR5KSB7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRlcm1pbmVB
bmltYXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5pbWF0ZWRB
dHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkQ29sb3IpIHsKICAgICAgICAgYm9vbCBmcm9tSXNDdXJy
ZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcpOwogICAg
ICAgICBib29sIGJ5SXNDdXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVWYWx1ZUlzQ3VycmVudENvbG9y
KGJ5U3RyaW5nKTsKICAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRDb2xvcikKQEAgLTM5NiwxNiAr
NDIxLDE4IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKIAogdm9p
ZCBTVkdBbmltYXRlRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBTdHJpbmcmIGJhc2VT
dHJpbmcpCiB7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVs
ZW1lbnQoKTsKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CiAgICAgbV9hbmltYXRlZFN0cmlu
ZyA9IGJhc2VTdHJpbmc7Ci0gICAgUHJvcGVydHlUeXBlIGxhc3RUeXBlID0gbV9wcm9wZXJ0eVR5
cGU7Ci0gICAgbV9wcm9wZXJ0eVR5cGUgPSBkZXRlcm1pbmVQcm9wZXJ0eVR5cGUoYXR0cmlidXRl
TmFtZSgpKTsKLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAg
IEFuaW1hdGVkQXR0cmlidXRlVHlwZSBsYXN0VHlwZSA9IG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
OworICAgIG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID0gZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1
dGVUeXBlKHRhcmdldEVsZW1lbnQpOworICAgIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9
PSBBbmltYXRlZENvbG9yKSB7CiAgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IGJhc2VTdHJpbmcu
aXNFbXB0eSgpID8gQ29sb3IoKSA6IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhi
YXNlU3RyaW5nKTsKICAgICAgICAgaWYgKGlzQ29udHJpYnV0aW5nKGVsYXBzZWQoKSkpIHsKLSAg
ICAgICAgICAgIG1fcHJvcGVydHlUeXBlID0gbGFzdFR5cGU7CisgICAgICAgICAgICBtX2FuaW1h
dGVkQXR0cmlidXRlVHlwZSA9IGxhc3RUeXBlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgewor
ICAgIH0gZWxzZSBpZiAobV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWROdW1iZXIp
IHsKICAgICAgICAgaWYgKGJhc2VTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2Fu
aW1hdGVkTnVtYmVyID0gMDsKICAgICAgICAgICAgIG1fbnVtYmVyVW5pdCA9IFN0cmluZygpOwpA
QCAtNDEzLDI3ICs0NDAsMjcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6cmVzZXRUb0Jhc2VW
YWx1ZQogICAgICAgICB9CiAgICAgICAgIGlmIChwYXJzZU51bWJlclZhbHVlQW5kVW5pdChiYXNl
U3RyaW5nLCBtX2FuaW1hdGVkTnVtYmVyLCBtX251bWJlclVuaXQpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUGF0aFByb3BlcnR5KSB7Cisg
ICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBhdGgpIHsK
ICAgICAgICAgbV9hbmltYXRlZFBhdGguY2xlYXIoKTsKICAgICAgICAgU1ZHUGF0aFBhcnNlckZh
Y3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgICAgICBm
YWN0b3J5LT5idWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhiYXNlU3RyaW5nLCBtX2Fu
aW1hdGVkUGF0aCwgVW5hbHRlcmVkUGFyc2luZyk7CiAgICAgICAgIG1fYW5pbWF0ZWRQYXRoUG9p
bnRlciA9IG1fYW5pbWF0ZWRQYXRoLmdldCgpOwogICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNl
IGlmIChtX3Byb3BlcnR5VHlwZSA9PSBQb2ludHNQcm9wZXJ0eSkgeworICAgIH0gZWxzZSBpZiAo
bV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPT0gQW5pbWF0ZWRQb2ludHMpIHsKICAgICAgICAgbV9h
bmltYXRlZFBvaW50cy5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fcHJv
cGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUg
PSBBbmltYXRlZFN0cmluZzsKIH0KICAgICAKIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmFwcGx5
UmVzdWx0c1RvVGFyZ2V0KCkKIHsKICAgICBTdHJpbmcgdmFsdWVUb0FwcGx5OwotICAgIGlmICht
X3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KQorICAgIGlmIChtX2FuaW1hdGVkQXR0cmli
dXRlVHlwZSA9PSBBbmltYXRlZENvbG9yKQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1h
dGVkQ29sb3Iuc2VyaWFsaXplZCgpOwotICAgIGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09IE51
bWJlclByb3BlcnR5KQorICAgIGVsc2UgaWYgKG1fYW5pbWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFu
aW1hdGVkTnVtYmVyKQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBTdHJpbmc6Om51bWJlcihtX2Fu
aW1hdGVkTnVtYmVyKSArIG1fbnVtYmVyVW5pdDsKLSAgICBlbHNlIGlmIChtX3Byb3BlcnR5VHlw
ZSA9PSBQYXRoUHJvcGVydHkpIHsKKyAgICBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlw
ZSA9PSBBbmltYXRlZFBhdGgpIHsKICAgICAgICAgaWYgKCFtX2FuaW1hdGVkUGF0aFBvaW50ZXIg
fHwgbV9hbmltYXRlZFBhdGhQb2ludGVyLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICB2YWx1ZVRv
QXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOwogICAgICAgICBlbHNlIHsKQEAgLTQ0NCw3ICs0NzEs
NyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3VsdHNUb1RhCiAgICAgICAgICAg
ICBTVkdQYXRoUGFyc2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5Ojpz
ZWxmKCk7CiAgICAgICAgICAgICBmYWN0b3J5LT5idWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtKG1f
YW5pbWF0ZWRQYXRoUG9pbnRlciwgdmFsdWVUb0FwcGx5LCBVbmFsdGVyZWRQYXJzaW5nKTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gUG9pbnRzUHJvcGVydHkp
CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGVkQXR0cmlidXRlVHlwZSA9PSBBbmltYXRlZFBvaW50
cykKICAgICAgICAgdmFsdWVUb0FwcGx5ID0gbV9hbmltYXRlZFBvaW50cy5pc0VtcHR5KCkgPyBt
X2FuaW1hdGVkU3RyaW5nIDogbV9hbmltYXRlZFBvaW50cy52YWx1ZUFzU3RyaW5nKCk7CiAgICAg
ZWxzZQogICAgICAgICB2YWx1ZVRvQXBwbHkgPSBtX2FuaW1hdGVkU3RyaW5nOwpAQCAtNDU0LDMx
ICs0ODEsMzEgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYQogICAg
IAogZmxvYXQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmlu
ZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAgICBtX3Byb3BlcnR5
VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwotICAgIGlmICht
X3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgeworICAgIFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgbV9hbmltYXRlZEF0dHJpYnV0ZVR5cGUgPSBkZXRl
cm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCk7CisgICAgaWYgKG1fYW5p
bWF0ZWRBdHRyaWJ1dGVUeXBlID09IEFuaW1hdGVkTnVtYmVyKSB7CiAgICAgICAgIGRvdWJsZSBm
cm9tOwogICAgICAgICBkb3VibGUgdG87CiAgICAgICAgIFN0cmluZyB1bml0OwogICAgICAgICBp
ZiAoIXBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGZyb21TdHJpbmcsIGZyb20sIHVuaXQpKQotICAg
ICAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlm
ICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQodG9TdHJpbmcsIHRvLCB1bml0KSkKLSAgICAgICAg
ICAgIHJldHVybiAtMS5mOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChmYWJzKHRvIC0gZnJvbSkpOwogICAgIH0KLSAgICBpZiAo
bV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgeworICAgIGlmIChtX2FuaW1hdGVkQXR0
cmlidXRlVHlwZSA9PSBBbmltYXRlZENvbG9yKSB7CiAgICAgICAgIENvbG9yIGZyb20gPSBTVkdD
b2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJvbVN0cmluZyk7CiAgICAgICAgIGlmICgh
ZnJvbS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gLTEuZjsKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKICAgICAgICAgQ29sb3IgdG8gPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JT
dHJpbmcodG9TdHJpbmcpOwogICAgICAgICBpZiAoIXRvLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHJldHVybiAtMS5mOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4gQ29s
b3JEaXN0YW5jZShmcm9tLCB0bykuZGlzdGFuY2UoKTsKICAgICB9Ci0gICAgcmV0dXJuIC0xLmY7
CisgICAgcmV0dXJuIC0xOwogfQogICAgCiB9Ci0KLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQu
aAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
Q3VycmVudENvbG9yVmFsdWUsCiAgICAgICAgIEluaGVyaXRWYWx1ZQogICAgIH07Ci0gICAgZW51
bSBQcm9wZXJ0eVR5cGUgeyBOdW1iZXJQcm9wZXJ0eSwgQ29sb3JQcm9wZXJ0eSwgU3RyaW5nUHJv
cGVydHksIFBhdGhQcm9wZXJ0eSwgUG9pbnRzUHJvcGVydHkgfTsKLSAgICBQcm9wZXJ0eVR5cGUg
ZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlKSBjb25zdDsKLSAg
ICBQcm9wZXJ0eVR5cGUgbV9wcm9wZXJ0eVR5cGU7CisgICAgCisgICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0OworICAgIEFuaW1hdGVkQXR0cmlidXRlVHlwZSBk
ZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUoU1ZHRWxlbWVudCopIGNvbnN0OworICAgIEFu
aW1hdGVkQXR0cmlidXRlVHlwZSBtX2FuaW1hdGVkQXR0cmlidXRlVHlwZTsKIAogICAgIEFuaW1h
dGVkUHJvcGVydHlWYWx1ZVR5cGUgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGU7CiAgICAgQW5pbWF0
ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX3RvUHJvcGVydHlWYWx1ZVR5cGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4
NzM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsMTQgKzUzLDE3IEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ+IFNWR0EKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFTVkdBbmlt
YXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAg
ICBpZiAoIXRhcmdldEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdl
IGRvbid0IGhhdmUgYSBzcGVjaWFsIGF0dHJpYnV0ZSBuYW1lIHRvIHZlcmlmeSB0aGUgYW5pbWF0
aW9uIHR5cGUuIENoZWNrIHRoZSBlbGVtZW50IG5hbWUgaW5zdGVhZC4KICAgICBpZiAoIXRhcmdl
dEVsZW1lbnQtPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpICYmICF0YXJnZXRFbGVtZW50LT5oYXNU
YWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IFNwZWM6IFNWRyAxLjEgc2VjdGlvbiAxOS4yLjE1CisgICAgLy8gRklYTUU6IHN2Z1RhZyBpcyBt
aXNzaW5nLiBOZWVkcyB0byBiZSBjaGVja2VkLCBpZiB0cmFuc2Zvcm1pbmcgPHN2Zz4gY291bGQg
Y2F1c2UgcHJvYmxlbXMuCiAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmhhc1RhZ05hbWUoZ1RhZykK
ICAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFtZShkZWZzVGFnKQogICAgICAgICB8
fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdOYW1lKHVzZVRhZykKQEAgLTEzNCwxMSArMTM3LDExIEBA
IHN0YXRpYyBib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICBpZiAoIXNraXBP
cHRpb25hbFNwYWNlcyhjdXIsIGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBmbG9hdCB4ID0gMC4wZjsKKyAgICBmbG9hdCB4ID0gMDsKICAgICBpZiAoIXBhcnNlTnVtYmVy
KGN1ciwgZW5kLCB4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGZsb2F0IHkg
PSAwLjBmOworICAgIGZsb2F0IHkgPSAwOwogICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQs
IHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0xNTAsMTAgKzE1Myw5IEBAIHN0
YXRpYyBib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICAKIHZvaWQgU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ6OnJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgaWYgKCFoYXNWYWxpZEF0dHJpYnV0ZVR5cGUo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1l
bnQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldC0+c3VwcGxlbWVu
dGFsVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm0gPSB0YXJnZXRF
bGVtZW50KCktPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwogICAgIGlmICghdHJhbnNmb3JtKQog
ICAgICAgICByZXR1cm47CiAgICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKQEAgLTE3Nywx
NSArMTc5LDE1IEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKIAog
dm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9h
dCBwZXJjZW50YWdlLCB1bnNpZ25lZCwgU1ZHU01JTEVsZW1lbnQqKQogewotICAgIFNWR0VsZW1l
bnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKLSAgICBpZiAoIXRhcmdldCkKKyAgICBTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICgh
dGFyZ2V0RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIEFmZmluZVRyYW5zZm9ybSogdHJh
bnNmb3JtID0gdGFyZ2V0LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFu
c2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldEVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgp
OwogICAgIGlmICghdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodGFyZ2V0
LT5yZW5kZXJlcigpKQotICAgICAgICB0YXJnZXQtPnJlbmRlcmVyKCktPnNldE5lZWRzVHJhbnNm
b3JtVXBkYXRlKCk7CisgICAgaWYgKHRhcmdldEVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAg
IHRhcmdldEVsZW1lbnQtPnJlbmRlcmVyKCktPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7CiAK
ICAgICBpZiAoIWlzQWRkaXRpdmUoKSkKICAgICAgICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHko
KTsKQEAgLTIwNCw3ICsyMDYsNyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxj
dWxhdGVBCiAgICAgICAgICAgICBpZiAocm90YXRlTW9kZSA9PSBSb3RhdGVBdXRvIHx8IHJvdGF0
ZU1vZGUgPT0gUm90YXRlQXV0b1JldmVyc2UpIHsKICAgICAgICAgICAgICAgICBmbG9hdCBhbmds
ZSA9IHBhdGgubm9ybWFsQW5nbGVBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOwogICAgICAg
ICAgICAgICAgIGlmIChyb3RhdGVNb2RlID09IFJvdGF0ZUF1dG9SZXZlcnNlKQotICAgICAgICAg
ICAgICAgICAgICBhbmdsZSArPSAxODAuZjsKKyAgICAgICAgICAgICAgICAgICAgYW5nbGUgKz0g
MTgwOwogICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+cm90YXRlKGFuZ2xlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjUwLDEzICsyNTIsMTIgQEAgZmxvYXQgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZQogICAgIEZsb2F0UG9pbnQgZnJvbTsKICAgICBGbG9hdFBv
aW50IHRvOwogICAgIGlmICghcGFyc2VQb2ludChmcm9tU3RyaW5nLCBmcm9tKSkKLSAgICAgICAg
cmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIXBhcnNlUG9pbnQodG9T
dHJpbmcsIHRvKSkKLSAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAtMTsKICAg
ICBGbG9hdFNpemUgZGlmZiA9IHRvIC0gZnJvbTsKICAgICByZXR1cm4gc3FydGYoZGlmZi53aWR0
aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwogfQog
CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCBo
YXNWYWxpZFRhcmdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqKTsKIApAQCAtNzMsNSArNzMsMyBAQCBwcml2YXRlOgogCiAjZW5kaWYgLy8gRU5B
QkxFKFNWR19BTklNQVRJT04pCiAjZW5kaWYgLy8gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnRfaAot
Ci0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksMTQgKzU5LDI1IEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+
IFMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
Omhhc1ZhbGlkVGFyZ2V0KCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
Omhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpIGNvbnN0CiB7CiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0
RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKLSAgICByZXR1cm4gU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aGFzVmFsaWRUYXJnZXQoKQotICAgICAgICAmJiAodGFyZ2V0RWxlbWVudC0+aXNT
dHlsZWRUcmFuc2Zvcm1hYmxlKCkKLSAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6dGV4dFRhZykKLSAgICAgICAgfHwgdGFyZ2V0RWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWcpCi0gICAgICAgIHx8IHRhcmdldEVsZW1lbnQt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnKSk7CisgICAgaWYgKCF0YXJn
ZXRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRldGVy
bWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBBbmltYXRlZFRyYW5z
Zm9ybUxpc3Q7Cit9CisKK0FuaW1hdGVkQXR0cmlidXRlVHlwZSBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6ZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworICAgIAorICAg
IC8vIEp1c3QgdHJhbnNmb3JtIGxpc3RzIGNhbiBiZSBhbmltYXRlZCB3aXRoIDxhbmltYXRlVHJh
bnNmb3JtPgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9hbmltYXRlLmh0bWwjQW5p
bWF0aW9uQXR0cmlidXRlc0FuZFByb3BlcnRpZXMKKyAgICBpZiAodGFyZ2V0RWxlbWVudC0+YW5p
bWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSgpKSAhPSBBbmltYXRl
ZFRyYW5zZm9ybUxpc3QpCisgICAgICAgIHJldHVybiBBbmltYXRlZFVua25vd247CisKKyAgICBy
ZXR1cm4gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OwogfQogCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zv
cm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkBAIC0xMDIs
MjYgKzExMywyNyBAQCBzdGF0aWMgU1ZHVHJhbnNmb3JtTGlzdCogdHJhbnNmb3JtTGlzdEZvCiAg
ICAgCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKGNv
bnN0IFN0cmluZyYgYmFzZVZhbHVlKQogewotICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKKyAg
ICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAg
IGlmICghdGFyZ2V0RWxlbWVudCB8fCBkZXRlcm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUodGFy
Z2V0RWxlbWVudCkgPT0gQW5pbWF0ZWRVbmtub3duKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAodGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRh
ZykgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyYWRpYWxHcmFkaWVu
dFRhZykpIHsKLSAgICAgICAgdGFyZ2V0RWxlbWVudCgpLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmdyYWRpZW50VHJhbnNmb3JtQXR0ciwgYmFzZVZhbHVlLmlzRW1wdHkoKSA/ICJtYXRyaXgoMSAw
IDAgMSAwIDApIiA6IGJhc2VWYWx1ZSk7CisgICAgaWYgKHRhcmdldEVsZW1lbnQtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OmxpbmVhckdyYWRpZW50VGFnKSB8fCB0YXJnZXRFbGVtZW50LT5oYXNUYWdO
YW1lKFNWR05hbWVzOjpyYWRpYWxHcmFkaWVudFRhZykpIHsKKyAgICAgICAgdGFyZ2V0RWxlbWVu
dC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVudFRyYW5zZm9ybUF0dHIsIGJhc2VWYWx1
ZS5pc0VtcHR5KCkgPyAibWF0cml4KDEgMCAwIDEgMCAwKSIgOiBiYXNlVmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGJhc2VWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QgPSB0cmFuc2Zvcm1MaXN0Rm9yKHRhcmdldEVs
ZW1lbnQoKSkpCisgICAgICAgIGlmIChTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0ID0gdHJhbnNmb3Jt
TGlzdEZvcih0YXJnZXRFbGVtZW50KSkKICAgICAgICAgICAgIGxpc3QtPmNsZWFyKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIHRhcmdldEVsZW1lbnQoKS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0
cmFuc2Zvcm1BdHRyLCBiYXNlVmFsdWUpOworICAgICAgICB0YXJnZXRFbGVtZW50LT5zZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIGJhc2VWYWx1ZSk7CiB9CiAKLXZvaWQgU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVy
Y2VudGFnZSwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkK
K3ZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUo
ZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCopCiB7Ci0g
ICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQorICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQg
PSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8IGRldGVy
bWluZUFuaW1hdGVkQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KSA9PSBBbmltYXRlZFVua25v
d24pCiAgICAgICAgIHJldHVybjsKLSAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gcmVz
dWx0RWxlbWVudC0+dGFyZ2V0RWxlbWVudCgpOwogICAgIFNWR1RyYW5zZm9ybUxpc3QqIHRyYW5z
Zm9ybUxpc3QgPSB0cmFuc2Zvcm1MaXN0Rm9yKHRhcmdldEVsZW1lbnQpOwogICAgIEFTU0VSVCh0
cmFuc2Zvcm1MaXN0KTsKIApAQCAtMTQ2LDcgKzE1OCw2IEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OmNhbGN1bGEKIAogYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiBieVN0cmluZykKIHsKLQogICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNm
b3JtVmFsdWUoZnJvbVN0cmluZyk7CiAgICAgaWYgKCFtX2Zyb21UcmFuc2Zvcm0uaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjgsMTMgKzE3OSwxMSBAQCBTVkdUcmFuc2Zv
cm0gU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6CiAgICAgCiB2b2lkIFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCgpCiB7Ci0gICAgaWYgKCFoYXNWYWxp
ZFRhcmdldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV2UgYWNjdW11bGF0ZSB0byB0aGUg
dGFyZ2V0IGVsZW1lbnQgdHJhbnNmb3JtIGxpc3Qgc28gdGhlcmUgaXMgbm90IG11Y2ggdG8gZG8g
aGVyZS4KICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVu
dCgpOwotICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwg
ZGV0ZXJtaW5lQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQpID09IEFuaW1hdGVk
VW5rbm93bikKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gV2UgYWNjdW11bGF0ZSB0byB0aGUg
dGFyZ2V0IGVsZW1lbnQgdHJhbnNmb3JtIGxpc3Qgc28gdGhlcmUgaXMgbm90IG11Y2ggdG8gZG8g
aGVyZS4KICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRhcmdldEVsZW1lbnQtPnJl
bmRlcmVyKCkpIHsKICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCk7
CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3Vy
Y2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwpAQCAtMjEwLDEwICsyMTksMTAgQEAgZmxvYXQgU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bAogICAgIC8vIGlzIHBhY2VkIHNlcGFyYXRl
bHkuIFRvIGltcGxlbWVudCB0aGlzIHdlIG5lZWQgdG8gdHJlYXQgZWFjaCBjb21wb25lbnQgYXMg
aW5kaXZpZHVhbCBhbmltYXRpb24gZXZlcnl3aGVyZS4KICAgICBTVkdUcmFuc2Zvcm0gZnJvbSA9
IHBhcnNlVHJhbnNmb3JtVmFsdWUoZnJvbVN0cmluZyk7CiAgICAgaWYgKCFmcm9tLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuIC0xLmY7CisgICAgICAgIHJldHVybiAtMTsKICAgICBTVkdUcmFu
c2Zvcm0gdG8gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKHRvU3RyaW5nKTsKICAgICBpZiAoIXRvLmlz
VmFsaWQoKSB8fCBmcm9tLnR5cGUoKSAhPSB0by50eXBlKCkpCi0gICAgICAgIHJldHVybiAtMS5m
OworICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHRvLnR5cGUoKSA9PSBTVkdUcmFuc2Zvcm06
OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFKSB7CiAgICAgICAgIEZsb2F0U2l6ZSBkaWZmID0gdG8u
dHJhbnNsYXRlKCkgLSBmcm9tLnRyYW5zbGF0ZSgpOwogICAgICAgICByZXR1cm4gc3FydGYoZGlm
Zi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkp
OwpAQCAtMjI0LDExICsyMzMsOCBAQCBmbG9hdCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
Y2FsY3VsCiAgICAgICAgIEZsb2F0U2l6ZSBkaWZmID0gdG8uc2NhbGUoKSAtIGZyb20uc2NhbGUo
KTsKICAgICAgICAgcmV0dXJuIHNxcnRmKGRpZmYud2lkdGgoKSAqIGRpZmYud2lkdGgoKSArIGRp
ZmYuaGVpZ2h0KCkgKiBkaWZmLmhlaWdodCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIC0xLmY7Cisg
ICAgcmV0dXJuIC0xOwogfQogCiB9Ci0KLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBFTkFC
TEUoU1ZHKQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuaAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYXNW
YWxpZFRhcmdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5
cGUoKSBjb25zdDsKKyAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgZGV0ZXJtaW5lQW5pbWF0ZWRB
dHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKIApAQCAtNjQsNSArNjUsMyBAQCBwcml2YXRl
OgogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKICNlbmRpZiAvLyBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudF9oCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2
OSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlS2V5VGltZXMoY29uc3QgU3RyaW5nJiAKICAgICAgICAg
U3RyaW5nIHRpbWVTdHJpbmcgPSBwYXJzZUxpc3Rbbl07CiAgICAgICAgIGJvb2wgb2s7CiAgICAg
ICAgIGZsb2F0IHRpbWUgPSB0aW1lU3RyaW5nLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgaWYgKCFv
ayB8fCB0aW1lIDwgMCB8fCB0aW1lID4gMS5mKQorICAgICAgICBpZiAoIW9rIHx8IHRpbWUgPCAw
IHx8IHRpbWUgPiAxKQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBpZiAodmVyaWZ5
T3JkZXIpIHsKICAgICAgICAgICAgIGlmICghbikgewpAQCAtOTgsMjUgKzk4LDI1IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICBib29sIGRlbGltUGFyc2Vk
ID0gZmFsc2U7CiAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewogICAgICAgICBkZWxpbVBhcnNlZCA9
IGZhbHNlOwotICAgICAgICBmbG9hdCBwb3NBID0gMC4wZjsKKyAgICAgICAgZmxvYXQgcG9zQSA9
IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0EpKSB7CiAgICAgICAg
ICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGZsb2F0IHBvc0IgPSAwLjBmOworICAgICAgICBmbG9hdCBwb3NCID0gMDsKICAgICAg
ICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zQikpIHsKICAgICAgICAgICAgIHJlc3Vs
dC5jbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZmxv
YXQgcG9zQyA9IDAuMGY7CisgICAgICAgIGZsb2F0IHBvc0MgPSAwOwogICAgICAgICBpZiAoIXBh
cnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NDKSkgewogICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdCBwb3NEID0g
MC4wZjsKKyAgICAgICAgZmxvYXQgcG9zRCA9IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIo
Y3VyLCBlbmQsIHBvc0QsIGZhbHNlKSkgewogICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yOTAsMjcgKzI5MCwyMiBAQCBib29sIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmlzQWNjdW11bGF0ZWQoCiAgICAgcmV0dXJuIHZhbHVlID09IHN1bSAmJiBhbmlt
YXRpb25Nb2RlKCkgIT0gVG9BbmltYXRpb247CiB9CiAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aGFzVmFsaWRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiB0YXJnZXRFbGVtZW50KCk7
Ci19Ci0KLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9w
ZXJ0eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5h
bWUpCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVy
dHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSkKIHsKICAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CiAgICAgaWYgKCF0YXJnZXRF
bGVtZW50LT5pc1N0eWxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
U1ZHU3R5bGVkRWxlbWVudDo6aXNBbmltYXRhYmxlQ1NTUHJvcGVydHkoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXR0cmlidXRlTmFtZSwgbnVsbEF0b20pKTsKKyAgICByZXR1cm4gU1ZHU3R5bGVk
RWxlbWVudDo6aXNBbmltYXRhYmxlQ1NTUHJvcGVydHkoYXR0cmlidXRlTmFtZSk7CiB9CiAKIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKKyAgICBp
ZiAoIWhhc1ZhbGlkQXR0cmlidXRlVHlwZSgpKQogICAgICAgICByZXR1cm47CiAgICAgU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKLSAgICBTdHJpbmcg
YXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICBpZiAoIXRhcmdldEVs
ZW1lbnQgfHwgYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkgfHwgdmFsdWUuaXNOdWxsKCkpCisgICAg
UXVhbGlmaWVkTmFtZSBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOworICAg
IGlmICghdGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwgdmFs
dWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdGhl
IGluc3RhbmNlIHRyZWUgdG8gZ2V0IHJlYnVpbGQuIEluc3RhbmNlcyBhcmUgdXBkYXRlZCBpbiB0
aGUgbG9vcCBiZWxvdy4KQEAgLTMyNiw3ICszMjEsNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OnNldFRhcmdldEF0dHJpCiAgICAgaWYgKGF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0aGUgb3ZlcnJpZGUgc3R5bGUsIG5vdCB0
aGUgaW5saW5lIHN0eWxlLgogICAgICAgICAvLyBTYWRseSBvdmVycmlkZSBzdHlsZXMgYXJlIG5v
dCB5ZXQgaW1wbGVtZW50ZWQuCi0gICAgICAgIHRhcmdldEVsZW1lbnQtPnN0eWxlKCktPnNldFBy
b3BlcnR5KGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCAiIiwgZWMpOworICAgICAgICB0YXJnZXRFbGVt
ZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpLCB2YWx1
ZSwgIiIsIGVjKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
c2V0IHRoZSAncHJlc2VudGF0aW9uJyB2YWx1ZSwgbm90IHRoZSBhY3R1YWwgCiAgICAgICAgIC8v
IGF0dHJpYnV0ZSB2YWx1ZS4gV2hhdGV2ZXIgdGhhdCBtZWFucyBpbiBwcmFjdGljZS4KQEAgLTM0
NCw3ICszMzksNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpCiAg
ICAgICAgIGlmICghc2hhZG93VHJlZUVsZW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgaWYgKGF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkpCi0gICAgICAgICAgICBzaGFkb3dUcmVl
RWxlbWVudC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZSwgdmFsdWUsICIiLCBl
Yyk7CisgICAgICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+c3R5bGUoKS0+c2V0UHJvcGVydHko
YXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSwgdmFsdWUsICIiLCBlYyk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFt
ZSwgdmFsdWUsIGVjKTsKICAgICAgICAgKCppdCktPmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkt
PnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKQEAgLTM3NSwxMyArMzcwLDEzIEBAIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlS2V5VGkKICAgICAvLyBOb3JtYWxpemUuCiAgICAgZm9y
ICh1bnNpZ25lZCBuID0gMTsgbiA8IGtleVRpbWVzRm9yUGFjZWQuc2l6ZSgpIC0gMTsgKytuKQog
ICAgICAgICBrZXlUaW1lc0ZvclBhY2VkW25dID0ga2V5VGltZXNGb3JQYWNlZFtuIC0gMV0gKyBr
ZXlUaW1lc0ZvclBhY2VkW25dIC8gdG90YWxEaXN0YW5jZTsKLSAgICBrZXlUaW1lc0ZvclBhY2Vk
W2tleVRpbWVzRm9yUGFjZWQuc2l6ZSgpIC0gMV0gPSAxLmY7CisgICAga2V5VGltZXNGb3JQYWNl
ZFtrZXlUaW1lc0ZvclBhY2VkLnNpemUoKSAtIDFdID0gMTsKIAogICAgIC8vIFVzZSBrZXkgdGlt
ZXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBwYWNpbmcgaW5zdGVhZCBvZiB0aGUgdXNlciBwcm92aWRl
ZCBvbmVzLgogICAgIG1fa2V5VGltZXMuc3dhcChrZXlUaW1lc0ZvclBhY2VkKTsKIH0KIAotc3Rh
dGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4g
MS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsgfQorc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNp
bG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMSAvICgyMDAgKiBkdXJhdGlvbik7IH0KIAog
dW5zaWduZWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlS2V5VGltZXNJbmRleChmbG9h
dCBwZXJjZW50KSBjb25zdAogewpAQCAtNDE5LDkgKzQxNCw5IEBAIGZsb2F0IFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmNhbGN1bGF0ZVBlcmMKICAgICBmbG9hdCB0b0tleVBvaW50ID0gbV9rZXlQb2lu
dHNbaW5kZXggKyAxXTsKICAgICAKICAgICBpZiAoY2FsY01vZGUoKSA9PSBDYWxjTW9kZURpc2Ny
ZXRlKQotICAgICAgICByZXR1cm4gcGVyY2VudCA9PSAxLjBmID8gdG9LZXlQb2ludCA6IGZyb21L
ZXlQb2ludDsKKyAgICAgICAgcmV0dXJuIHBlcmNlbnQgPT0gMSA/IHRvS2V5UG9pbnQgOiBmcm9t
S2V5UG9pbnQ7CiAgICAgCi0gICAgZmxvYXQga2V5UG9pbnRQZXJjZW50ID0gcGVyY2VudCA9PSAx
LjBmID8gMS4wZiA6IChwZXJjZW50IC0gZnJvbVBlcmNlbnQpIC8gKHRvUGVyY2VudCAtIGZyb21Q
ZXJjZW50KTsKKyAgICBmbG9hdCBrZXlQb2ludFBlcmNlbnQgPSBwZXJjZW50ID09IDEgPyAxIDog
KHBlcmNlbnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOwogICAg
IAogICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlU3BsaW5lKSB7CiAgICAgICAgIEFTU0VS
VChtX2tleVNwbGluZXMuc2l6ZSgpID09IG1fa2V5UG9pbnRzLnNpemUoKSAtIDEpOwpAQCAtNDM2
LDcgKzQzMSw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0YKICAg
ICBBU1NFUlQobV9rZXlQb2ludHMuc2l6ZSgpID09IG1fa2V5VGltZXMuc2l6ZSgpKTsKICAgICBB
U1NFUlQoY2FsY01vZGUoKSAhPSBDYWxjTW9kZVBhY2VkKTsKICAgICBlZmZlY3RpdmVQZXJjZW50
ID0gY2FsY3VsYXRlUGVyY2VudEZyb21LZXlQb2ludHMocGVyY2VudCk7Ci0gICAgdW5zaWduZWQg
aW5kZXggPSBlZmZlY3RpdmVQZXJjZW50ID09IDEuMGYgPyBtX3ZhbHVlcy5zaXplKCkgLSAyIDog
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVmZmVjdGl2ZVBlcmNlbnQgKiAobV92YWx1ZXMuc2l6ZSgp
IC0gMSkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZWZmZWN0aXZlUGVyY2VudCA9PSAxID8gbV92
YWx1ZXMuc2l6ZSgpIC0gMiA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlZmZlY3RpdmVQZXJjZW50
ICogKG1fdmFsdWVzLnNpemUoKSAtIDEpKTsKICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOwog
ICAgIHRvID0gbV92YWx1ZXNbaW5kZXggKyAxXTsKIH0KQEAgLTQ1OCwxMCArNDUzLDEwIEBAIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0YKICAgICB1bnNpZ25lZCBpbmRl
eCA9IGNhbGN1bGF0ZUtleVRpbWVzSW5kZXgocGVyY2VudCk7CiAgICAgaWYgKGNhbGNNb2RlID09
IENhbGNNb2RlRGlzY3JldGUpIHsKICAgICAgICAgaWYgKCFrZXlUaW1lc0NvdW50KSAKLSAgICAg
ICAgICAgIGluZGV4ID0gcGVyY2VudCA9PSAxLjBmID8gdmFsdWVzQ291bnQgLSAxIDogc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBlcmNlbnQgKiB2YWx1ZXNDb3VudCk7CisgICAgICAgICAgICBpbmRl
eCA9IHBlcmNlbnQgPT0gMSA/IHZhbHVlc0NvdW50IC0gMSA6IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihwZXJjZW50ICogdmFsdWVzQ291bnQpOwogICAgICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhd
OwogICAgICAgICB0byA9IG1fdmFsdWVzW2luZGV4XTsKLSAgICAgICAgZWZmZWN0aXZlUGVyY2Vu
dCA9IDAuMGY7CisgICAgICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSAwOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApAQCAtNDgxLDcgKzQ3Niw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Y3VycmVudFZhbHVlc0YKICAgICBmcm9tID0gbV92YWx1ZXNbaW5kZXhdOwogICAgIHRvID0g
bV92YWx1ZXNbaW5kZXggKyAxXTsKICAgICBBU1NFUlQodG9QZXJjZW50ID4gZnJvbVBlcmNlbnQp
OwotICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBwZXJjZW50ID09IDEuMGYgPyAxLjBmIDogKHBlcmNl
bnQgLSBmcm9tUGVyY2VudCkgLyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOworICAgIGVmZmVj
dGl2ZVBlcmNlbnQgPSBwZXJjZW50ID09IDEgPyAxIDogKHBlcmNlbnQgLSBmcm9tUGVyY2VudCkg
LyAodG9QZXJjZW50IC0gZnJvbVBlcmNlbnQpOwogICAgIAogICAgIGlmIChjYWxjTW9kZSA9PSBD
YWxjTW9kZVNwbGluZSkgewogICAgICAgICBBU1NFUlQobV9rZXlTcGxpbmVzLnNpemUoKSA9PSBt
X3ZhbHVlcy5zaXplKCkgLSAxKTsKQEAgLTQ5Myw3ICs0ODgsNyBAQCB2b2lkIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJCiB7CiAgICAgbV9hbmltYXRpb25WYWxpZCA9IGZhbHNl
OwogCi0gICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpKQorICAgIGlmICghaGFzVmFsaWRBdHRyaWJ1
dGVUeXBlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNlIHZhbGlkYXRpb25zIGFy
ZSBhcHByb3ByaWF0ZSBmb3IgYWxsIGFuaW1hdGlvbiBtb2Rlcy4KQEAgLTU2OSw3ICs1NjQsNSBA
QCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZGVkQWN0aXZlSW50CiB9CiAKIH0KLQotLy8g
dmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIEVOQUJMRShTVkdfQU5JTUFUSU9OKQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDc4NzM0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVuZEVsZW1lbnQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kRWxlbWVudEF0KGZsb2F0IG9mZnNldCk7CiAKLSAgICBz
dGF0aWMgYm9vbCBpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KFNWR0VsZW1lbnQqLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBpc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5
KFNWR0VsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKIHByb3RlY3RlZDoKICAgICBT
VkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAt
NzUsOCArNzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgZW51bSBBbmltYXRpb25Nb2RlIHsg
Tm9BbmltYXRpb24sIFRvQW5pbWF0aW9uLCBCeUFuaW1hdGlvbiwgVmFsdWVzQW5pbWF0aW9uLCBG
cm9tVG9BbmltYXRpb24sIEZyb21CeUFuaW1hdGlvbiwgUGF0aEFuaW1hdGlvbiB9OwogICAgIEFu
aW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CiAgICAgCiAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZUJh
c2VWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1
ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBTVkdGaWx0
ZXJFbGVtZW50OjpmaWxsQXR0cmlidXRlVG9QcgogICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwLnNldChTVkdOYW1lczo6d2lkdGhBdHRyLCBBbmltYXRlZExlbmd0aCk7CiAgICAgYXR0cmli
dXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVzOjpoZWlnaHRBdHRyLCBBbmltYXRlZExl
bmd0aCk7CiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVzOjpmaWx0
ZXJSZXNBdHRyLCBBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyKTsKLSAgICBhdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcC5zZXQoWExpbmtOYW1lczo6aHJlZkF0dHIsIEFuaW1hdGVkRW51bWVy
YXRpb24pOworICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpo
cmVmQXR0ciwgQW5pbWF0ZWRTdHJpbmcpOwogfQogCiB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBO
b2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0dFbGVtZW50LmNwcAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxNyBAQCB2b2lkIFNW
R0dFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvCiAgICAgICAgIFNWR1Rlc3RzOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXModGhpcywgYXR0ck5hbWUpOwogfQogCitBdHRyaWJ1dGVUb1Byb3Bl
cnR5VHlwZU1hcCYgU1ZHR0VsZW1lbnQ6OmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLCBzX2F0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLCAoKSk7CisgICAgcmV0dXJuIHNfYXR0cmlidXRlVG9Q
cm9wZXJ0eVR5cGVNYXA7Cit9CisKK3ZvaWQgU1ZHR0VsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcCgpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmZp
bGxQYXNzZWRBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcChhdHRyaWJ1dGVUb1Byb3BlcnR5VHlw
ZU1hcCgpKTsKK30KKwogUmVuZGVyT2JqZWN0KiBTVkdHRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgLy8gU1ZHIDEu
MSB0ZXN0c3VpdGUgZXhwbGljaXRlbHkgdXNlcyBjb25zdHJ1Y3RzIGxpa2UgPGcgZGlzcGxheT0i
bm9uZSI+PGxpbmVhckdyYWRpZW50PgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgJKHJl
dmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CisgICAgdmlydHVhbCBBdHRyaWJ1dGVU
b1Byb3BlcnR5VHlwZU1hcCYgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAoKTsKIAogICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQy
LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpmaWxsQXR0cmlidXRlVG9Qcm9wZQogICAgIGF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChTVkdOYW1lczo6eUF0dHIsIEFuaW1hdGVkTGVuZ3Ro
KTsKICAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcC5zZXQoU1ZHTmFtZXM6OndpZHRoQXR0
ciwgQW5pbWF0ZWRMZW5ndGgpOwogICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChT
VkdOYW1lczo6aGVpZ2h0QXR0ciwgQW5pbWF0ZWRMZW5ndGgpOwotICAgIGF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwgQW5pbWF0ZWRMZW5ndGgpOwor
ICAgIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwLnNldChYTGlua05hbWVzOjpocmVmQXR0ciwg
QW5pbWF0ZWRTdHJpbmcpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVDb250YWluZXJTaXplKFNW
R1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQsIFNWR0VsZW1lbnRJbnN0YW5jZSogdGFyZ2V0SW5zdGFu
Y2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1l
Q29udGFpbmVyLmNwcAkocmV2aXNpb24gNzg3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEyICsx
OTcsMTIgQEAgU3RyaW5nIFNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVGb3IoRQogICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKICAgICAKICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
ID0ga2V5LmZpcnN0OwotICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0ga2V5LnNlY29uZDsKKyAg
ICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUgPSBrZXkuc2Vjb25kOwogICAgIEFTU0VSVCh0
YXJnZXRFbGVtZW50KTsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoYXR0cmlidXRlTmFtZSAhPSBhbnlRTmFtZSgpKTsKICAgICBTdHJpbmcgYmFzZVZh
bHVlOwogICAgIGlmIChTVkdBbmltYXRpb25FbGVtZW50Ojppc1RhcmdldEF0dHJpYnV0ZUNTU1By
b3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKQotICAgICAgICBiYXNlVmFsdWUg
PSBjb21wdXRlZFN0eWxlKHRhcmdldEVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3Bl
cnR5SUQoYXR0cmlidXRlTmFtZSkpOworICAgICAgICBiYXNlVmFsdWUgPSBjb21wdXRlZFN0eWxl
KHRhcmdldEVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQoYXR0cmlidXRl
TmFtZS5sb2NhbE5hbWUoKSkpOwogICAgIGVsc2UKICAgICAgICAgYmFzZVZhbHVlID0gdGFyZ2V0
RWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogICAgIG1fc2F2ZWRCYXNlVmFs
dWVzLmFkZChrZXksIGJhc2VWYWx1ZSk7CkBAIC0yNjQsMTAgKzI2NCwxMSBAQCB2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zCiAgICAgICAgIFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQgPSBhbmltYXRpb24tPnRhcmdldEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRFbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVOYW1lID0gYW5pbWF0aW9uLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1
dGVOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICAKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRy
aWJ1dGVOYW1lID0gYW5pbWF0aW9uLT5hdHRyaWJ1dGVOYW1lKCk7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVOYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKQotICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZU5hbWUgPSBTVkdOYW1lczo6YW5pbWF0ZU1vdGlvblRhZy5sb2NhbE5hbWUoKTsKKyAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25UYWc7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
QEAgLTI3Niw2ICsyNzcsOCBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRp
b25zCiAgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVQYWlyIGtleSh0YXJnZXRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lKTsgCiAgICAgICAgIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50ID0gcmVz
dWx0c0VsZW1lbnRzLmdldChrZXkpLmdldCgpOwogICAgICAgICBpZiAoIXJlc3VsdEVsZW1lbnQp
IHsKKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHJlc3VsdEVsZW1lbnQgPSBh
bmltYXRpb247CiAgICAgICAgICAgICByZXN1bHRFbGVtZW50LT5yZXNldFRvQmFzZVZhbHVlKGJh
c2VWYWx1ZUZvcihrZXkpKTsKICAgICAgICAgICAgIHJlc3VsdHNFbGVtZW50cy5hZGQoa2V5LCBy
ZXN1bHRFbGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NNSUxUaW1lQ29udGFpbmVyLmgJKHJldmlzaW9uIDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU01JTFRpbWUuaCIKICNp
bmNsdWRlICJUaW1lci5oIgpAQCAtNzQsNyArNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlRG9jdW1lbnRPcmRlckluZGV4ZXMoKTsKICAgICB2b2lkIHNvcnRCeVByaW9yaXR5KFZlY3Rv
cjxTVkdTTUlMRWxlbWVudCo+JiBzbWlsRWxlbWVudHMsIFNNSUxUaW1lIGVsYXBzZWQpOwogICAg
IAotICAgIHR5cGVkZWYgcGFpcjxTVkdFbGVtZW50KiwgU3RyaW5nPiBFbGVtZW50QXR0cmlidXRl
UGFpcjsKKyAgICB0eXBlZGVmIHBhaXI8U1ZHRWxlbWVudCosIFF1YWxpZmllZE5hbWU+IEVsZW1l
bnRBdHRyaWJ1dGVQYWlyOwogICAgIFN0cmluZyBiYXNlVmFsdWVGb3IoRWxlbWVudEF0dHJpYnV0
ZVBhaXIpOwogICAgIAogICAgIGRvdWJsZSBtX2JlZ2luVGltZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3ODcz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
LSNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTE1LDYg
KzExNCw3IEBAIFNWR1NNSUxFbGVtZW50OjpDb25kaXRpb246OkNvbmRpdGlvbihUeXAKICAgICAK
IFNWR1NNSUxFbGVtZW50OjpTVkdTTUlMRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAg
LCBtX2F0dHJpYnV0ZU5hbWUoYW55UU5hbWUoKSkKICAgICAsIG1fY29uZGl0aW9uc0Nvbm5lY3Rl
ZChmYWxzZSkKICAgICAsIG1faGFzRW5kRXZlbnRDb25kaXRpb25zKGZhbHNlKQogICAgICwgbV9p
bnRlcnZhbEJlZ2luKFNNSUxUaW1lOjp1bnJlc29sdmVkKCkpCkBAIC0xNDAsNiArMTQwLDI4IEBA
IFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogICAgIGlmIChtX3RpbWVDb250YWlu
ZXIpCiAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzKTsKIH0KKworc3Rh
dGljIGlubGluZSBRdWFsaWZpZWROYW1lIGNvbnN0cnVjdFF1YWxpZmllZE5hbWUoY29uc3QgU1ZH
RWxlbWVudCogc3ZnRWxlbWVudCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKQoreworICAg
IEFTU0VSVChzdmdFbGVtZW50KTsKKyAgICBpZiAoYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBhbnlRTmFtZSgpOworICAgIGlmICghYXR0cmlidXRlTmFtZS5jb250YWlu
cygnOicpKQorICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXR0cmlidXRl
TmFtZSwgbnVsbEF0b20pOworICAgIAorICAgIFN0cmluZyBwcmVmaXg7CisgICAgU3RyaW5nIGxv
Y2FsTmFtZTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoIURvY3VtZW50Ojpw
YXJzZVF1YWxpZmllZE5hbWUoYXR0cmlidXRlTmFtZSwgcHJlZml4LCBsb2NhbE5hbWUsIGVjKSkK
KyAgICAgICAgcmV0dXJuIGFueVFOYW1lKCk7CisgICAgQVNTRVJUKCFlYyk7CisgICAgCisgICAg
U3RyaW5nIG5hbWVzcGFjZVVSSSA9IHN2Z0VsZW1lbnQtPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVm
aXgpOyAgICAKKyAgICBpZiAobmFtZXNwYWNlVVJJLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGFueVFOYW1lKCk7CisgICAgCisgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxv
Y2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKK30KICAgICAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCkKIHsKQEAgLTE0OSw2ICsxNzEsNyBAQCB2b2lkIFNWR1NNSUxF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVuCiAgICAgZm9yIChDb250YWluZXJOb2RlKiBuID0g
dGhpczsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAgICAgICAgQVNTRVJUKCFuLT5pc1NoYWRv
d1Jvb3QoKSk7CiAjZW5kaWYKKyAgICBtX2F0dHJpYnV0ZU5hbWUgPSBjb25zdHJ1Y3RRdWFsaWZp
ZWROYW1lKHRoaXMsIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpKTsK
ICAgICBTVkdTVkdFbGVtZW50KiBvd25lciA9IG93bmVyU1ZHRWxlbWVudCgpOwogICAgIGlmICgh
b3duZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw2ICsxODMsNyBAQCB2b2lkIFNWR1NNSUxF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVuCiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKQogeworICAgIG1fYXR0cmlidXRlTmFtZSA9IGFueVFOYW1lKCk7CiAg
ICAgaWYgKG1fdGltZUNvbnRhaW5lcikgewogICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2No
ZWR1bGUodGhpcyk7CiAgICAgICAgIG1fdGltZUNvbnRhaW5lciA9IDA7CkBAIC0zODAsNyArNDA0
LDExIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXQKICAgICAgICAg
bV9jYWNoZWRNaW4gPSBpbnZhbGlkQ2FjaGVkVGltZTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6bWF4QXR0cikKICAgICAgICAgbV9jYWNoZWRNYXggPSBpbnZhbGlkQ2FjaGVk
VGltZTsKLSAgICAKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXR0cmlidXRl
TmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKGluRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIG1fYXR0
cmlidXRlTmFtZSA9IGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywgYXR0ci0+dmFsdWUoKSk7
CisgICAgfQorCiAgICAgaWYgKGluRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmJlZ2luQXR0cikKICAgICAgICAgICAgIGJlZ2luTGlzdENoYW5nZWQoKTsK
QEAgLTQ2NywxMiArNDk1LDcgQEAgU1ZHRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVs
ZW1lbgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdldCk7CiAg
ICAgcmV0dXJuIDA7CiB9Ci0gICAgCi1TdHJpbmcgU1ZHU01JTEVsZW1lbnQ6OmF0dHJpYnV0ZU5h
bWUoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRy
aWJ1dGVOYW1lQXR0cikuc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci19Ci0gICAgCisKIFNN
SUxUaW1lIFNWR1NNSUxFbGVtZW50OjplbGFwc2VkKCkgY29uc3QgCiB7CiAgICAgcmV0dXJuIG1f
dGltZUNvbnRhaW5lciA/IG1fdGltZUNvbnRhaW5lci0+ZWxhcHNlZCgpIDogMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9u
IDc4NzM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0ZVR5cGUoKSBjb25zdCA9IDA7
CiAKICAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQogCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCgpIGNvbnN0OwotICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CisgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
TmFtZTsgfQogCiAgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKIApAQCAtMTc1LDYg
KzE3Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIEZyb3plbgogICAgIH07CiAKKyAgICBRdWFsaWZp
ZWROYW1lIG1fYXR0cmlidXRlTmFtZTsKKwogICAgIEFjdGl2ZVN0YXRlIGRldGVybWluZUFjdGl2
ZVN0YXRlKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0OwogICAgIGZsb2F0IGNhbGN1bGF0ZUFuaW1h
dGlvblBlcmNlbnRBbmRSZXBlYXQoU01JTFRpbWUgZWxhcHNlZCwgdW5zaWduZWQmIHJlcGVhdCkg
Y29uc3Q7CiAgICAgU01JTFRpbWUgY2FsY3VsYXRlTmV4dFByb2dyZXNzVGltZShTTUlMVGltZSBl
bGFwc2VkKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODUyKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDItMTcgIERp
cmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIC0gYW5hbHl6ZSBhdHRyaWJ1dGUg
dHlwZSBmb3IgYW5pbWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NDU0MgorCisgICAgICAgIENoZWNrIGR5bmFtaWMgdXBkYXRlIG9mIGF0dHJp
YnV0ZU5hbWUuIFRoZSB0ZXN0IGZhaWxzIGF0IHRoZSBtb21lbnQsIGJlY2F1c2Ugb2Ygc29tZSB3
cm9uZworICAgICAgICBpbnRlcm5hbCBtYXBwaW5nLiBUZXN0ZWQgdXBkYXRlIG1hbnVhbGx5IHdp
dGggZ2RiLiBXb3JraW5nIG9uIGEgZml4IHRvIGdldCB0aGlzIHRlc3QgcGFzcworICAgICAgICBh
cyB3ZWxsLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0
ZS1hdHRyaWJ1dGVOYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL2FuaW1h
dGlvbnMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBk
YXRlLWF0dHJpYnV0ZU5hbWUuanM6IEFkZGVkLgorICAgICAgICAoc2FtcGxlMSk6CisgICAgICAg
IChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAoZXhlY3V0ZVRlc3QpOgor
CiAyMDExLTAyLTE3ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtZHluYW1pYy11
cGRhdGUtYXR0cmlidXRlTmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitTVkcgMS4xIGR5bmFt
aWMgYW5pbWF0aW9uIHRlc3RzCisKK1Rlc3QgYmVoYXZpb3Igb24gZHluYW1pYy11cGRhdGUgb2Yg
YXR0cmlidXRlTmFtZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZWN0
LnN0eWxlLmNvbG9yIGlzICdyZ2IoMCwgMTI4LCAwKScKK0ZBSUwgcmVjdC5zdHlsZS5maWxsIHNo
b3VsZCBiZSAjMDA4MDAwLiBXYXMgI0ZGMDAwMC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9u
cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJp
YnV0ZU5hbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmlidXRlTmFtZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL2R5bmFtaWMtdXBkYXRlcy9yZXNvdXJjZXMvU1ZHVGVzdENhc2UuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3Rz
PC9oMT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2FuaW1hdGUtZHluYW1pYy11cGRhdGUtYXR0cmli
dXRlTmFtZS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1keW5hbWljLXVwZGF0ZS1hdHRy
aWJ1dGVOYW1lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3Nj
cmlwdC10ZXN0cy9hbmltYXRlLWR5bmFtaWMtdXBkYXRlLWF0dHJpYnV0ZU5hbWUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0
ZS1keW5hbWljLXVwZGF0ZS1hdHRyaWJ1dGVOYW1lLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUyIEBACitkZXNjcmlwdGlvbigiVGVzdCBiZWhhdmlvciBvbiBkeW5hbWljLXVwZGF0ZSBvZiBh
dHRyaWJ1dGVOYW1lIik7CitjcmVhdGVTVkdUZXN0Q2FzZSgpOworCisvLyBTZXR1cCB0ZXN0IGRv
Y3VtZW50Cit2YXIgcmVjdCA9IGNyZWF0ZVNWR0VsZW1lbnQoInJlY3QiKTsKK3JlY3Quc2V0QXR0
cmlidXRlKCJpZCIsICJyZWN0Iik7CityZWN0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCAiMjAwIik7
CityZWN0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgIjIwMCIpOworcmVjdC5zZXRBdHRyaWJ1dGUo
ImZpbGwiLCAicmVkIik7CityZWN0LnNldEF0dHJpYnV0ZSgiY29sb3IiLCAicmVkIik7CityZWN0
LnNldEF0dHJpYnV0ZSgib25jbGljayIsICJleGVjdXRlVGVzdCgpIik7CisKK3ZhciBhbmltYXRl
ID0gY3JlYXRlU1ZHRWxlbWVudCgiYW5pbWF0ZSIpOworYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImlk
IiwgImFuaW1hdGlvbiIpOworYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImF0dHJpYnV0ZU5hbWUiLCAi
Y29sb3IiKTsKK2FuaW1hdGUuc2V0QXR0cmlidXRlKCJmcm9tIiwgImdyZWVuIik7CithbmltYXRl
LnNldEF0dHJpYnV0ZSgidG8iLCAiZ3JlZW4iKTsKK2FuaW1hdGUuc2V0QXR0cmlidXRlKCJiZWdp
biIsICJjbGljayIpOworYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImR1ciIsICIzcyIpOworYW5pbWF0
ZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZnJlZXplIik7CithbmltYXRlLnNldEF0dHJpYnV0ZSgi
Y2FsY01vZGUiLCAiZGlzY3JldGUiKTsKK3JlY3QuYXBwZW5kQ2hpbGQoYW5pbWF0ZSk7Cityb290
U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChyZWN0KTsKKworLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QK
K2Z1bmN0aW9uIHNhbXBsZTEoKSB7CisgICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuY29sb3IiLCAi
J3JnYigwLCAxMjgsIDApJyIpOworfQorCitmdW5jdGlvbiBzYW1wbGUyKCkgeworICAgIC8vIFNl
dCAnYXR0cmlidXRlTmFtZScgZnJvbSAnY29sb3InIHRvICdmaWxsJworICAgIGFuaW1hdGUuc2V0
QXR0cmlidXRlKCJhdHRyaWJ1dGVOYW1lIiwgImZpbGwiKTsKK30KKworZnVuY3Rpb24gc2FtcGxl
MygpIHsKKyAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjMDA4MDAwJyIpOworfQor
CitmdW5jdGlvbiBleGVjdXRlVGVzdCgpIHsKKyAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IFsK
KyAgICAgICAgLy8gW2FuaW1hdGlvbklkLCB0aW1lLCBlbGVtZW50SWQsIHNhbXBsZUNhbGxiYWNr
XQorICAgICAgICBbImFuaW1hdGlvbiIsIDAuMSwgICAgInJlY3QiLCBzYW1wbGUxXSwKKyAgICAg
ICAgWyJhbmltYXRpb24iLCAxLjUsICAgICJyZWN0Iiwgc2FtcGxlMl0sCisgICAgICAgIFsiYW5p
bWF0aW9uIiwgMy4wLCAgICAicmVjdCIsIHNhbXBsZTNdLAorICAgIF07CisKKyAgICBydW5Bbmlt
YXRpb25UZXN0KGV4cGVjdGVkVmFsdWVzKTsKK30KKworLy8gQmVnaW4gdGVzdCBhc3luYword2lu
ZG93LnNldFRpbWVvdXQoInRyaWdnZXJVcGRhdGUoNTAsIDUwKSIsIDApOwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="74553"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>