<?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>179595</bug_id>
          
          <creation_ts>2017-11-12 09:26:49 -0800</creation_ts>
          <short_desc>Clean up gradient code in preparation for conic gradients</short_desc>
          <delta_ts>2017-11-19 15:07:40 -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>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1370760</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-12 09:26:49 -0800</bug_when>
    <thetext>Clean up gradient code in preparation for conic gradients</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370761</commentid>
    <comment_count>1</comment_count>
      <attachid>326717</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-12 09:44:50 -0800</bug_when>
    <thetext>Created attachment 326717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370764</commentid>
    <comment_count>2</comment_count>
      <attachid>326718</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-12 10:13:22 -0800</bug_when>
    <thetext>Created attachment 326718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370773</commentid>
    <comment_count>3</comment_count>
      <attachid>326723</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-12 11:41:35 -0800</bug_when>
    <thetext>Created attachment 326723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370791</commentid>
    <comment_count>4</comment_count>
      <attachid>326723</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-12 15:59:41 -0800</bug_when>
    <thetext>Comment on attachment 326723
Patch

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

&gt; Source/WebCore/css/CSSGradientValue.cpp:138
&gt; +struct LinearGradientAdaptor {

Unclear to me why this is a struct rather than a class.

&gt; Source/WebCore/css/CSSGradientValue.cpp:139
&gt; +    LinearGradientAdaptor(Gradient::LinearData&amp; data)

Should mark this explicit since it’s not for type conversion.

&gt; Source/WebCore/css/CSSGradientValue.cpp:161
&gt; +            data.point0 = FloatPoint(p0.x() + firstOffset * (p1.x() - p0.x()), p0.y() + firstOffset * (p1.y() - p0.y()));
&gt; +            data.point1 = FloatPoint(p1.x() + (lastOffset - 1) * (p1.x() - p0.x()), p1.y() + (lastOffset - 1) * (p1.y() - p0.y()));

Can we use { } instead of FloatPoint( ) here?

&gt; Source/WebCore/css/CSSGradientValue.cpp:172
&gt; +struct RadialGradientAdaptor {

Unclear to me why this is a struct rather than a class.

&gt; Source/WebCore/css/CSSGradientValue.cpp:173
&gt; +    RadialGradientAdaptor(Gradient::RadialData&amp; data)

Should mark this explicit since it’s not for type conversion.

&gt; Source/WebCore/css/CSSGradientValue.cpp:179
&gt; +    FloatPoint startPoint() { return data.point0; }
&gt; +    FloatPoint endPoint() { return data.point0 + FloatSize(data.endRadius, 0); }

Should be const. Might use FloatSize { } instead of FloatSize( ).

&gt; Source/WebCore/css/CSSGradientValue.cpp:230
&gt; +        for (auto&amp; stop : stops)
&gt; +            stop.offset /= scale;

Is it more efficient to invert scale and use *= inside the loop?

&gt; Source/WebCore/css/CSSGradientValue.cpp:239
&gt; +template&lt;class GradientAdaptor&gt;

I normally use typename rather than class. Also, I often put these on the same line, but in this case that would be a long one so maybe not.

&gt; Source/WebCore/css/CSSGradientValue.cpp:267
&gt; +    FloatSize gradientSize(gradientStart - gradientEnd);

Consider this:

    auto gradientSize = gradientStart - gradientEnd;

&gt; Source/WebCore/css/CSSGradientValue.cpp:827
&gt; +    LinearGradientAdaptor adaptor { data };

What&apos;s the argument for adaptor vs. adapter in these names? I would be tempted to just always use the more common spelling &quot;adapter&quot;.

&gt; Source/WebCore/css/CSSGradientValue.h:112
&gt; +    template&lt;class GradientAdaptor&gt;

typename

&gt; Source/WebCore/platform/graphics/Gradient.h:92
&gt; +    enum class Type {
&gt; +        Linear,
&gt; +        Radial
&gt; +    };

I like these kinds of things as one-liners.

&gt; Source/WebCore/platform/graphics/Gradient.h:97
&gt; +    static Ref&lt;Gradient&gt; create(LinearData&amp;&amp; data)
&gt; +    {
&gt; +        return adoptRef(*new Gradient(WTFMove(data)));
&gt; +    }

I’ve been learning towards putting these create function bodies in cpp files and inlining the constructors instead of inlining the create functions. Smaller at each call site, roughly the same number of function calls.

&gt; Source/WebCore/platform/graphics/Gradient.h:111
&gt; +    const Variant&lt;LinearData, RadialData&gt;&amp; data() const { return m_data; }

Could consider:

    using Data = Variant&lt;LinearData, RadialData&gt;;

Then we would have members Data (&quot;type member&quot;), data (function member), and m_data (data member). I did something similar in my recent work in another class.

&gt; Source/WebCore/platform/graphics/Gradient.h:124
&gt; +    AffineTransform gradientSpaceTransform() { return m_gradientSpaceTransformation; }

Make this const? Return a const&amp; since AffineTransform is really big?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373696</commentid>
    <comment_count>5</comment_count>
      <attachid>327349</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-19 13:54:15 -0800</bug_when>
    <thetext>Created attachment 327349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373703</commentid>
    <comment_count>6</comment_count>
      <attachid>327350</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-11-19 14:03:43 -0800</bug_when>
    <thetext>Created attachment 327350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373706</commentid>
    <comment_count>7</comment_count>
      <attachid>327350</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-19 15:06:07 -0800</bug_when>
    <thetext>Comment on attachment 327350
Patch

Clearing flags on attachment: 327350

Committed r225036: &lt;https://trac.webkit.org/changeset/225036&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373707</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-19 15:06:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373708</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-19 15:07:40 -0800</bug_when>
    <thetext>&lt;rdar://problem/35638901&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326717</attachid>
            <date>2017-11-12 09:44:50 -0800</date>
            <delta_ts>2017-11-12 10:13:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179595-20171112094449.patch</filename>
            <type>text/plain</type>
            <size>57245</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDczNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBAQAorMjAxNy0xMS0xMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENsZWFuIHVwIGdyYWRpZW50IGNvZGUg
aW4gcHJlcGFyYXRpb24gZm9yIGNvbmljIGdyYWRpZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBTd2l0Y2hlcyBHcmFkaWVudCB0byB1c2UgYSBW
YXJpZW50IHdpdGggdHlwZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHMgYW5kIG1ha2VzIHRoZSAKKyAg
ICAgICAgICBwb2ludHMgLyByYWRpaSBpbW11dGFibGUuCisgICAgICAgIC0gUmVwbGFjZXMgQ1NT
R3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMgd2l0aCB0ZW1wbGF0ZSBmdW5jdGlvbiBDU1NHcmFkaWVu
dFZhbHVlOjpjb21wdXRlU3RvcHMKKyAgICAgICAgICB3aGljaCBkaXNwYXRjaGVzIHRvIGEgaGVs
cGVyIGFkb3B0b3Igc3RydWN0IHdoaWNoIGlzIHBhc3NlZCBpbiBmb3IgZ3JhZGllbnQgdHlwZSBz
cGVjaWZpYworICAgICAgICAgIHZhbHVlcywgcmF0aGVyIHRoYW4gc3dpdGNoaW5nIG9uIHR5cGUg
aW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gSW4gYWRkaXRpb24sIHRoZSBmdW5jdGlvbiBubworICAg
ICAgICAgIGxvbmdlciBtdXRhdGVzIGEgR3JhZGllbnQsIGJ1dCByYXRoZXIgbXV0YXRlcyB0eXBl
IHNwZWNpZmljIHRoZSBkYXRhIHN0cnVjdCAoZS5nLiBMaW5lYXIgb3IKKyAgICAgICAgICBSYWRp
YWwgZm9yIG5vdykuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lYXJHcmFkaWVudEFkYXB0b3I6OkxpbmVhckdyYWRpZW50QWRhcHRv
cik6CisgICAgICAgIChXZWJDb3JlOjpSYWRpYWxHcmFkaWVudEFkYXB0b3I6OlJhZGlhbEdyYWRp
ZW50QWRhcHRvcik6CisKKyAgICAgICAgICAgIEFkZCBoZWxwZXIgc3RydWN0cyBmb3IgdGhlIG5v
dyB0ZW1wbGF0aXplZCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMgdGhhdAorICAgICAg
ICAgICAgaW1wbGVtZW50IHR5cGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAo
V2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKToKKyAgICAgICAgCisgICAg
ICAgICAgICBSZW5hbWVkIGZyb20gYWRkU3RvcHMuIE5vdyB0YWtlcyBhIEdyYWRpZW50QWRhcHRv
ciB3cmFwcGVyIHdoaWNoIGFic3RyYWN0cyBvdXQKKyAgICAgICAgICAgIHRoZSBncmFkaWVudCB0
eXBlIHNwZWNpZmljIGZ1bmN0aW9ubGl0eS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpD
U1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KToKKyAgICAgICAgCisg
ICAgICAgICAgICBVcGRhdGUgdG8gY2FsbCBjb21wdXRlU3RvcHMgYW5kIHVzZSBuZXcgR3JhZGll
bnQgY3JlYXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUg
Zm9yIGNvbXB1dGVTdG9wcy4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OkNhbnZhc0dy
YWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBHcmFkaWVu
dCBjcmVhdGUgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFy
cmF5Rm9yQ2FudmFzR3JhZGllbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBn
ZXQgZ3JhZGllbnQgcG9pbnQgLyByYWRpaSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhIGFjY2Vz
c29yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6OkdyYWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBV
cGRhdGUgY29uc3RydWN0b3JzIHRvIHRoZSBuZXcgZGF0YSBzdHJ1Y3RzLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojp0eXBlIGNvbnN0KToKKyAgICAgICAgCisgICAgICAg
ICAgICBBZGQgaGVscGVyIHRvIGdldCB0aGUgdHlwZSBvZiB0aGUgdmFyaWVudCwgbmVlZCBmb3Ig
aW5zcGVjdG9yIGNvZGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFk
anVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OmlzWmVyb1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc2gg
Y29uc3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBzd2l0Y2ggb24gdGhlIHVu
ZGVybHlpbmcgdmFyaWFudCB0byBnZXQgZGF0YSB2YWx1ZXMuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6CisgICAgICAgIAorICAgICAgICAgICAg
U2ltcGxpZnkgYnkgaGF2aW5nIG9uZSBhZGRDb2xvclN0b3AgY2FsbCB0aGUgb3RoZXIuCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3Bz
KToKKyAgICAgICAgCisgICAgICAgICAgICBBZGRlZC4gUmVwbGFjZXMgc2V0U3RvcHNTb3J0ZWQu
IFVzZWQgbm93IHRoYXQgQ1NTR3JhZGllbnRWYWx1ZSBjb21wdXRlcyBhbmQgc29ydHMKKyAgICAg
ICAgICAgIGl0cyBjb2xvciBzdG9wcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGdyYWRpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpjcmVhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlcGxhY2UgY3JlYXRl
IGZ1bmN0aW9ucyB3aXRoIG9uZXMgdGhhdCB0YWtlIGRhdGEgc3RydWN0cy4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZGF0YSBjb25zdCk6CisKKyAgICAgICAgICAgIEFk
ZCBhY2Nlc3NvciBmb3IgdGhlIHVuZGVybHlpbmcgdmFyaWFudC4KKworICAgICAgICAoV2ViQ29y
ZTo6R3JhZGllbnQ6OmlzUmFkaWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgCisgICAgICAg
ICAgICBSZXBsYWNlZCBieSB0eXBlIGFjY2Vzc29yLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpwMCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFk
aWVudDo6cDEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNl
dFAwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c3RhcnRSYWRpdXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmVuZFJhZGl1cyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U3RhcnRSYWRpdXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEVuZFJhZGl1cyk6IERlbGV0ZWQuCisg
ICAgICAgIAorICAgICAgICAgICAgUG9pbnQgYW5kIHJhZGlpIGFyZSBub3cgaW1tdXRhYmxlLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTdG9wc1NvcnRlZCk6IERl
bGV0ZWQuCisgICAgICAgIAorICAgICAgICAgICAgUmVwbGFjZWQgYnkgc2V0U29ydGVkQ29sb3JT
dG9wcyBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNzQ29udGV4dCBi
eSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBs
YXRmb3JtR3JhZGllbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8gc3dpdGNoIG9uIHRoZSB1
bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisgICAgICAgIChXZWJDb3Jl
OjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0aGUgR3JhcGhp
Y3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxh
dGZvcm1EZXN0cm95KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgbnVsbHB0ci4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAg
ICAgICAgUGFzcyB0aGUgR3JhcGhpY3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGFpbnQpOgorCisgICAgICAgICAgICBVcGRhdGUg
dG8gc3dpdGNoIG9uIHRoZSB1bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBo
aWNzQ29udGV4dCBieSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKworICAgICAgICAgICAgVXBkYXRlIHRvIHN3aXRjaCBv
biB0aGUgdW5kZXJseWluZyB2YXJpYW50IHRvIGdldCBkYXRhIHZhbHVlcy4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgCisgICAgICAgICAgICBQYXNz
IHRoZSBHcmFwaGljc0NvbnRleHQgYnkgcmVmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyYWRp
ZW50IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBHcmFkaWVu
dCBjcmVhdGUgZnVuY3Rpb24gc2lnbmF0dXJlLgorCiAyMDE3LTExLTExICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW1hjb2RlXSBXZWJDb3JlIGdlbmVyYXRlcyB1
bmlmaWVkIHNvdXJjZXMgZHVyaW5nIGluc3RhbGxoZHJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuY3BwCShyZXZpc2lvbiAyMjQ3MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw1NyArMTM1
LDE0OSBAQCBzdGF0aWMgaW5saW5lIENvbG9yIGludGVycG9sYXRlKGNvbnN0IENvCiAgICAgcmV0
dXJuIENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAotdm9pZCBDU1NHcmFkaWVu
dFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpCitz
dHJ1Y3QgTGluZWFyR3JhZGllbnRBZGFwdG9yIHsKKyAgICBMaW5lYXJHcmFkaWVudEFkYXB0b3Io
R3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCisgICAgICAgIDogZGF0YShkYXRhKQorICAgIHsK
KyAgICB9CisKKyAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoKSBjb25zdCB7IHJldHVybiBkYXRh
LnBvaW50MDsgfQorICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQoKSBjb25zdCB7IHJldHVybiBkYXRh
LnBvaW50MTsgfQorICAgIGZsb2F0IG1heEV4dGVudChmbG9hdCwgZmxvYXQpIGNvbnN0IHsgcmV0
dXJuIDE7IH0KKworICAgIHZvaWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFu
Z2UoVmVjdG9yPEdyYWRpZW50U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAgZmxvYXQgZmly
c3RPZmZzZXQgPSBzdG9wcy5maXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgbGFzdE9mZnNl
dCA9IHN0b3BzLmxhc3QoKS5vZmZzZXQ7CisgICAgICAgIGlmIChmaXJzdE9mZnNldCAhPSBsYXN0
T2Zmc2V0KSB7CisgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9m
ZnNldDsKKworICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgICAg
ICAgICAgc3RvcC5vZmZzZXQgPSAoc3RvcC5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsK
KworICAgICAgICAgICAgYXV0byBwMCA9IGRhdGEucG9pbnQwOworICAgICAgICAgICAgYXV0byBw
MSA9IGRhdGEucG9pbnQxOworICAgICAgICAgICAgZGF0YS5wb2ludDAgPSBGbG9hdFBvaW50KHAw
LngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngoKSAtIHAwLngoKSksIHAwLnkoKSArIGZpcnN0T2Zm
c2V0ICogKHAxLnkoKSAtIHAwLnkoKSkpOworICAgICAgICAgICAgZGF0YS5wb2ludDEgPSBGbG9h
dFBvaW50KHAxLngoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEu
eSgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS55KCkgLSBwMC55KCkpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFRoZXJlJ3MgYSBzaW5nbGUgcG9zaXRpb24gdGhhdCBpcyBv
dXRzaWRlIHRoZSBzY2FsZSwgY2xhbXAgdGhlIHBvc2l0aW9ucyB0byAxLgorICAgICAgICAgICAg
Zm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAx
OworICAgICAgICB9CisgICAgfQorCisgICAgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGE7Cit9
OworCitzdHJ1Y3QgUmFkaWFsR3JhZGllbnRBZGFwdG9yIHsKKyAgICBSYWRpYWxHcmFkaWVudEFk
YXB0b3IoR3JhZGllbnQ6OlJhZGlhbERhdGEmIGRhdGEpCisgICAgICAgIDogZGF0YShkYXRhKQor
ICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoKSB7IHJldHVybiBkYXRh
LnBvaW50MDsgfQorICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQoKSB7IHJldHVybiBkYXRhLnBvaW50
MCArIEZsb2F0U2l6ZShkYXRhLmVuZFJhZGl1cywgMCk7IH0KKworICAgIC8vIFJhZGlhbCBncmFk
aWVudHMgbWF5IG5lZWQgdG8gZXh0ZW5kIGZ1cnRoZXIgdGhhbiB0aGUgZW5kcG9pbnRzLCBiZWNh
dXNlIHRoZXkgaGF2ZQorICAgIC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhl
IGJveC4KKyAgICBmbG9hdCBtYXhFeHRlbnQoZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0LCBmbG9h
dCBncmFkaWVudExlbmd0aCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtYXhMZW5ndGhGb3JS
ZXBlYXQgPiBncmFkaWVudExlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudExlbmd0
aCA+IDAgPyBtYXhMZW5ndGhGb3JSZXBlYXQgLyBncmFkaWVudExlbmd0aCA6IDA7CisgICAgICAg
IHJldHVybiAxOworICAgIH0KKworICAgIHZvaWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNP
dXRzaWRlUmFuZ2UoVmVjdG9yPEdyYWRpZW50U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAg
YXV0byBudW1TdG9wcyA9IHN0b3BzLnNpemUoKTsKKworICAgICAgICAvLyBSYXRoZXIgdGhhbiBz
Y2FsaW5nIHRoZSBwb2ludHMgPCAwLCB3ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFj
Y29yZGluZyB0byB0aGUgbGFyZ2VzdCBwb2ludC4KKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQg
PSAwOworICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gc3RvcHMubGFzdCgpLm9mZnNldDsKKyAg
ICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmlyc3RPZmZzZXQ7CisKKyAgICAgICAg
Ly8gUmVzZXQgcG9pbnRzIGJlbG93IDAgdG8gdGhlIGZpcnN0IHZpc2libGUgY29sb3IuCisgICAg
ICAgIHNpemVfdCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChz
dG9wc1tpXS5vZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgICAgIGZpcnN0WmVyb09yR3JlYXRl
ckluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKKyAgICAg
ICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmIHN0b3BzW2Zp
cnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxv
YXQgcHJldk9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0
OworICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleF0ub2Zmc2V0OworCisgICAgICAgICAgICAgICAgZmxvYXQgaW50ZXJTdG9wUHJv
cG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcg
cHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgor
ICAgICAgICAgICAgICAgIENvbG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVy
b09yR3JlYXRlckluZGV4IC0gMV0uY29sb3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4
XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7CisKKyAgICAgICAgICAgICAgICAvLyBDbGFt
cCB0aGUgcG9zaXRpb25zIHRvIDAgYW5kIHNldCB0aGUgY29sb3IuCisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIHN0b3BzW2ldLmNvbG9yID0gYmxlbmRlZENvbG9yOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQWxsIHN0b3BzIGFyZSBiZWxv
dyAwOyBqdXN0IGNsYW1wIHRoZW0uCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsgKytpKQorICAgICAgICAgICAgICAgICAgICBz
dG9wc1tpXS5vZmZzZXQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgICAgICBzdG9wLm9mZnNldCAvPSBzY2Fs
ZTsKKworICAgICAgICBkYXRhLnN0YXJ0UmFkaXVzICo9IHNjYWxlOworICAgICAgICBkYXRhLmVu
ZFJhZGl1cyAqPSBzY2FsZTsKKyAgICB9CisKKyAgICBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0
YTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEdyYWRpZW50QWRhcHRvcj4KK0dyYWRpZW50OjpDb2xv
clN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRv
ciYgZ3JhZGllbnQsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpCiB7CiAgICAgaWYgKG1fZ3JhZGllbnRUeXBl
ID09IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NE
ZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKICAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQoKTsK
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykg
ewotICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3Bz
W2ldOworICAgICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwogCisgICAgICAg
IGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgICAgIGZsb2F0IG9mZnNldDsK
ICAgICAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24tPmlzUGVyY2VudGFnZSgpKQogICAgICAg
ICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKLSAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3Rv
cChvZmZzZXQsIHN0b3AubV9yZXNvbHZlZENvbG9yKTsKKyAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoeyBvZmZzZXQsIHN0b3AubV9yZXNvbHZlZENvbG9yIH0pOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gVGhlIGJhY2sgZW5kIGFscmVhZHkgc29ydGVkIHRoZSBzdG9wcy4KLSAg
ICAgICAgZ3JhZGllbnQuc2V0U3RvcHNTb3J0ZWQodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBzaXplX3QgbnVtU3RvcHMgPSBtX3N0
b3BzLnNpemUoKTsKLQogICAgIFZlY3RvcjxHcmFkaWVudFN0b3A+IHN0b3BzKG51bVN0b3BzKTsK
IAotICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gMDsKLSAgICBib29sIGNvbXB1dGVkR3JhZGll
bnRMZW5ndGggPSBmYWxzZTsKKyAgICBhdXRvIGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC5zdGFy
dFBvaW50KCk7CisgICAgYXV0byBncmFkaWVudEVuZCA9IGdyYWRpZW50LmVuZFBvaW50KCk7CiAK
LSAgICBGbG9hdFBvaW50IGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC5wMCgpOwotICAgIEZsb2F0
UG9pbnQgZ3JhZGllbnRFbmQ7Ci0gICAgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotICAg
ICAgICBncmFkaWVudEVuZCA9IGdyYWRpZW50LnAxKCk7Ci0gICAgZWxzZSBpZiAoaXNSYWRpYWxH
cmFkaWVudFZhbHVlKCkpCi0gICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEZs
b2F0U2l6ZShncmFkaWVudC5lbmRSYWRpdXMoKSwgMCk7CisgICAgRmxvYXRTaXplIGdyYWRpZW50
U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQpOworICAgIGZsb2F0IGdyYWRpZW50TGVu
Z3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xv
clN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICBhdXRvJiBzdG9wID0gbV9zdG9wc1tp
XTsKIAogICAgICAgICBzdG9wc1tpXS5pc01pZHBvaW50ID0gc3RvcC5pc01pZHBvaW50OwogICAg
ICAgICBzdG9wc1tpXS5jb2xvciA9IHN0b3AubV9yZXNvbHZlZENvbG9yOwogCiAgICAgICAgIGlm
IChzdG9wLm1fcG9zaXRpb24pIHsKLSAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiBwb3NpdGlvblZhbHVlID0gKnN0b3AubV9wb3NpdGlvbjsKKyAgICAgICAgICAgIGF1dG8mIHBv
c2l0aW9uVmFsdWUgPSAqc3RvcC5tX3Bvc2l0aW9uOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9u
VmFsdWUuaXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0g
cG9zaXRpb25WYWx1ZS5mbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSkgLyAxMDA7CiAgICAgICAgICAgICBlbHNlIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkg
fHwgcG9zaXRpb25WYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIHx8IHBvc2l0aW9u
VmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghY29tcHV0ZWRHcmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBG
bG9hdFNpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyYWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZsb2F0IGxlbmd0aDsK
ICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25WYWx1ZS5pc0xlbmd0aCgpKQogICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPSBwb3NpdGlvblZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNv
bnZlcnNpb25EYXRhKTsKQEAgLTM0MiwyNiArNDM0LDE0IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1
ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAgICBpZiAobV9yZXBlYXRpbmcgJiYgbnVtU3RvcHMgPiAx
KSB7CiAgICAgICAgIC8vIElmIHRoZSBkaWZmZXJlbmNlIGluIHRoZSBwb3NpdGlvbnMgb2YgdGhl
IGZpcnN0IGFuZCBsYXN0IGNvbG9yLXN0b3BzIGlzIDAsCiAgICAgICAgIC8vIHRoZSBncmFkaWVu
dCBkZWZpbmVzIGEgc29saWQtY29sb3IgaW1hZ2Ugd2l0aCB0aGUgY29sb3Igb2YgdGhlIGxhc3Qg
Y29sb3Itc3RvcCBpbiB0aGUgcnVsZS4KLSAgICAgICAgZmxvYXQgZ3JhZGllbnRSYW5nZSA9IHN0
b3BzW251bVN0b3BzIC0gMV0ub2Zmc2V0IC0gc3RvcHNbMF0ub2Zmc2V0OworICAgICAgICBmbG9h
dCBncmFkaWVudFJhbmdlID0gc3RvcHMubGFzdCgpLm9mZnNldCAtIHN0b3BzLmZpcnN0KCkub2Zm
c2V0OwogICAgICAgICBpZiAoIWdyYWRpZW50UmFuZ2UpIHsKICAgICAgICAgICAgIHN0b3BzLmZp
cnN0KCkub2Zmc2V0ID0gMDsKICAgICAgICAgICAgIHN0b3BzLmZpcnN0KCkuY29sb3IgPSBzdG9w
cy5sYXN0KCkuY29sb3I7CiAgICAgICAgICAgICBzdG9wcy5zaHJpbmsoMSk7CiAgICAgICAgICAg
ICBudW1TdG9wcyA9IDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmbG9hdCBtYXhF
eHRlbnQgPSAxOwotCi0gICAgICAgICAgICAvLyBSYWRpYWwgZ3JhZGllbnRzIG1heSBuZWVkIHRv
IGV4dGVuZCBmdXJ0aGVyIHRoYW4gdGhlIGVuZHBvaW50cywgYmVjYXVzZSB0aGV5IGhhdmUKLSAg
ICAgICAgICAgIC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KLSAg
ICAgICAgICAgIGlmIChpc1JhZGlhbEdyYWRpZW50VmFsdWUoKSkgewotICAgICAgICAgICAgICAg
IGlmICghY29tcHV0ZWRHcmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9h
dFNpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGdyYWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3Ro
KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1heExlbmd0aEZv
clJlcGVhdCA+IGdyYWRpZW50TGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBtYXhFeHRlbnQg
PSBncmFkaWVudExlbmd0aCA+IDAgPyBtYXhMZW5ndGhGb3JSZXBlYXQgLyBncmFkaWVudExlbmd0
aCA6IDA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmbG9hdCBtYXhFeHRlbnQgPSBncmFk
aWVudC5tYXhFeHRlbnQobWF4TGVuZ3RoRm9yUmVwZWF0LCBncmFkaWVudExlbmd0aCk7CiAKICAg
ICAgICAgICAgIHNpemVfdCBvcmlnaW5hbE51bVN0b3BzID0gbnVtU3RvcHM7CiAgICAgICAgICAg
ICBzaXplX3Qgb3JpZ2luYWxGaXJzdFN0b3BJbmRleCA9IDA7CkBAIC00MDcsNzYgKzQ4NywxNiBA
QCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBudW1TdG9wcyA9IHN0b3BzLnNpemUoKTsKLQogICAgIC8vIElmIHRoZSBncmFk
aWVudCBnb2VzIG91dHNpZGUgdGhlIDAtMSByYW5nZSwgbm9ybWFsaXplIGl0IGJ5IG1vdmluZyB0
aGUgZW5kcG9pbnRzLCBhbmQgYWRqdXN0aW5nIHRoZSBzdG9wcy4KLSAgICBpZiAobnVtU3RvcHMg
PiAxICYmIChzdG9wc1swXS5vZmZzZXQgPCAwIHx8IHN0b3BzW251bVN0b3BzIC0gMV0ub2Zmc2V0
ID4gMSkpIHsKLSAgICAgICAgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IHN0b3BzWzBdLm9mZnNldDsKLSAgICAgICAgICAgIGZs
b2F0IGxhc3RPZmZzZXQgPSBzdG9wc1tudW1TdG9wcyAtIDFdLm9mZnNldDsKLSAgICAgICAgICAg
IGlmIChmaXJzdE9mZnNldCAhPSBsYXN0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
c2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmlyc3RPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHN0
b3BzW2ldLm9mZnNldCA9IChzdG9wc1tpXS5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsK
LQotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDAgPSBncmFkaWVudC5wMCgpOwotICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcDEgPSBncmFkaWVudC5wMSgpOwotICAgICAgICAgICAgICAg
IGdyYWRpZW50LnNldFAwKEZsb2F0UG9pbnQocDAueCgpICsgZmlyc3RPZmZzZXQgKiAocDEueCgp
IC0gcDAueCgpKSwgcDAueSgpICsgZmlyc3RPZmZzZXQgKiAocDEueSgpIC0gcDAueSgpKSkpOwot
ICAgICAgICAgICAgICAgIGdyYWRpZW50LnNldFAxKEZsb2F0UG9pbnQocDEueCgpICsgKGxhc3RP
ZmZzZXQgLSAxKSAqIChwMS54KCkgLSBwMC54KCkpLCBwMS55KCkgKyAobGFzdE9mZnNldCAtIDEp
ICogKHAxLnkoKSAtIHAwLnkoKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVGhlcmUncyBhIHNpbmdsZSBwb3NpdGlvbiB0aGF0IGlzIG91dHNpZGUgdGhlIHNj
YWxlLCBjbGFtcCB0aGUgcG9zaXRpb25zIHRvIDEuCi0gICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKQotICAgICAgICAgICAgICAgICAgICBzdG9wc1tp
XS5vZmZzZXQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzUmFkaWFs
R3JhZGllbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRo
ZSBwb2ludHMgPCAwLCB3ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0
byB0aGUgbGFyZ2VzdCBwb2ludC4KLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsK
LSAgICAgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wc1tudW1TdG9wcyAtIDFdLm9mZnNl
dDsKLSAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0Owot
Ci0gICAgICAgICAgICAvLyBSZXNldCBwb2ludHMgYmVsb3cgMCB0byB0aGUgZmlyc3QgdmlzaWJs
ZSBjb2xvci4KLSAgICAgICAgICAgIHNpemVfdCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IG51
bVN0b3BzOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0b3BzW2ldLm9mZnNldCA+PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gaTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXhdLm9mZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
cHJldk9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0Owot
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JH
cmVhdGVySW5kZXhdLm9mZnNldDsKLQotICAgICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0
b3BQcm9wb3J0aW9uID0gLXByZXZPZmZzZXQgLyAobmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOwot
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVu
dHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxp
Y2F0aW9uLgotICAgICAgICAgICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3IgPSBibGVuZChz
dG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tmaXJzdFplcm9P
ckdyZWF0ZXJJbmRleF0uY29sb3IsIGludGVyU3RvcFByb3BvcnRpb24pOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIENsYW1wIHRoZSBwb3NpdGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4K
LSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZz
ZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHNbaV0uY29sb3IgPSBibGVuZGVk
Q29sb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBBbGwgc3RvcHMgYXJlIGJlbG93IDA7IGp1c3QgY2xhbXAg
dGhlbS4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleDsgKytpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHNbaV0u
b2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKLSAgICAgICAgICAgICAg
ICBzdG9wc1tpXS5vZmZzZXQgLz0gc2NhbGU7Ci0KLSAgICAgICAgICAgIGdyYWRpZW50LnNldFN0
YXJ0UmFkaXVzKGdyYWRpZW50LnN0YXJ0UmFkaXVzKCkgKiBzY2FsZSk7Ci0gICAgICAgICAgICBn
cmFkaWVudC5zZXRFbmRSYWRpdXMoZ3JhZGllbnQuZW5kUmFkaXVzKCkgKiBzY2FsZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RvcHM7IGkr
KykKLSAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKHN0b3BzW2ldLm9mZnNldCwgc3RvcHNb
aV0uY29sb3IpOworICAgIGlmIChzdG9wcy5zaXplKCkgPiAxICYmIChzdG9wcy5maXJzdCgpLm9m
ZnNldCA8IDAgfHwgc3RvcHMubGFzdCgpLm9mZnNldCA+IDEpKQorICAgICAgICBncmFkaWVudC5u
b3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZShzdG9wcyk7CisgICAgCisgICAg
R3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc3RvcHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykK
KyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9y
IH0pOwogCi0gICAgZ3JhZGllbnQuc2V0U3RvcHNTb3J0ZWQodHJ1ZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogc3RhdGljIGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1ByaW1p
dGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYm9vbCBpc0hvcml6b250YWwpCkBAIC02
MjQsNyArNjQ0LDcgQEAgU3RyaW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNTUwog
ICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9w
ID0gbV9zdG9wc1tpXTsKKyAgICAgICAgICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOwogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChzdG9wLm1f
cG9zaXRpb24pIHsKQEAgLTgwMSwxNCArODIxLDE0IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZTo6Y3IKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0KICAgICB9CiAKLSAgICBSZWY8R3JhZGllbnQ+IGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7Ci0KLSAg
ICAvLyBOb3cgYWRkIHRoZSBzdG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudCwgY29udmVyc2lv
bkRhdGEsIDEpOworICAgIEdyYWRpZW50OjpMaW5lYXJEYXRhIGRhdGEgeyBmaXJzdFBvaW50LCBz
ZWNvbmRQb2ludCB9OworICAgIExpbmVhckdyYWRpZW50QWRhcHRvciBhZGFwdG9yIHsgZGF0YSB9
OworICAgIGF1dG8gc3RvcHMgPSBjb21wdXRlU3RvcHMoYWRhcHRvciwgY29udmVyc2lvbkRhdGEs
IDEpOwogCisgICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRh
KSk7CisgICAgZ3JhZGllbnQtPnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92ZShzdG9wcykpOwog
ICAgIHJldHVybiBncmFkaWVudDsKIH0KIApAQCAtMTIxMywxOCArMTIzMywxOSBAQCBSZWY8R3Jh
ZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBm
aXJzdFJhZGl1cywgc2Vjb25kUG9pbnQsIHNlY29uZFJhZGl1cywgYXNwZWN0UmF0aW8pOwotCi0g
ICAgLy8gYWRkU3RvcHMoKSBvbmx5IHVzZXMgbWF4RXh0ZW50IGZvciByZXBlYXRpbmcgZ3JhZGll
bnRzLgorICAgIC8vIGNvbXB1dGVTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVh
dGluZyBncmFkaWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKICAgICBpZiAobV9yZXBl
YXRpbmcpIHsKICAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7CiAgICAgICAgIG1heEV4dGVudCA9
IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihzZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAg
ICB9CiAKLSAgICAvLyBOb3cgYWRkIHRoZSBzdG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudCwg
Y29udmVyc2lvbkRhdGEsIG1heEV4dGVudCk7CisgICAgR3JhZGllbnQ6OlJhZGlhbERhdGEgZGF0
YSB7IGZpcnN0UG9pbnQsIHNlY29uZFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25kUmFkaXVzLCBh
c3BlY3RSYXRpbyB9OworICAgIFJhZGlhbEdyYWRpZW50QWRhcHRvciBhZGFwdG9yIHsgZGF0YSB9
OworICAgIGF1dG8gc3RvcHMgPSBjb21wdXRlU3RvcHMoYWRhcHRvciwgY29udmVyc2lvbkRhdGEs
IG1heEV4dGVudCk7CiAKKyAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKTsKKyAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3ZlKHN0
b3BzKSk7CiAgICAgcmV0dXJuIGdyYWRpZW50OwogfQogCkBAIC0xMzI2LDcgKzEzNDcsNyBAQCBT
dHJpbmcgQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUCiBSZWY8R3JhZGllbnQ+IENT
U0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYsIGNvbnN0
IEZsb2F0U2l6ZSYpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICByZXR1cm4gR3Jh
ZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50IHsgfSwgRmxvYXRQb2ludCB7IH0pOworICAgIHJldHVy
biBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgfSk7CiB9CiAKIGJvb2wg
Q1NTQ29uaWNHcmFkaWVudFZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ29uaWNHcmFkaWVudFZhbHVl
JiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAko
cmV2aXNpb24gMjI0NzM1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBACiAKICNpbmNsdWRlICJDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNs
dWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBTdHls
ZVJlc29sdmVyOwogCiBlbnVtIENTU0dyYWRpZW50VHlwZSB7CkBAIC0xMDksNyArMTA5LDggQEAg
cHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50Jiwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIGZsb2F0IG1heExlbmd0aEZvclJlcGVh
dCA9IDApOworICAgIHRlbXBsYXRlPGNsYXNzIEdyYWRpZW50QWRhcHRvcj4KKyAgICBHcmFkaWVu
dDo6Q29sb3JTdG9wVmVjdG9yIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0b3ImLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KTsKIAog
ICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxv
YXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVW
YWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBGbG9hdFNpemUm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5j
cHAJKHJldmlzaW9uIDIyNDczNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEyIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIENhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBGbG9h
dFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpCi0gICAgOiBtX2dyYWRpZW50KEdyYWRp
ZW50OjpjcmVhdGUocDAsIHAxKSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShH
cmFkaWVudDo6TGluZWFyRGF0YSB7IHAwLCBwMSB9KSkKIHsKIH0KIAogQ2FudmFzR3JhZGllbnQ6
OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxv
YXRQb2ludCYgcDEsIGZsb2F0IHIxKQotICAgIDogbV9ncmFkaWVudChHcmFkaWVudDo6Y3JlYXRl
KHAwLCByMCwgcDEsIHIxKSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShHcmFk
aWVudDo6UmFkaWFsRGF0YSB7IHAwLCBwMSwgcjAsIHIxLCAxIH0pKQogewogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkocmV2aXNpb24g
MjI0NzM1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5MSwyMyArNTkxLDMwIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWMKIAogUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3RvclZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3Jh
ZGllbnQoY29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewotICAgIGNvbnN0
IEdyYWRpZW50JiBncmFkaWVudCA9IGNhbnZhc0dyYWRpZW50LmdyYWRpZW50KCk7Ci0gICAgYm9v
bCBpc1JhZGlhbCA9IGdyYWRpZW50LmlzUmFkaWFsKCk7CisgICAgY29uc3QgYXV0byYgZ3JhZGll
bnQgPSBjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpOwogCi0gICAgU3RyaW5nIHR5cGUgPSBpc1Jh
ZGlhbCA/IEFTQ0lJTGl0ZXJhbCgicmFkaWFsLWdyYWRpZW50IikgOiBBU0NJSUxpdGVyYWwoImxp
bmVhci1ncmFkaWVudCIpOworICAgIFN0cmluZyB0eXBlID0gZ3JhZGllbnQudHlwZSgpID09IEdy
YWRpZW50OjpUeXBlOjpSYWRpYWwgPyBBU0NJSUxpdGVyYWwoInJhZGlhbC1ncmFkaWVudCIpIDog
QVNDSUlMaXRlcmFsKCJsaW5lYXItZ3JhZGllbnQiKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxmbG9hdD4+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxmbG9hdD46OmNyZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGll
bnQucDAoKS54KCkpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDAoKS55KCkp
OwotICAgIGlmIChpc1JhZGlhbCkKLSAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShncmFkaWVu
dC5zdGFydFJhZGl1cygpKTsKLSAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGdyYWRpZW50LnAxKCku
eCgpKTsKLSAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGdyYWRpZW50LnAxKCkueSgpKTsKLSAgICBp
ZiAoaXNSYWRpYWwpCi0gICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQuZW5kUmFk
aXVzKCkpOworICAgIFdURjo6c3dpdGNoT24oZ3JhZGllbnQuZGF0YSgpLAorICAgICAgICBbJnBh
cmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAg
ICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOworICAgICAgICAgICAgcGFy
YW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLnBvaW50MS55KCkpOworICAgICAgICB9LAorICAgICAgICBbJnBhcmFtZXRlcnNd
IChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1l
dGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+
YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRl
bShkYXRhLnN0YXJ0UmFkaXVzKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0
YS5wb2ludDEueCgpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2lu
dDEueSgpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5lbmRSYWRpdXMp
OworICAgICAgICB9CisgICAgKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3JWYWx1ZT4+IHN0b3BzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
SW5zcGVjdG9yVmFsdWU+OjpjcmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEdyYWRpZW50OjpDb2xv
clN0b3AmIGNvbG9yU3RvcCA6IGdyYWRpZW50LnN0b3BzKCkpIHsKKyAgICBmb3IgKGF1dG8mIGNv
bG9yU3RvcCA6IGdyYWRpZW50LnN0b3BzKCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPj4gc3RvcCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3RvclZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgICAgIHN0b3AtPmFkZEl0
ZW0oY29sb3JTdG9wLm9mZnNldCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oaW5kZXhGb3JEYXRh
KGNvbG9yU3RvcC5jb2xvci5jc3NUZXh0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDczNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMzAgKzM2LDE0IEBAIHVzaW5nIFdURjo6cGFpckludEhhc2g7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25z
dCBGbG9hdFBvaW50JiBwMSkKLSAgICA6IG1fcmFkaWFsKGZhbHNlKQotICAgICwgbV9wMChwMCkK
LSAgICAsIG1fcDEocDEpCi0gICAgLCBtX3IwKDApCi0gICAgLCBtX3IxKDApCi0gICAgLCBtX2Fz
cGVjdFJhdGlvKDEpCi0gICAgLCBtX3N0b3BzU29ydGVkKGZhbHNlKQotICAgICwgbV9zcHJlYWRN
ZXRob2QoU3ByZWFkTWV0aG9kUGFkKQotICAgICwgbV9jYWNoZWRIYXNoKDApCitHcmFkaWVudDo6
R3JhZGllbnQoTGluZWFyRGF0YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkK
IHsKICAgICBwbGF0Zm9ybUluaXQoKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBm
bG9hdCBhc3BlY3RSYXRpbykKLSAgICA6IG1fcmFkaWFsKHRydWUpCi0gICAgLCBtX3AwKHAwKQot
ICAgICwgbV9wMShwMSkKLSAgICAsIG1fcjAocjApCi0gICAgLCBtX3IxKHIxKQotICAgICwgbV9h
c3BlY3RSYXRpbyhhc3BlY3RSYXRpbykKLSAgICAsIG1fc3RvcHNTb3J0ZWQoZmFsc2UpCi0gICAg
LCBtX3NwcmVhZE1ldGhvZChTcHJlYWRNZXRob2RQYWQpCi0gICAgLCBtX2NhY2hlZEhhc2goMCkK
K0dyYWRpZW50OjpHcmFkaWVudChSYWRpYWxEYXRhJiYgZGF0YSkKKyAgICA6IG1fZGF0YShXVEZN
b3ZlKGRhdGEpKQogewogICAgIHBsYXRmb3JtSW5pdCgpOwogfQpAQCAtNjksMzkgKzUzLDYxIEBA
IEdyYWRpZW50Ojp+R3JhZGllbnQoKQogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi12b2lk
IEdyYWRpZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYgc2l6
ZSwgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcpCithdXRvIEdy
YWRpZW50Ojp0eXBlKCkgY29uc3QgLT4gVHlwZQogewotICAgIGlmIChtX3JhZGlhbCkKLSAgICAg
ICAgcmV0dXJuOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgW10g
KGNvbnN0IExpbmVhckRhdGEmKSB7CisgICAgICAgICAgICByZXR1cm4gVHlwZTo6TGluZWFyOwor
ICAgICAgICB9LAorICAgICAgICBbXSAoY29uc3QgUmFkaWFsRGF0YSYpIHsKKyAgICAgICAgICAg
IHJldHVybiBUeXBlOjpSYWRpYWw7CisgICAgICAgIH0KKyAgICApOworfQogCit2b2lkIEdyYWRp
ZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYgc2l6ZSwgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcpCit7CiAgICAgaWYgKHNy
Y1JlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXNwYWNpbmcuaXNa
ZXJvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3AwLngoKSA9PSBtX3AxLngoKSkg
ewotICAgICAgICBzaXplLnNldFdpZHRoKDEpOwotICAgICAgICBzcmNSZWN0LnNldFdpZHRoKDEp
OwotICAgICAgICBzcmNSZWN0LnNldFgoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKG1fcDAueSgpICE9IG1fcDEueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplLnNl
dEhlaWdodCgxKTsKLSAgICBzcmNSZWN0LnNldEhlaWdodCgxKTsKLSAgICBzcmNSZWN0LnNldFko
MCk7CisgICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFy
RGF0YSYgZGF0YSkgeworICAgICAgICAgICAgaWYgKGRhdGEucG9pbnQwLngoKSA9PSBkYXRhLnBv
aW50MS54KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplLnNldFdpZHRoKDEpOworICAgICAgICAg
ICAgICAgIHNyY1JlY3Quc2V0V2lkdGgoMSk7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5zZXRY
KDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkYXRhLnBvaW50MC55KCkgIT0gZGF0YS5wb2ludDEueSgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQoMSk7CisgICAgICAgICAgICBz
cmNSZWN0LnNldEhlaWdodCgxKTsKKyAgICAgICAgICAgIHNyY1JlY3Quc2V0WSgwKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgW10gKGNvbnN0IFJhZGlhbERhdGEmKSB7CisgICAgICAgIH0KKyAgICAp
OworfQorCitib29sIEdyYWRpZW50Ojppc1plcm9TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRh
KSB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5wb2ludDAueCgpID09IGRhdGEucG9pbnQxLngo
KSAmJiBkYXRhLnBvaW50MC55KCkgPT0gZGF0YS5wb2ludDEueSgpOworICAgICAgICB9LAorICAg
ICAgICBbXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRh
dGEucG9pbnQwLngoKSA9PSBkYXRhLnBvaW50MS54KCkgJiYgZGF0YS5wb2ludDAueSgpID09IGRh
dGEucG9pbnQxLnkoKSAmJiBkYXRhLnN0YXJ0UmFkaXVzID09IGRhdGEuZW5kUmFkaXVzOworICAg
ICAgICB9CisgICAgKTsKIH0KIAogdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIG1fc3RvcHMuYXBwZW5kKENvbG9yU3Rv
cChvZmZzZXQsIGNvbG9yKSk7Ci0KLSAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7Ci0gICAgcGxh
dGZvcm1EZXN0cm95KCk7Ci0KLSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIGFkZENvbG9yU3Rv
cCh7IG9mZnNldCwgY29sb3IgfSk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChj
b25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQpAQCAtMTA5LDggKzExNSwxOCBAQCB2b2lk
IEdyYWRpZW50OjphZGRDb2xvclN0b3AoY29uc3QgR3JhZGllCiAgICAgbV9zdG9wcy5hcHBlbmQo
c3RvcCk7CiAKICAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7CisKICAgICBwbGF0Zm9ybURlc3Ry
b3koKTsKKyAgICBpbnZhbGlkYXRlSGFzaCgpOworfQorCit2b2lkIEdyYWRpZW50OjpzZXRTb3J0
ZWRDb2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYmIHN0b3BzKQoreworICAgIG1fc3RvcHMgPSBX
VEZNb3ZlKHN0b3BzKTsKIAorICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOworCisgICAgcGxhdGZv
cm1EZXN0cm95KCk7CiAgICAgaW52YWxpZGF0ZUhhc2goKTsKIH0KIApAQCAtMTMwLDcgKzE0Niw2
IEBAIHZvaWQgR3JhZGllbnQ6OnNvcnRTdG9wc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCks
IGNvbXBhcmVTdG9wcyk7Ci0KICAgICBpbnZhbGlkYXRlSGFzaCgpOwogfQogCkBAIC0xNzMsMTQg
KzE4OCwxNCBAQCB1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBtX2NhY2hlZEhhc2g7CiAKICAgICBzdHJ1Y3QgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAgICAgICBGbG9hdFBvaW50IHAwOwotICAg
ICAgICBGbG9hdFBvaW50IHAxOwotICAgICAgICBmbG9hdCByMDsKLSAgICAgICAgZmxvYXQgcjE7
CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQxOworICAgICAgICBmbG9hdCBzdGFydFJhZGl1czsKKyAgICAgICAg
ZmxvYXQgZW5kUmFkaXVzOwogICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsKICAgICAgICAgR3Jh
ZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kOwotICAgICAgICBib29sIHJhZGlhbDsKKyAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICB9
IHBhcmFtZXRlcnM7CiAKICAgICAvLyBTdHJpbmdIYXNoZXIgcmVxdWlyZXMgdGhhdCB0aGUgbWVt
b3J5IGl0IGhhc2hlcyBiZSBhIG11bHRpcGxlIG9mIHR3byBpbiBzaXplLgpAQCAtMTkwLDE0ICsy
MDUsMjcgQEAgdW5zaWduZWQgR3JhZGllbnQ6Omhhc2goKSBjb25zdAogICAgIC8vIEVuc3VyZSB0
aGF0IGFueSBwYWRkaW5nIGluIHRoZSBzdHJ1Y3QgaXMgemVyby1maWxsZWQsIHNvIGl0IHdpbGwg
bm90IGFmZmVjdCB0aGUgaGFzaCB2YWx1ZS4KICAgICBtZW1zZXQoJnBhcmFtZXRlcnMsIDAsIHNp
emVvZihwYXJhbWV0ZXJzKSk7CiAgICAgCi0gICAgcGFyYW1ldGVycy5ncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24gPSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBwYXJhbWV0
ZXJzLnAwID0gbV9wMDsKLSAgICBwYXJhbWV0ZXJzLnAxID0gbV9wMTsKLSAgICBwYXJhbWV0ZXJz
LnIwID0gbV9yMDsKLSAgICBwYXJhbWV0ZXJzLnIxID0gbV9yMTsKLSAgICBwYXJhbWV0ZXJzLmFz
cGVjdFJhdGlvID0gbV9hc3BlY3RSYXRpbzsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAg
ICAgICAgWyZwYXJhbWV0ZXJzXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAg
ICAgcGFyYW1ldGVycy5wb2ludDAgPSBkYXRhLnBvaW50MDsKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMucG9pbnQxID0gZGF0YS5wb2ludDE7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFk
aXVzID0gMDsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSAwOworICAgICAgICAgICAgcGFyYW1ldGVycy50
eXBlID0gVHlwZTo6TGluZWFyOworICAgICAgICB9LAorICAgICAgICBbJnBhcmFtZXRlcnNdIChj
b25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9
IGRhdGEucG9pbnQwOworICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50
MTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSBkYXRhLnN0YXJ0UmFkaXVz
OworICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSBkYXRhLmVuZFJhZGl1czsKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSBkYXRhLmFzcGVjdFJhdGlvOworICAg
ICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6UmFkaWFsOworICAgICAgICB9CisgICAg
KTsKKwogICAgIHBhcmFtZXRlcnMuc3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0gICAg
cGFyYW1ldGVycy5yYWRpYWwgPSBtX3JhZGlhbDsKKyAgICBwYXJhbWV0ZXJzLmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbiA9IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogCiAgICAg
dW5zaWduZWQgcGFyYW1ldGVyc0hhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoJnBhcmFt
ZXRlcnMsIHNpemVvZihwYXJhbWV0ZXJzKSk7CiAgICAgdW5zaWduZWQgc3RvcEhhc2ggPSBTdHJp
bmdIYXNoZXI6Omhhc2hNZW1vcnkobV9zdG9wcy5kYXRhKCksIG1fc3RvcHMuc2l6ZSgpICogc2l6
ZW9mKENvbG9yU3RvcCkpOwpAQCAtMjA3LDQgKzIzNSw0IEBAIHVuc2lnbmVkIEdyYWRpZW50Ojpo
YXNoKCkgY29uc3QKICAgICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCi19IC8vbmFtZXNwYWNl
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJ
KHJldmlzaW9uIDIyNDczNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIzICsyNSwyMCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBHcmFkaWVudF9oCi0jZGVmaW5lIEdyYWRpZW50X2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBVU0UoQ0cpCi0KIHR5cGVkZWYgc3RydWN0IENH
Q29udGV4dCogQ0dDb250ZXh0UmVmOwotCiB0eXBlZGVmIHN0cnVjdCBDR0dyYWRpZW50KiBDR0dy
YWRpZW50UmVmOwogdHlwZWRlZiBDR0dyYWRpZW50UmVmIFBsYXRmb3JtR3JhZGllbnQ7Ci0KICNl
bGlmIFVTRShESVJFQ1QyRCkKIGludGVyZmFjZSBJRDJEMUJydXNoOwogaW50ZXJmYWNlIElEMkQx
UmVuZGVyVGFyZ2V0OwpAQCAtNTUsMTUyICs1MiwxMTYgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bUdyYWRpZW50OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDb2xvcjsKLSAg
ICBjbGFzcyBGbG9hdFJlY3Q7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotCi0gICAgY2xh
c3MgR3JhZGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFkaWVudD4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFJlZjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAw
LCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0Owor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEdyYWRpZW50PiB7CitwdWJsaWM6CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBB
IGNvbG9yIHN0b3AgbmVlZHMgYSBub3Rpb24gb2YgY29sb3Igc3BhY2UuCisgICAgc3RydWN0IENv
bG9yU3RvcCB7CisgICAgICAgIGZsb2F0IG9mZnNldCB7IDAgfTsKKyAgICAgICAgQ29sb3IgY29s
b3I7CisKKyAgICAgICAgQ29sb3JTdG9wKCkgPSBkZWZhdWx0OworICAgICAgICBDb2xvclN0b3Ao
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgICAgICA6IG9mZnNldChv
ZmZzZXQpCisgICAgICAgICAgICAsIGNvbG9yKGNvbG9yKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChwMCwgcDEpKTsKICAgICAgICAgfQotICAg
ICAgICBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZs
b2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlv
ID0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGll
bnQocDAsIHIwLCBwMSwgcjEsIGFzcGVjdFJhdGlvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgfkdyYWRpZW50KCk7Ci0KLSAgICAgICAgc3RydWN0IENvbG9yU3RvcDsKLSAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBD
b2xvciYpOworICAgIH07CiAKLSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIHVz
aW5nIENvbG9yU3RvcFZlY3RvciA9IFZlY3RvcjxDb2xvclN0b3AsIDI+OwogCi0gICAgICAgIGJv
b2wgaXNSYWRpYWwoKSBjb25zdCB7IHJldHVybiBtX3JhZGlhbDsgfQotICAgICAgICBib29sIGlz
WmVyb1NpemUoKSBjb25zdCB7IHJldHVybiBtX3AwLngoKSA9PSBtX3AxLngoKSAmJiBtX3AwLnko
KSA9PSBtX3AxLnkoKSAmJiAoIW1fcmFkaWFsIHx8IG1fcjAgPT0gbV9yMSk7IH0KKyAgICBzdHJ1
Y3QgTGluZWFyRGF0YSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOworICAgICAgICBGbG9h
dFBvaW50IHBvaW50MTsKKyAgICB9OwogCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAwKCkg
Y29uc3QgeyByZXR1cm4gbV9wMDsgfQotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSgpIGNv
bnN0IHsgcmV0dXJuIG1fcDE7IH0KKyAgICBzdHJ1Y3QgUmFkaWFsRGF0YSB7CisgICAgICAgIEZs
b2F0UG9pbnQgcG9pbnQwOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgZmxv
YXQgc3RhcnRSYWRpdXM7CisgICAgICAgIGZsb2F0IGVuZFJhZGl1czsKKyAgICAgICAgZmxvYXQg
YXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4K
KyAgICB9OwogCi0gICAgICAgIHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYgcCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1fcDAgPT0gcCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fcDAgPSBwOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpbnZhbGlkYXRlSGFzaCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2
b2lkIHNldFAxKGNvbnN0IEZsb2F0UG9pbnQmIHApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX3AxID09IHApCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX3AxID0gcDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW52YWxpZGF0ZUhh
c2goKTsKLSAgICAgICAgfQorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIExpbmVhciwK
KyAgICAgICAgUmFkaWFsCisgICAgfTsKIAotICAgICAgICBmbG9hdCBzdGFydFJhZGl1cygpIGNv
bnN0IHsgcmV0dXJuIG1fcjA7IH0KLSAgICAgICAgZmxvYXQgZW5kUmFkaXVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yMTsgfQorICAgIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShMaW5lYXJEYXRh
JiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdU
Rk1vdmUoZGF0YSkpKTsKKyAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdGFydFJhZGl1cyhmbG9h
dCByKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9yMCA9PSByKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoUmFkaWFsRGF0YSYm
IGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZN
b3ZlKGRhdGEpKSk7CisgICAgfQogCi0gICAgICAgICAgICBtX3IwID0gcjsKKyAgICBXRUJDT1JF
X0VYUE9SVCB+R3JhZGllbnQoKTsKIAotICAgICAgICAgICAgaW52YWxpZGF0ZUhhc2goKTsKLSAg
ICAgICAgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0RW5kUmFk
aXVzKGZsb2F0IHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3IxID09IHIpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKKyAgICBib29s
IGlzWmVyb1NpemUoKSBjb25zdDsKIAotICAgICAgICAgICAgbV9yMSA9IHI7CisgICAgY29uc3Qg
VmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRhPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQogCi0gICAgICAgICAgICBpbnZhbGlkYXRlSGFzaCgpOwotICAgICAgICB9CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQsIGNvbnN0IENvbG9yJik7Cisg
ICAgdm9pZCBzZXRTb3J0ZWRDb2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYmKTsKIAotICAgICAg
ICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fYXNwZWN0UmF0aW87IH0KKyAg
ICBjb25zdCBDb2xvclN0b3BWZWN0b3ImIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsg
fQogCi0jaWYgVVNFKFdJTkdESSkKLSAgICAgICAgY29uc3QgVmVjdG9yPENvbG9yU3RvcCwgMj4m
IGdldFN0b3BzKCkgY29uc3Q7Ci0jZWxzZQotICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRm
b3JtR3JhZGllbnQoKTsKLSNlbmRpZgorICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50
U3ByZWFkTWV0aG9kKTsKKyAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBj
b25zdCB7IHJldHVybiBtX3NwcmVhZE1ldGhvZDsgfQogCi0gICAgICAgIC8vIEZJWE1FOiBFeHRl
bmRlZENvbG9yIC0gQSBjb2xvciBzdG9wIG5lZWRzIGEgbm90aW9uIG9mIGNvbG9yIHNwYWNlLgot
ICAgICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCB7IDAg
fTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotCi0gICAgICAgICAgICBDb2xvclN0b3AoKSB7
IH0KLSAgICAgICAgICAgIENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKLSAgICAgICAgICAgICAgICA6IG9mZnNldChvZmZzZXQpCi0gICAgICAgICAgICAgICAgLCBj
b2xvcihjb2xvcikKLSAgICAgICAgICAgICAgICB7IH0KLSAgICAgICAgfTsKLQotICAgICAgICBj
b25zdCBWZWN0b3I8Q29sb3JTdG9wLCAyPiYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3Bz
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRTdG9wc1NvcnRlZChib29sIHMpIHsgbV9zdG9wc1NvcnRl
ZCA9IHM7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50
U3ByZWFkTWV0aG9kKTsKLSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9k
KCkgeyByZXR1cm4gbV9zcHJlYWRNZXRob2Q7IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKTsKLSAgICAgICAgLy8gUXQgYW5kIENHIHRyYW5zZm9ybSB0aGUgZ3JhZGllbnQgYXQg
ZHJhdyB0aW1lCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KCkgeyByZXR1cm4gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KKyAgICAvLyBDRyBu
ZWVkcyB0byB0cmFuc2Zvcm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KKyAgICB2b2lkIHNl
dEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24pOworICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJh
bnNmb3JtKCkgeyByZXR1cm4gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAotICAg
ICAgICB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAg
ICAgIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhGbG9hdFNpemUmLCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcpOworICAgIHZvaWQgZmlsbChHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNG
b3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nKTsKIAotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
aW52YWxpZGF0ZUhhc2goKSB7IG1fY2FjaGVkSGFzaCA9IDA7IH0KKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlSGFzaCgpIHsgbV9jYWNoZWRIYXNoID0gMDsg
fQogCiAjaWYgVVNFKENHKQotICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7Ci0gICAg
ICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgICAgIFBsYXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudElm
TmVjZXNzYXJ5KElEMkQxUmVuZGVyVGFyZ2V0Kik7CisgICAgUGxhdGZvcm1HcmFkaWVudCBjcmVh
dGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkoSUQyRDFSZW5kZXJUYXJnZXQqKTsKICNlbGlm
IFVTRShDQUlSTykKLSAgICAgICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRp
ZW50KGZsb2F0IGdsb2JhbEFscGhhKTsKKyAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRm
b3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgot
ICAgICAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29u
c3QgRmxvYXRQb2ludCYgcDEpOwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBw
MCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0
UmF0aW8pOwotCi0gICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gbnVs
bHB0cjsgfQotICAgICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworcHJpdmF0ZToKKyAgICBH
cmFkaWVudChMaW5lYXJEYXRhJiYpOworICAgIEdyYWRpZW50KFJhZGlhbERhdGEmJik7CisKKyAg
ICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICB2b2lkIHBsYXRmb3Jt
SW5pdCgpIHsgbV9ncmFkaWVudCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJv
eSgpOwogCi0gICAgICAgIHZvaWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNv
cnRTdG9wc0lmTmVjZXNzYXJ5KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHZvaWQg
Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCopOworICAgIHZvaWQgZ2VuZXJhdGVH
cmFkaWVudChJRDJEMVJlbmRlclRhcmdldCopOwogI2VuZGlmCiAKLSAgICAgICAgLy8gS2VlcCBh
bnkgcGFyYW1ldGVycyByZWxldmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRoIHRoZSBzdHJ1
Y3R1cmUgaW4gR3JhZGllbnQ6Omhhc2goKS4KLSAgICAgICAgYm9vbCBtX3JhZGlhbDsKLSAgICAg
ICAgRmxvYXRQb2ludCBtX3AwOwotICAgICAgICBGbG9hdFBvaW50IG1fcDE7Ci0gICAgICAgIGZs
b2F0IG1fcjA7Ci0gICAgICAgIGZsb2F0IG1fcjE7Ci0gICAgICAgIGZsb2F0IG1fYXNwZWN0UmF0
aW87IC8vIEZvciBlbGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KLSAgICAgICAg
bXV0YWJsZSBWZWN0b3I8Q29sb3JTdG9wLCAyPiBtX3N0b3BzOwotICAgICAgICBtdXRhYmxlIGJv
b2wgbV9zdG9wc1NvcnRlZDsKLSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRN
ZXRob2Q7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbjsKKyAgICBWYXJpYW50PExpbmVhckRhdGEsIFJhZGlhbERhdGE+IG1fZGF0YTsKIAotICAg
ICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaDsKKyAgICBtdXRhYmxlIENvbG9yU3Rv
cFZlY3RvciBtX3N0b3BzOworICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkIHsgZmFsc2Ug
fTsKKyAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7IFNwcmVhZE1ldGhv
ZFBhZCB9OworICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
bjsKIAotICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7Ci0gICAgfTsKKyAgICBt
dXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaCB7IDAgfTsKIAotfSAvL25hbWVzcGFjZQorICAg
IFBsYXRmb3JtR3JhZGllbnQgbV9ncmFkaWVudDsKK307CiAKLSNlbmRpZgorfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAyMjQ3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzAsNyArODcwLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgZ3JhZGllbnQuZmlsbCh0aGlzLCByZWN0KTsKKyAgICBncmFkaWVudC5m
aWxsKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lv
biAyMjQ3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDE0IEBAIHZvaWQgR3Jh
ZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OmNy
ZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgY2Fpcm9fcGF0
dGVybl90KiBncmFkaWVudDsKLSAgICBpZiAobV9yYWRpYWwpCi0gICAgICAgIGdyYWRpZW50ID0g
Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9yMCwgbV9w
MS54KCksIG1fcDEueSgpLCBtX3IxKTsKLSAgICBlbHNlCi0gICAgICAgIGdyYWRpZW50ID0gY2Fp
cm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54KCksIG1f
cDEueSgpKTsKKyAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RGOjpzd2l0Y2hPbiht
X2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0
dGVybl90KiB7CisgICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFy
KGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEu
cG9pbnQxLnkoKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYg
ZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0
dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRh
LnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRS
YWRpdXMpOworICAgICAgICB9CisgICAgKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6
IG1fc3RvcHMpIHsKICAgICAgICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRlZCgpKSB7CkBAIC03
NywxOCArODAsMTggQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZvcgog
ICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhZGllbnQ6OmZp
bGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAg
ICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gZ3JhZGllbnQgPSBhZG9wdFJlZihjcmVhdGVQbGF0
Zm9ybUdyYWRpZW50KDEuMCkpOwogCi0gICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQu
c2F2ZSgpOwogCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKTsKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7
CiAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ3JhZGllbnQuZ2V0KCkpOwogICAgIGNhaXJvX3Jl
Y3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwogICAgIGNhaXJvX2ZpbGwoY3IpOwogCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOworICAg
IGNvbnRleHQucmVzdG9yZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNw
cAkocmV2aXNpb24gMjI0NzM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhZGllbnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICBD
R0dyYWRpZW50UmVsZWFzZShtX2dyYWRpZW50KTsKLSAgICBtX2dyYWRpZW50ID0gMDsKKyAgICBt
X2dyYWRpZW50ID0gbnVsbHB0cjsKIH0KIAogQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZv
cm1HcmFkaWVudCgpCkBAIC05Miw0MyArOTIsNDUgQEAgQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6
cGxhdGZvcm1HcmFkaWVudAogICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRp
ZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGNvbnRleHQu
Y2xpcChyZWN0KTsKICAgICBwYWludChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFkaWVudDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFkaWVudDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIENHQ29udGV4dFJlZiBjdHggPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICBwYWludChjdHgpOworICAgIHBhaW50KGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYg
Y29udGV4dCkKK3ZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRl
eHQpCiB7CiAgICAgQ0dHcmFkaWVudERyYXdpbmdPcHRpb25zIGV4dGVuZE9wdGlvbnMgPSBrQ0dH
cmFkaWVudERyYXdzQmVmb3JlU3RhcnRMb2NhdGlvbiB8IGtDR0dyYWRpZW50RHJhd3NBZnRlckVu
ZExvY2F0aW9uOwotICAgIGlmICghbV9yYWRpYWwpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0xp
bmVhckdyYWRpZW50KGNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgbV9wMCwgbV9wMSwgZXh0
ZW5kT3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRTY2Fs
aW5nID0gYXNwZWN0UmF0aW8oKSAhPSAxOwotICAgIGlmIChuZWVkU2NhbGluZykgewotICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotICAgICAgICAvLyBTY2FsZSBmcm9tIHRo
ZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0
ZWQgZ3JhZGllbnRzLAotICAgICAgICAvLyBmb3Igd2hpY2ggbV9wMCA9PSBtX3AxLgotICAgICAg
ICBBU1NFUlQobV9wMCA9PSBtX3AxKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNv
bnRleHQsIG1fcDAueCgpLCBtX3AwLnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIDEsIDEgLyBhc3BlY3RSYXRpbygpKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIC1tX3AwLngoKSwgLW1fcDAueSgpKTsKLSAgICB9CiAKLSAgICBDR0NvbnRl
eHREcmF3UmFkaWFsR3JhZGllbnQoY29udGV4dCwgcGxhdGZvcm1HcmFkaWVudCgpLCBtX3AwLCBt
X3IwLCBtX3AxLCBtX3IxLCBleHRlbmRPcHRpb25zKTsKLQotICAgIGlmIChuZWVkU2NhbGluZykK
LSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICBXVEY6OnN3aXRj
aE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBwbGF0
Zm9ybUdyYWRpZW50KCksIGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSwgZXh0ZW5kT3B0aW9ucyk7
CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgeworICAg
ICAgICAgICAgYm9vbCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKKyAgICAg
ICAgICAgIGlmIChuZWVkU2NhbGluZykgeworICAgICAgICAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUocGxhdGZvcm1Db250ZXh0KTsKKyAgICAgICAgICAgICAgICAvLyBTY2FsZSBmcm9tIHRo
ZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0
ZWQgZ3JhZGllbnRzLAorICAgICAgICAgICAgICAgIC8vIGZvciB3aGljaCBwb2ludDAgPT0gcG9p
bnQxLgorICAgICAgICAgICAgICAgIEFTU0VSVChkYXRhLnBvaW50MCA9PSBkYXRhLnBvaW50MSk7
CisgICAgICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwg
ZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgICAgIENHQ29u
dGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgMSAvIGRhdGEuYXNwZWN0UmF0aW8pOwor
ICAgICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1k
YXRhLnBvaW50MC54KCksIC1kYXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBDR0NvbnRleHREcmF3UmFkaWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBwbGF0
Zm9ybUdyYWRpZW50KCksIGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50
MSwgZGF0YS5lbmRSYWRpdXMsIGV4dGVuZE9wdGlvbnMpOworCisgICAgICAgICAgICBpZiAobmVl
ZFNjYWxpbmcpCisgICAgICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9y
bUNvbnRleHQpOworICAgICAgICB9CisgICAgKTsKIH0KIAotfSAvL25hbWVzcGFjZQorfQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDIyNDczNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aChjb25zdCBQYXQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFp
bnQodGhpcyk7CisgICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMp
OwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgICAgIENHQ29udGV4
dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0
LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAg
ICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgICAg
ICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q29u
Y2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOwor
ICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTMyMyw3ICsxMzIzLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogICAgICAgICAgICAgQ0dDb250ZXh0UmVw
bGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRD
bGlwKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAg
ICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAgICAgIG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjI0NzM1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2MiArNzgsNzggQEAgdm9pZCBHcmFkaWVudDo6Z2Vu
ZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgICAgICBtX2dyYWRpZW50ID0gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBpZiAobV9yYWRpYWwpIHsKLSAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IHAx
KCkgLSBwMCgpOwotICAgICAgICBJRDJEMVJhZGlhbEdyYWRpZW50QnJ1c2gqIHJhZGlhbEdyYWRp
ZW50ID0gbnVsbHB0cjsKLSAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGVuZFJhZGl1cygpICsgb2Zm
c2V0LndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gbV9hc3BlY3RS
YXRpbzsKLSAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1
c2goCi0gICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhwMCgp
LCBEMkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNY
LCByYWRpdXNZKSwKLSAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVu
dFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAgICAgICAgJnJhZGlhbEdyYWRpZW50KTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1fZ3JhZGllbnQg
PSByYWRpYWxHcmFkaWVudDsKLSAgICB9IGVsc2UgewotICAgICAgICBJRDJEMUxpbmVhckdyYWRp
ZW50QnJ1c2gqIGxpbmVhckdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICAgICAgaHIgPSByZW5kZXJU
YXJnZXQtPkNyZWF0ZUxpbmVhckdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICBEMkQxOjpMaW5l
YXJHcmFkaWVudEJydXNoUHJvcGVydGllcyhwMCgpLCBwMSgpKSwKLSAgICAgICAgICAgIEQyRDE6
OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAg
ICAgICAgJmxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKLSAgICB9CisgICAg
V1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0
YSkgeworICAgICAgICAgICAgSUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5lYXJHcmFkaWVu
dCA9IG51bGxwdHI7CisgICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlTGluZWFy
R3JhZGllbnRCcnVzaCgKKyAgICAgICAgICAgICAgICBEMkQxOjpMaW5lYXJHcmFkaWVudEJydXNo
UHJvcGVydGllcyhkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEpLAorICAgICAgICAgICAgICAgIEQy
RDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAorICAg
ICAgICAgICAgICAgICZsaW5lYXJHcmFkaWVudCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVu
dDsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Cisg
ICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZGF0YS5wb2ludDEgLSBkYXRhLnBvaW50MDsK
KyAgICAgICAgICAgIElEMkQxUmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBu
dWxscHRyOworICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFkaXVzICsgb2Zm
c2V0LndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEu
YXNwZWN0UmF0aW87CisgICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFkaWFs
R3JhZGllbnRCcnVzaCgKKyAgICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJydXNo
UHJvcGVydGllcyhwMCgpLCBEMkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVp
Z2h0KCkpLCByYWRpdXNYLCByYWRpdXNZKSwKKyAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFBy
b3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAmcmFkaWFsR3JhZGllbnQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisgICAgICAgICAgICBtX2dyYWRpZW50ID0gcmFkaWFsR3JhZGllbnQ7CisgICAgICAg
IH0KKyAgICApOwogCiAgICAgaGFzaCgpOwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVu
dDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBhdXRvIGQyZENvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQot
ICAgIGJvb2wgbmVlZFNjYWxpbmcgPSBhc3BlY3RSYXRpbygpICE9IDE7Ci0gICAgaWYgKG5lZWRT
Y2FsaW5nKSB7Ci0gICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgLy8gU2NhbGUgZnJv
bSB0aGUgY2VudGVyIG9mIHRoZSBncmFkaWVudC4gV2Ugb25seSBldmVyIHNjYWxlIG5vbi1kZXBy
ZWNhdGVkIGdyYWRpZW50cywKLSAgICAgICAgLy8gZm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KLSAg
ICAgICAgQVNTRVJUKG1fcDAgPT0gbV9wMSk7Ci0KLSAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0Yg
Y3RtID0geyB9OwotICAgICAgICBkMmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShjdG0pOwotICAgICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKG1fcDApOwotICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwg
MS4wIC8gYXNwZWN0UmF0aW8oKSk7Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLW1fcDAp
OwotCi0gICAgICAgIGQyZENvbnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgIH0KLQotICAg
IGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAgICBnZW5lcmF0ZUdyYWRp
ZW50KGQyZENvbnRleHQpOwotCi0gICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFX
SU5HLCBfX0xJTkVfXyk7Ci0KLSAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsK
LSAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAg
ICBhdXRvIGQyZENvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYg
KG5lZWRTY2FsaW5nKQotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgV1RGOjpzd2l0
Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAg
ICAgICAgICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKKworICAgICAgICAgICAgZDJkQ29udGV4
dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CisKKyAgICAgICAgICAgIGNv
bnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OworICAgICAgICAgICAgZDJkQ29udGV4dC0+
RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9ncmFkaWVudCk7CisgICAgICAgIH0sCisgICAgICAg
IFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgYm9vbCBuZWVkU2Nh
bGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKKyAgICAgICAgICAgIGlmIChuZWVkU2NhbGlu
ZykgeworICAgICAgICAgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAgICAgIC8v
IFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZlciBzY2Fs
ZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCisgICAgICAgICAgICAgICAgLy8gZm9yIHdoaWNo
IG1fcDAgPT0gbV9wMS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5wb2ludDAgPT0gZGF0
YS5wb2ludDEpOworCisgICAgICAgICAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtID0geyB9
OworICAgICAgICAgICAgICAgIGQyZENvbnRleHQtPkdldFRyYW5zZm9ybSgmY3RtKTsKKworICAg
ICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKKyAgICAgICAgICAg
ICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGRhdGEucG9pbnQwKTsKKyAgICAgICAgICAgICAgICB0
cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwgMS4wIC8gZGF0YS5hc3BlY3RSYXRpbyk7Cisg
ICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtZGF0YS5wb2ludDApOworCisgICAg
ICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQorICAgICAg
ICAgICAgICAgIGdlbmVyYXRlR3JhZGllbnQoZDJkQ29udGV4dCk7CisKKyAgICAgICAgICAgIGQy
ZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOworCisgICAgICAg
ICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAgICAgIGQyZENv
bnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOworCisgICAgICAgICAg
ICBpZiAobmVlZFNjYWxpbmcpCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgICAgIH0KKyAgICApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyMjQ3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcs
NyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgY29udGV4
dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNh
bFJlbmRlcmluZ1Bvc2l0aW9uID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKLSAgICBSZWZQ
dHI8R3JhZGllbnQ+IHN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50
KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0Lngo
KSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOwor
ICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdy
YWRpZW50OjpMaW5lYXJsRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVy
aW5nUG9zaXRpb24pLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0
aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKICAgICBzdHJva2VHcmFkaWVudC0+YWRk
Q29sb3JTdG9wKDAuMCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwogICAgIHN0cm9rZUdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMC40NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwogICAgIHN0
cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkp
OwpAQCAtOTE3LDcgKzkxNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NC
YXIoY28KICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXBSb3VuZGVkUmVjdChGbG9hdFJvdW5k
ZWRSZWN0KGJvcmRlciwgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywg
cm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cykpOwogCiAgICAgZmxvYXQg
dXBwZXJHcmFkaWVudEhlaWdodCA9IHByb2dyZXNzQmFySGVpZ2h0IC8gMi47Ci0gICAgUmVmUHRy
PEdyYWRpZW50PiB1cHBlckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxvYXRQb2ludChyZWN0
LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHVwcGVyR3JhZGllbnRIZWlnaHQgLSAx
LjUpKTsKKyAgICBSZWZQdHI8R3JhZGllbnQ+IHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKEdyYWRpZW50OjpSYWRpYWxEYXRhIHsgTGluZWFybERhdGEocmVjdC54KCksIHZlcnRpY2Fs
UmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJl
bmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkgfSk7CiAgICAgdXBw
ZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSk7
CiAgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMTgsIDE4LCAxOCwg
NTEpKTsKICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCh1cHBlckdyYWRpZW50LnJlbGVhc2VO
b25OdWxsKCkpOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgLy8gMikgRHJhdyB0aGUgcHJvZ3Jlc3MgYmFyLgogICAg
ICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCks
IDAuMCwgMS4wKTsKICAgICAgICAgZG91YmxlIGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0Lndp
ZHRoKCk7Ci0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6
Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAw
LjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJv
Z3Jlc3NCYXJIZWlnaHQgLSAxKSk7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyR3JhZGll
bnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJsRGF0YSB7IEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAx
KSB9KTsKICAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDE5NSwg
MjE3LCAyNDcpKTsKICAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBDb2xv
cigxMTgsIDE2NCwgMjI4KSk7CiAgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40
OSwgQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgxLjAsIENvbG9yKDU3LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudChiYXJHcmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKIAotICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBv
aW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0
LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkp
OworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6
OmNyZWF0ZShHcmFkaWVudDo6TGluZWFybERhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7CiAgICAgICAgIGJhclN0
cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcig5NSwgMTA3LCAxODMpKTsKICAg
ICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUsIENvbG9yKDY2LCAxMDYs
IDE3NCwgMjQwKSk7CiAgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4w
LCBDb2xvcigzOCwgMTA0LCAxNjYpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmNwcAkocmV2aXNpb24gMjI0NzM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBGbG9hdFBvaW50IFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllCiAKIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6YnVpbGRHcmFkaWVudChHcmFkaWVu
dERhdGEqIGdyYWRpZW50RGF0YSkgY29uc3QKIHsKLSAgICBncmFkaWVudERhdGEtPmdyYWRpZW50
ID0gR3JhZGllbnQ6OmNyZWF0ZShzdGFydFBvaW50KG1fYXR0cmlidXRlcyksIGVuZFBvaW50KG1f
YXR0cmlidXRlcykpOworICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgc3RhcnRQb2ludChtX2F0dHJpYnV0ZXMpLCBlbmRQ
b2ludChtX2F0dHJpYnV0ZXMpIH0pOwogICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldFNw
cmVhZE1ldGhvZChwbGF0Zm9ybVNwcmVhZE1ldGhvZEZyb21TVkdUeXBlKG1fYXR0cmlidXRlcy5z
cHJlYWRNZXRob2QoKSkpOwogICAgIGFkZFN0b3BzKGdyYWRpZW50RGF0YSwgbV9hdHRyaWJ1dGVz
LnN0b3BzKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCShyZXZp
c2lvbiAyMjQ3MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsNyBA
QCBmbG9hdCBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpmCiAKIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6YnVpbGRHcmFkaWVudChHcmFkaWVudERhdGEqIGdy
YWRpZW50RGF0YSkgY29uc3QKIHsKLSAgICBncmFkaWVudERhdGEtPmdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZSh0aGlzLT5mb2NhbFBvaW50KG1fYXR0cmlidXRlcyksCi0gICAgICAgIHRoaXMt
PmZvY2FsUmFkaXVzKG1fYXR0cmlidXRlcyksCi0gICAgICAgIHRoaXMtPmNlbnRlclBvaW50KG1f
YXR0cmlidXRlcyksCi0gICAgICAgIHRoaXMtPnJhZGl1cyhtX2F0dHJpYnV0ZXMpKTsKLQorICAg
IGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpSYWRp
YWxEYXRhIHsgdGhpcy0+Zm9jYWxQb2ludChtX2F0dHJpYnV0ZXMpLCB0aGlzLT5jZW50ZXJQb2lu
dChtX2F0dHJpYnV0ZXMpLCB0aGlzLT5mb2NhbFJhZGl1cyhtX2F0dHJpYnV0ZXMpLCB0aGlzLT5y
YWRpdXMobV9hdHRyaWJ1dGVzKSwgMSB9KTsKICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5z
ZXRTcHJlYWRNZXRob2QocGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShtX2F0dHJpYnV0
ZXMuc3ByZWFkTWV0aG9kKCkpKTsKIAogICAgIGFkZFN0b3BzKGdyYWRpZW50RGF0YSwgbV9hdHRy
aWJ1dGVzLnN0b3BzKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326718</attachid>
            <date>2017-11-12 10:13:22 -0800</date>
            <delta_ts>2017-11-12 11:41:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179595-20171112101321.patch</filename>
            <type>text/plain</type>
            <size>57223</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBAQAorMjAxNy0xMS0xMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENsZWFuIHVwIGdyYWRpZW50IGNvZGUg
aW4gcHJlcGFyYXRpb24gZm9yIGNvbmljIGdyYWRpZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBTd2l0Y2hlcyBHcmFkaWVudCB0byB1c2UgYSBW
YXJpZW50IHdpdGggdHlwZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHMgYW5kIG1ha2VzIHRoZSAKKyAg
ICAgICAgICBwb2ludHMgLyByYWRpaSBpbW11dGFibGUuCisgICAgICAgIC0gUmVwbGFjZXMgQ1NT
R3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMgd2l0aCB0ZW1wbGF0ZSBmdW5jdGlvbiBDU1NHcmFkaWVu
dFZhbHVlOjpjb21wdXRlU3RvcHMKKyAgICAgICAgICB3aGljaCBkaXNwYXRjaGVzIHRvIGEgaGVs
cGVyIGFkb3B0b3Igc3RydWN0IHdoaWNoIGlzIHBhc3NlZCBpbiBmb3IgZ3JhZGllbnQgdHlwZSBz
cGVjaWZpYworICAgICAgICAgIHZhbHVlcywgcmF0aGVyIHRoYW4gc3dpdGNoaW5nIG9uIHR5cGUg
aW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gSW4gYWRkaXRpb24sIHRoZSBmdW5jdGlvbiBubworICAg
ICAgICAgIGxvbmdlciBtdXRhdGVzIGEgR3JhZGllbnQsIGJ1dCByYXRoZXIgbXV0YXRlcyB0eXBl
IHNwZWNpZmljIHRoZSBkYXRhIHN0cnVjdCAoZS5nLiBMaW5lYXIgb3IKKyAgICAgICAgICBSYWRp
YWwgZm9yIG5vdykuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lYXJHcmFkaWVudEFkYXB0b3I6OkxpbmVhckdyYWRpZW50QWRhcHRv
cik6CisgICAgICAgIChXZWJDb3JlOjpSYWRpYWxHcmFkaWVudEFkYXB0b3I6OlJhZGlhbEdyYWRp
ZW50QWRhcHRvcik6CisKKyAgICAgICAgICAgIEFkZCBoZWxwZXIgc3RydWN0cyBmb3IgdGhlIG5v
dyB0ZW1wbGF0aXplZCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMgdGhhdAorICAgICAg
ICAgICAgaW1wbGVtZW50IHR5cGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAo
V2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKToKKyAgICAgICAgCisgICAg
ICAgICAgICBSZW5hbWVkIGZyb20gYWRkU3RvcHMuIE5vdyB0YWtlcyBhIEdyYWRpZW50QWRhcHRv
ciB3cmFwcGVyIHdoaWNoIGFic3RyYWN0cyBvdXQKKyAgICAgICAgICAgIHRoZSBncmFkaWVudCB0
eXBlIHNwZWNpZmljIGZ1bmN0aW9ubGl0eS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpD
U1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KToKKyAgICAgICAgCisg
ICAgICAgICAgICBVcGRhdGUgdG8gY2FsbCBjb21wdXRlU3RvcHMgYW5kIHVzZSBuZXcgR3JhZGll
bnQgY3JlYXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUg
Zm9yIGNvbXB1dGVTdG9wcy4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OkNhbnZhc0dy
YWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBHcmFkaWVu
dCBjcmVhdGUgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFy
cmF5Rm9yQ2FudmFzR3JhZGllbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBn
ZXQgZ3JhZGllbnQgcG9pbnQgLyByYWRpaSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhIGFjY2Vz
c29yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6OkdyYWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBV
cGRhdGUgY29uc3RydWN0b3JzIHRvIHRoZSBuZXcgZGF0YSBzdHJ1Y3RzLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojp0eXBlIGNvbnN0KToKKyAgICAgICAgCisgICAgICAg
ICAgICBBZGQgaGVscGVyIHRvIGdldCB0aGUgdHlwZSBvZiB0aGUgdmFyaWVudCwgbmVlZCBmb3Ig
aW5zcGVjdG9yIGNvZGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFk
anVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OmlzWmVyb1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc2gg
Y29uc3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBzd2l0Y2ggb24gdGhlIHVu
ZGVybHlpbmcgdmFyaWFudCB0byBnZXQgZGF0YSB2YWx1ZXMuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6CisgICAgICAgIAorICAgICAgICAgICAg
U2ltcGxpZnkgYnkgaGF2aW5nIG9uZSBhZGRDb2xvclN0b3AgY2FsbCB0aGUgb3RoZXIuCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3Bz
KToKKyAgICAgICAgCisgICAgICAgICAgICBBZGRlZC4gUmVwbGFjZXMgc2V0U3RvcHNTb3J0ZWQu
IFVzZWQgbm93IHRoYXQgQ1NTR3JhZGllbnRWYWx1ZSBjb21wdXRlcyBhbmQgc29ydHMKKyAgICAg
ICAgICAgIGl0cyBjb2xvciBzdG9wcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGdyYWRpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpjcmVhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlcGxhY2UgY3JlYXRl
IGZ1bmN0aW9ucyB3aXRoIG9uZXMgdGhhdCB0YWtlIGRhdGEgc3RydWN0cy4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZGF0YSBjb25zdCk6CisKKyAgICAgICAgICAgIEFk
ZCBhY2Nlc3NvciBmb3IgdGhlIHVuZGVybHlpbmcgdmFyaWFudC4KKworICAgICAgICAoV2ViQ29y
ZTo6R3JhZGllbnQ6OmlzUmFkaWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgCisgICAgICAg
ICAgICBSZXBsYWNlZCBieSB0eXBlIGFjY2Vzc29yLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpwMCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFk
aWVudDo6cDEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNl
dFAwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c3RhcnRSYWRpdXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmVuZFJhZGl1cyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U3RhcnRSYWRpdXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEVuZFJhZGl1cyk6IERlbGV0ZWQuCisg
ICAgICAgIAorICAgICAgICAgICAgUG9pbnQgYW5kIHJhZGlpIGFyZSBub3cgaW1tdXRhYmxlLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTdG9wc1NvcnRlZCk6IERl
bGV0ZWQuCisgICAgICAgIAorICAgICAgICAgICAgUmVwbGFjZWQgYnkgc2V0U29ydGVkQ29sb3JT
dG9wcyBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNzQ29udGV4dCBi
eSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBs
YXRmb3JtR3JhZGllbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8gc3dpdGNoIG9uIHRoZSB1
bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisgICAgICAgIChXZWJDb3Jl
OjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0aGUgR3JhcGhp
Y3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxh
dGZvcm1EZXN0cm95KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgbnVsbHB0ci4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAg
ICAgICAgUGFzcyB0aGUgR3JhcGhpY3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGFpbnQpOgorCisgICAgICAgICAgICBVcGRhdGUg
dG8gc3dpdGNoIG9uIHRoZSB1bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBo
aWNzQ29udGV4dCBieSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKworICAgICAgICAgICAgVXBkYXRlIHRvIHN3aXRjaCBv
biB0aGUgdW5kZXJseWluZyB2YXJpYW50IHRvIGdldCBkYXRhIHZhbHVlcy4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgCisgICAgICAgICAgICBQYXNz
IHRoZSBHcmFwaGljc0NvbnRleHQgYnkgcmVmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyYWRp
ZW50IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBHcmFkaWVu
dCBjcmVhdGUgZnVuY3Rpb24gc2lnbmF0dXJlLgorCiAyMDE3LTExLTEyICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtXZWJDb3JlXSBJbXBsZW1lbnQg
aW1wb3J0Lm1ldGEudXJsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
Y3BwCShyZXZpc2lvbiAyMjQ3MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw1NyArMTM1LDE0OSBAQCBzdGF0aWMgaW5s
aW5lIENvbG9yIGludGVycG9sYXRlKGNvbnN0IENvCiAgICAgcmV0dXJuIENvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKIH0KIAotdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhH
cmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpCitzdHJ1Y3QgTGluZWFyR3JhZGll
bnRBZGFwdG9yIHsKKyAgICBMaW5lYXJHcmFkaWVudEFkYXB0b3IoR3JhZGllbnQ6OkxpbmVhckRh
dGEmIGRhdGEpCisgICAgICAgIDogZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IHN0YXJ0UG9pbnQoKSBjb25zdCB7IHJldHVybiBkYXRhLnBvaW50MDsgfQorICAgIEZs
b2F0UG9pbnQgZW5kUG9pbnQoKSBjb25zdCB7IHJldHVybiBkYXRhLnBvaW50MTsgfQorICAgIGZs
b2F0IG1heEV4dGVudChmbG9hdCwgZmxvYXQpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKworICAgIHZv
aWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UoVmVjdG9yPEdyYWRpZW50
U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wcy5m
aXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzLmxhc3QoKS5v
ZmZzZXQ7CisgICAgICAgIGlmIChmaXJzdE9mZnNldCAhPSBsYXN0T2Zmc2V0KSB7CisgICAgICAg
ICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKKworICAgICAgICAg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQg
PSAoc3RvcC5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKKworICAgICAgICAgICAgYXV0
byBwMCA9IGRhdGEucG9pbnQwOworICAgICAgICAgICAgYXV0byBwMSA9IGRhdGEucG9pbnQxOwor
ICAgICAgICAgICAgZGF0YS5wb2ludDAgPSBGbG9hdFBvaW50KHAwLngoKSArIGZpcnN0T2Zmc2V0
ICogKHAxLngoKSAtIHAwLngoKSksIHAwLnkoKSArIGZpcnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAw
LnkoKSkpOworICAgICAgICAgICAgZGF0YS5wb2ludDEgPSBGbG9hdFBvaW50KHAxLngoKSArIChs
YXN0T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEueSgpICsgKGxhc3RPZmZzZXQg
LSAxKSAqIChwMS55KCkgLSBwMC55KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIFRoZXJlJ3MgYSBzaW5nbGUgcG9zaXRpb24gdGhhdCBpcyBvdXRzaWRlIHRoZSBzY2FsZSwg
Y2xhbXAgdGhlIHBvc2l0aW9ucyB0byAxLgorICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDog
c3RvcHMpCisgICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAxOworICAgICAgICB9CisgICAg
fQorCisgICAgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGE7Cit9OworCitzdHJ1Y3QgUmFkaWFs
R3JhZGllbnRBZGFwdG9yIHsKKyAgICBSYWRpYWxHcmFkaWVudEFkYXB0b3IoR3JhZGllbnQ6OlJh
ZGlhbERhdGEmIGRhdGEpCisgICAgICAgIDogZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAg
ICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoKSB7IHJldHVybiBkYXRhLnBvaW50MDsgfQorICAgIEZs
b2F0UG9pbnQgZW5kUG9pbnQoKSB7IHJldHVybiBkYXRhLnBvaW50MCArIEZsb2F0U2l6ZShkYXRh
LmVuZFJhZGl1cywgMCk7IH0KKworICAgIC8vIFJhZGlhbCBncmFkaWVudHMgbWF5IG5lZWQgdG8g
ZXh0ZW5kIGZ1cnRoZXIgdGhhbiB0aGUgZW5kcG9pbnRzLCBiZWNhdXNlIHRoZXkgaGF2ZQorICAg
IC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KKyAgICBmbG9hdCBt
YXhFeHRlbnQoZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0LCBmbG9hdCBncmFkaWVudExlbmd0aCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtYXhMZW5ndGhGb3JSZXBlYXQgPiBncmFkaWVudExl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudExlbmd0aCA+IDAgPyBtYXhMZW5ndGhG
b3JSZXBlYXQgLyBncmFkaWVudExlbmd0aCA6IDA7CisgICAgICAgIHJldHVybiAxOworICAgIH0K
KworICAgIHZvaWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UoVmVjdG9y
PEdyYWRpZW50U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAgYXV0byBudW1TdG9wcyA9IHN0
b3BzLnNpemUoKTsKKworICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRoZSBwb2ludHMg
PCAwLCB3ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0byB0aGUgbGFy
Z2VzdCBwb2ludC4KKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAwOworICAgICAgICBmbG9h
dCBsYXN0T2Zmc2V0ID0gc3RvcHMubGFzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgc2NhbGUg
PSBsYXN0T2Zmc2V0IC0gZmlyc3RPZmZzZXQ7CisKKyAgICAgICAgLy8gUmVzZXQgcG9pbnRzIGJl
bG93IDAgdG8gdGhlIGZpcnN0IHZpc2libGUgY29sb3IuCisgICAgICAgIHNpemVfdCBmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bVN0b3BzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPj0g
MCkgeworICAgICAgICAgICAgICAgIGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gaTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlcklu
ZGV4XS5vZmZzZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9IHN0
b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0OworICAgICAgICAgICAgICAg
IGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0
OworCisgICAgICAgICAgICAgICAgZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zm
c2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xv
cnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgIENv
bG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0g
MV0uY29sb3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9w
UHJvcG9ydGlvbik7CisKKyAgICAgICAgICAgICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRv
IDAgYW5kIHNldCB0aGUgY29sb3IuCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IHN0b3BzW2ldLm9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLmNvbG9y
ID0gYmxlbmRlZENvbG9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gQWxsIHN0b3BzIGFyZSBiZWxvdyAwOyBqdXN0IGNsYW1wIHRo
ZW0uCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleDsgKytpKQorICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBzdG9wIDog
c3RvcHMpCisgICAgICAgICAgICBzdG9wLm9mZnNldCAvPSBzY2FsZTsKKworICAgICAgICBkYXRh
LnN0YXJ0UmFkaXVzICo9IHNjYWxlOworICAgICAgICBkYXRhLmVuZFJhZGl1cyAqPSBzY2FsZTsK
KyAgICB9CisKKyAgICBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YTsKK307CisKK3RlbXBsYXRl
PGNsYXNzIEdyYWRpZW50QWRhcHRvcj4KK0dyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3Jh
ZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRvciYgZ3JhZGllbnQsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBmbG9hdCBtYXhMZW5n
dGhGb3JSZXBlYXQpCiB7CiAgICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRM
aW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQpIHsKICAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQoKTsKIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29u
c3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwogCisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6
IG1fc3RvcHMpIHsKICAgICAgICAgICAgIGZsb2F0IG9mZnNldDsKICAgICAgICAgICAgIGlmIChz
dG9wLm1fcG9zaXRpb24tPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIG9mZnNldCA9
IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCA9
IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CiAKLSAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcChvZmZzZXQsIHN0b3AubV9y
ZXNvbHZlZENvbG9yKTsKKyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBvZmZz
ZXQsIHN0b3AubV9yZXNvbHZlZENvbG9yIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhl
IGJhY2sgZW5kIGFscmVhZHkgc29ydGVkIHRoZSBzdG9wcy4KLSAgICAgICAgZ3JhZGllbnQuc2V0
U3RvcHNTb3J0ZWQodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICBzaXplX3QgbnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsKLQogICAg
IFZlY3RvcjxHcmFkaWVudFN0b3A+IHN0b3BzKG51bVN0b3BzKTsKIAotICAgIGZsb2F0IGdyYWRp
ZW50TGVuZ3RoID0gMDsKLSAgICBib29sIGNvbXB1dGVkR3JhZGllbnRMZW5ndGggPSBmYWxzZTsK
KyAgICBhdXRvIGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC5zdGFydFBvaW50KCk7CisgICAgYXV0
byBncmFkaWVudEVuZCA9IGdyYWRpZW50LmVuZFBvaW50KCk7CiAKLSAgICBGbG9hdFBvaW50IGdy
YWRpZW50U3RhcnQgPSBncmFkaWVudC5wMCgpOwotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7
Ci0gICAgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICBncmFkaWVudEVuZCA9
IGdyYWRpZW50LnAxKCk7Ci0gICAgZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0g
ICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEZsb2F0U2l6ZShncmFkaWVudC5l
bmRSYWRpdXMoKSwgMCk7CisgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0
IC0gZ3JhZGllbnRFbmQpOworICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXpl
LmRpYWdvbmFsTGVuZ3RoKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3Bz
OyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0
b3BzW2ldOworICAgICAgICBhdXRvJiBzdG9wID0gbV9zdG9wc1tpXTsKIAogICAgICAgICBzdG9w
c1tpXS5pc01pZHBvaW50ID0gc3RvcC5pc01pZHBvaW50OwogICAgICAgICBzdG9wc1tpXS5jb2xv
ciA9IHN0b3AubV9yZXNvbHZlZENvbG9yOwogCiAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24p
IHsKLSAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwb3NpdGlvblZhbHVlID0g
KnN0b3AubV9wb3NpdGlvbjsKKyAgICAgICAgICAgIGF1dG8mIHBvc2l0aW9uVmFsdWUgPSAqc3Rv
cC5tX3Bvc2l0aW9uOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uVmFsdWUuaXNQZXJjZW50YWdl
KCkpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gcG9zaXRpb25WYWx1ZS5mbG9h
dFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkgfHwgcG9zaXRpb25WYWx1ZS5p
c1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIHx8IHBvc2l0aW9uVmFsdWUuaXNDYWxjdWxhdGVk
UGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIGlmICghY29tcHV0ZWRH
cmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRT
aXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGdy
YWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGZsb2F0IGxlbmd0aDsKICAgICAgICAgICAgICAgICBp
ZiAocG9zaXRpb25WYWx1ZS5pc0xlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
PSBwb3NpdGlvblZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKTsKQEAg
LTM0MiwyNiArNDM0LDE0IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGll
bnQKICAgICBpZiAobV9yZXBlYXRpbmcgJiYgbnVtU3RvcHMgPiAxKSB7CiAgICAgICAgIC8vIElm
IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGNv
bG9yLXN0b3BzIGlzIDAsCiAgICAgICAgIC8vIHRoZSBncmFkaWVudCBkZWZpbmVzIGEgc29saWQt
Y29sb3IgaW1hZ2Ugd2l0aCB0aGUgY29sb3Igb2YgdGhlIGxhc3QgY29sb3Itc3RvcCBpbiB0aGUg
cnVsZS4KLSAgICAgICAgZmxvYXQgZ3JhZGllbnRSYW5nZSA9IHN0b3BzW251bVN0b3BzIC0gMV0u
b2Zmc2V0IC0gc3RvcHNbMF0ub2Zmc2V0OworICAgICAgICBmbG9hdCBncmFkaWVudFJhbmdlID0g
c3RvcHMubGFzdCgpLm9mZnNldCAtIHN0b3BzLmZpcnN0KCkub2Zmc2V0OwogICAgICAgICBpZiAo
IWdyYWRpZW50UmFuZ2UpIHsKICAgICAgICAgICAgIHN0b3BzLmZpcnN0KCkub2Zmc2V0ID0gMDsK
ICAgICAgICAgICAgIHN0b3BzLmZpcnN0KCkuY29sb3IgPSBzdG9wcy5sYXN0KCkuY29sb3I7CiAg
ICAgICAgICAgICBzdG9wcy5zaHJpbmsoMSk7CiAgICAgICAgICAgICBudW1TdG9wcyA9IDE7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmbG9hdCBtYXhFeHRlbnQgPSAxOwotCi0gICAg
ICAgICAgICAvLyBSYWRpYWwgZ3JhZGllbnRzIG1heSBuZWVkIHRvIGV4dGVuZCBmdXJ0aGVyIHRo
YW4gdGhlIGVuZHBvaW50cywgYmVjYXVzZSB0aGV5IGhhdmUKLSAgICAgICAgICAgIC8vIHRvIHJl
cGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KLSAgICAgICAgICAgIGlmIChpc1Jh
ZGlhbEdyYWRpZW50VmFsdWUoKSkgewotICAgICAgICAgICAgICAgIGlmICghY29tcHV0ZWRHcmFk
aWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRTaXpl
KGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYWRp
ZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1heExlbmd0aEZvclJlcGVhdCA+IGdyYWRpZW50
TGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBtYXhFeHRlbnQgPSBncmFkaWVudExlbmd0aCA+
IDAgPyBtYXhMZW5ndGhGb3JSZXBlYXQgLyBncmFkaWVudExlbmd0aCA6IDA7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBmbG9hdCBtYXhFeHRlbnQgPSBncmFkaWVudC5tYXhFeHRlbnQobWF4
TGVuZ3RoRm9yUmVwZWF0LCBncmFkaWVudExlbmd0aCk7CiAKICAgICAgICAgICAgIHNpemVfdCBv
cmlnaW5hbE51bVN0b3BzID0gbnVtU3RvcHM7CiAgICAgICAgICAgICBzaXplX3Qgb3JpZ2luYWxG
aXJzdFN0b3BJbmRleCA9IDA7CkBAIC00MDcsNzYgKzQ4NywxNiBAQCB2b2lkIENTU0dyYWRpZW50
VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBudW1TdG9w
cyA9IHN0b3BzLnNpemUoKTsKLQogICAgIC8vIElmIHRoZSBncmFkaWVudCBnb2VzIG91dHNpZGUg
dGhlIDAtMSByYW5nZSwgbm9ybWFsaXplIGl0IGJ5IG1vdmluZyB0aGUgZW5kcG9pbnRzLCBhbmQg
YWRqdXN0aW5nIHRoZSBzdG9wcy4KLSAgICBpZiAobnVtU3RvcHMgPiAxICYmIChzdG9wc1swXS5v
ZmZzZXQgPCAwIHx8IHN0b3BzW251bVN0b3BzIC0gMV0ub2Zmc2V0ID4gMSkpIHsKLSAgICAgICAg
aWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCBmaXJzdE9m
ZnNldCA9IHN0b3BzWzBdLm9mZnNldDsKLSAgICAgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBz
dG9wc1tudW1TdG9wcyAtIDFdLm9mZnNldDsKLSAgICAgICAgICAgIGlmIChmaXJzdE9mZnNldCAh
PSBsYXN0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0
IC0gZmlyc3RPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bVN0b3BzOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IChz
dG9wc1tpXS5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKLQotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgcDAgPSBncmFkaWVudC5wMCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDEgPSBncmFkaWVudC5wMSgpOwotICAgICAgICAgICAgICAgIGdyYWRpZW50LnNldFAwKEZs
b2F0UG9pbnQocDAueCgpICsgZmlyc3RPZmZzZXQgKiAocDEueCgpIC0gcDAueCgpKSwgcDAueSgp
ICsgZmlyc3RPZmZzZXQgKiAocDEueSgpIC0gcDAueSgpKSkpOwotICAgICAgICAgICAgICAgIGdy
YWRpZW50LnNldFAxKEZsb2F0UG9pbnQocDEueCgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS54
KCkgLSBwMC54KCkpLCBwMS55KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLnkoKSAtIHAwLnko
KSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUncyBh
IHNpbmdsZSBwb3NpdGlvbiB0aGF0IGlzIG91dHNpZGUgdGhlIHNjYWxlLCBjbGFtcCB0aGUgcG9z
aXRpb25zIHRvIDEuCi0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1T
dG9wczsgKytpKQotICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAxOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnRWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRoZSBwb2ludHMgPCAwLCB3ZSB0
cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0byB0aGUgbGFyZ2VzdCBwb2lu
dC4KLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZsb2F0
IGxhc3RPZmZzZXQgPSBzdG9wc1tudW1TdG9wcyAtIDFdLm9mZnNldDsKLSAgICAgICAgICAgIGZs
b2F0IHNjYWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0OwotCi0gICAgICAgICAgICAvLyBS
ZXNldCBwb2ludHMgYmVsb3cgMCB0byB0aGUgZmlyc3QgdmlzaWJsZSBjb2xvci4KLSAgICAgICAg
ICAgIHNpemVfdCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0b3BzW2ldLm9mZnNldCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
WmVyb09yR3JlYXRlckluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3Jl
YXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9m
ZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9IHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNl
dDsKLQotICAgICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXBy
ZXZPZmZzZXQgLyAobmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOwotICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlw
bGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAg
ICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3IgPSBibGVuZChzdG9wc1tmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0uY29s
b3IsIGludGVyU3RvcFByb3BvcnRpb24pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENsYW1w
IHRoZSBwb3NpdGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RvcHNbaV0uY29sb3IgPSBibGVuZGVkQ29sb3I7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBBbGwgc3RvcHMgYXJlIGJlbG93IDA7IGp1c3QgY2xhbXAgdGhlbS4KLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsg
KytpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKLSAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQg
Lz0gc2NhbGU7Ci0KLSAgICAgICAgICAgIGdyYWRpZW50LnNldFN0YXJ0UmFkaXVzKGdyYWRpZW50
LnN0YXJ0UmFkaXVzKCkgKiBzY2FsZSk7Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRFbmRSYWRp
dXMoZ3JhZGllbnQuZW5kUmFkaXVzKCkgKiBzY2FsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RvcHM7IGkrKykKLSAgICAgICAgZ3JhZGll
bnQuYWRkQ29sb3JTdG9wKHN0b3BzW2ldLm9mZnNldCwgc3RvcHNbaV0uY29sb3IpOworICAgIGlm
IChzdG9wcy5zaXplKCkgPiAxICYmIChzdG9wcy5maXJzdCgpLm9mZnNldCA8IDAgfHwgc3RvcHMu
bGFzdCgpLm9mZnNldCA+IDEpKQorICAgICAgICBncmFkaWVudC5ub3JtYWxpemVTdG9wc0FuZEVu
ZHBvaW50c091dHNpZGVSYW5nZShzdG9wcyk7CisgICAgCisgICAgR3JhZGllbnQ6OkNvbG9yU3Rv
cFZlY3RvciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RvcHMu
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yIH0pOwogCi0gICAgZ3JhZGll
bnQuc2V0U3RvcHNTb3J0ZWQodHJ1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGlj
IGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgYm9vbCBpc0hvcml6b250YWwpCkBAIC02MjQsNyArNjQ0LDcgQEAgU3Ry
aW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNTUwogICAgICAgICB9CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKKyAg
ICAgICAgICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOwogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIiwgIik7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9jb2xv
ci0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24pIHsKQEAgLTgw
MSwxNCArODIxLDE0IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3IK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9Ci0KICAgICB9CiAKLSAgICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6
OmNyZWF0ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7Ci0KLSAgICAvLyBOb3cgYWRkIHRoZSBz
dG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudCwgY29udmVyc2lvbkRhdGEsIDEpOworICAgIEdy
YWRpZW50OjpMaW5lYXJEYXRhIGRhdGEgeyBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCB9OworICAg
IExpbmVhckdyYWRpZW50QWRhcHRvciBhZGFwdG9yIHsgZGF0YSB9OworICAgIGF1dG8gc3RvcHMg
PSBjb21wdXRlU3RvcHMoYWRhcHRvciwgY29udmVyc2lvbkRhdGEsIDEpOwogCisgICAgYXV0byBn
cmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CisgICAgZ3JhZGllbnQt
PnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92ZShzdG9wcykpOwogICAgIHJldHVybiBncmFkaWVu
dDsKIH0KIApAQCAtMTIxMywxOCArMTIzMywxOSBAQCBSZWY8R3JhZGllbnQ+IENTU1JhZGlhbEdy
YWRpZW50VmFsdWU6OmNyCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWY8R3JhZGllbnQ+IGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25k
UG9pbnQsIHNlY29uZFJhZGl1cywgYXNwZWN0UmF0aW8pOwotCi0gICAgLy8gYWRkU3RvcHMoKSBv
bmx5IHVzZXMgbWF4RXh0ZW50IGZvciByZXBlYXRpbmcgZ3JhZGllbnRzLgorICAgIC8vIGNvbXB1
dGVTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVhdGluZyBncmFkaWVudHMuCiAg
ICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKICAgICBpZiAobV9yZXBlYXRpbmcpIHsKICAgICAgICAg
RmxvYXRQb2ludCBjb3JuZXI7CiAgICAgICAgIG1heEV4dGVudCA9IGRpc3RhbmNlVG9GYXJ0aGVz
dENvcm5lcihzZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICB9CiAKLSAgICAvLyBOb3cg
YWRkIHRoZSBzdG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudCwgY29udmVyc2lvbkRhdGEsIG1h
eEV4dGVudCk7CisgICAgR3JhZGllbnQ6OlJhZGlhbERhdGEgZGF0YSB7IGZpcnN0UG9pbnQsIHNl
Y29uZFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25kUmFkaXVzLCBhc3BlY3RSYXRpbyB9OworICAg
IFJhZGlhbEdyYWRpZW50QWRhcHRvciBhZGFwdG9yIHsgZGF0YSB9OworICAgIGF1dG8gc3RvcHMg
PSBjb21wdXRlU3RvcHMoYWRhcHRvciwgY29udmVyc2lvbkRhdGEsIG1heEV4dGVudCk7CiAKKyAg
ICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKKyAgICBn
cmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3ZlKHN0b3BzKSk7CiAgICAgcmV0dXJu
IGdyYWRpZW50OwogfQogCkBAIC0xMzI2LDcgKzEzNDcsNyBAQCBTdHJpbmcgQ1NTQ29uaWNHcmFk
aWVudFZhbHVlOjpjdXN0b21DU1NUCiBSZWY8R3JhZGllbnQ+IENTU0NvbmljR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0ZShGbG9h
dFBvaW50IHsgfSwgRmxvYXRQb2ludCB7IH0pOworICAgIHJldHVybiBHcmFkaWVudDo6Y3JlYXRl
KEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgfSk7CiB9CiAKIGJvb2wgQ1NTQ29uaWNHcmFkaWVudFZh
bHVlOjplcXVhbHMoY29uc3QgQ1NTQ29uaWNHcmFkaWVudFZhbHVlJiBvdGhlcikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkocmV2aXNpb24gMjI0NzM2KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTIgKzI3LDEyIEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBlbnVt
IENTU0dyYWRpZW50VHlwZSB7CkBAIC0xMDksNyArMTA5LDggQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICB9CiAKLSAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50JiwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYsIGZsb2F0IG1heExlbmd0aEZvclJlcGVhdCA9IDApOworICAgIHRlbXBs
YXRlPGNsYXNzIEdyYWRpZW50QWRhcHRvcj4KKyAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9y
IGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0b3ImLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KTsKIAogICAgIC8vIFJlc29sdmUgcG9p
bnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxvYXRQb2ludCBjb21wdXRlRW5k
UG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBGbG9hdFNpemUmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDcz
NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENh
bnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEpCi0gICAgOiBtX2dyYWRpZW50KEdyYWRpZW50OjpjcmVhdGUocDAsIHAx
KSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0
YSB7IHAwLCBwMSB9KSkKIHsKIH0KIAogQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0
IHIxKQotICAgIDogbV9ncmFkaWVudChHcmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkK
KyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6UmFkaWFsRGF0YSB7
IHAwLCBwMSwgcjAsIHIxLCAxIH0pKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkocmV2aXNpb24gMjI0NzM2KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5MSwyMyArNTkxLDMwIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWMKIAogUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPj4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQoY29uc3QgQ2FudmFz
R3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewotICAgIGNvbnN0IEdyYWRpZW50JiBncmFkaWVu
dCA9IGNhbnZhc0dyYWRpZW50LmdyYWRpZW50KCk7Ci0gICAgYm9vbCBpc1JhZGlhbCA9IGdyYWRp
ZW50LmlzUmFkaWFsKCk7CisgICAgY29uc3QgYXV0byYgZ3JhZGllbnQgPSBjYW52YXNHcmFkaWVu
dC5ncmFkaWVudCgpOwogCi0gICAgU3RyaW5nIHR5cGUgPSBpc1JhZGlhbCA/IEFTQ0lJTGl0ZXJh
bCgicmFkaWFsLWdyYWRpZW50IikgOiBBU0NJSUxpdGVyYWwoImxpbmVhci1ncmFkaWVudCIpOwor
ICAgIFN0cmluZyB0eXBlID0gZ3JhZGllbnQudHlwZSgpID09IEdyYWRpZW50OjpUeXBlOjpSYWRp
YWwgPyBBU0NJSUxpdGVyYWwoInJhZGlhbC1ncmFkaWVudCIpIDogQVNDSUlMaXRlcmFsKCJsaW5l
YXItZ3JhZGllbnQiKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxm
bG9hdD4+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxmbG9hdD46OmNy
ZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDAoKS54KCkpOwotICAg
IHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDAoKS55KCkpOwotICAgIGlmIChpc1JhZGlh
bCkKLSAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShncmFkaWVudC5zdGFydFJhZGl1cygpKTsK
LSAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGdyYWRpZW50LnAxKCkueCgpKTsKLSAgICBwYXJhbWV0
ZXJzLT5hZGRJdGVtKGdyYWRpZW50LnAxKCkueSgpKTsKLSAgICBpZiAoaXNSYWRpYWwpCi0gICAg
ICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQuZW5kUmFkaXVzKCkpOworICAgIFdURjo6
c3dpdGNoT24oZ3JhZGllbnQuZGF0YSgpLAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBH
cmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLnBvaW50MC54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShk
YXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBv
aW50MS54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55
KCkpOworICAgICAgICB9LAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6
UmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRh
LnBvaW50MC54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50
MC55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnN0YXJ0UmFkaXVz
KTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEueCgpKTsKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEueSgpKTsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5lbmRSYWRpdXMpOworICAgICAgICB9CisgICAg
KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1
ZT4+IHN0b3BzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+Ojpj
cmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGNvbG9yU3RvcCA6
IGdyYWRpZW50LnN0b3BzKCkpIHsKKyAgICBmb3IgKGF1dG8mIGNvbG9yU3RvcCA6IGdyYWRpZW50
LnN0b3BzKCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3RvclZhbHVlPj4gc3RvcCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
clZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oY29sb3JTdG9wLm9mZnNl
dCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGNvbG9yU3RvcC5jb2xvci5j
c3NUZXh0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMzAgKzM2LDE0IEBA
IHVzaW5nIFdURjo6cGFpckludEhhc2g7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGll
bnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkK
LSAgICA6IG1fcmFkaWFsKGZhbHNlKQotICAgICwgbV9wMChwMCkKLSAgICAsIG1fcDEocDEpCi0g
ICAgLCBtX3IwKDApCi0gICAgLCBtX3IxKDApCi0gICAgLCBtX2FzcGVjdFJhdGlvKDEpCi0gICAg
LCBtX3N0b3BzU29ydGVkKGZhbHNlKQotICAgICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9k
UGFkKQotICAgICwgbV9jYWNoZWRIYXNoKDApCitHcmFkaWVudDo6R3JhZGllbnQoTGluZWFyRGF0
YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKICAgICBwbGF0Zm9ybUlu
aXQoKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9h
dCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbykK
LSAgICA6IG1fcmFkaWFsKHRydWUpCi0gICAgLCBtX3AwKHAwKQotICAgICwgbV9wMShwMSkKLSAg
ICAsIG1fcjAocjApCi0gICAgLCBtX3IxKHIxKQotICAgICwgbV9hc3BlY3RSYXRpbyhhc3BlY3RS
YXRpbykKLSAgICAsIG1fc3RvcHNTb3J0ZWQoZmFsc2UpCi0gICAgLCBtX3NwcmVhZE1ldGhvZChT
cHJlYWRNZXRob2RQYWQpCi0gICAgLCBtX2NhY2hlZEhhc2goMCkKK0dyYWRpZW50OjpHcmFkaWVu
dChSYWRpYWxEYXRhJiYgZGF0YSkKKyAgICA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewogICAg
IHBsYXRmb3JtSW5pdCgpOwogfQpAQCAtNjksMzkgKzUzLDYxIEBAIEdyYWRpZW50Ojp+R3JhZGll
bnQoKQogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi12b2lkIEdyYWRpZW50OjphZGp1c3RQ
YXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcpCithdXRvIEdyYWRpZW50Ojp0eXBlKCkgY29u
c3QgLT4gVHlwZQogewotICAgIGlmIChtX3JhZGlhbCkKLSAgICAgICAgcmV0dXJuOworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgW10gKGNvbnN0IExpbmVhckRhdGEm
KSB7CisgICAgICAgICAgICByZXR1cm4gVHlwZTo6TGluZWFyOworICAgICAgICB9LAorICAgICAg
ICBbXSAoY29uc3QgUmFkaWFsRGF0YSYpIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlOjpSYWRp
YWw7CisgICAgICAgIH0KKyAgICApOworfQogCit2b2lkIEdyYWRpZW50OjphZGp1c3RQYXJhbWV0
ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcpCit7CiAgICAgaWYgKHNyY1JlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXNwYWNpbmcuaXNaZXJvKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX3AwLngoKSA9PSBtX3AxLngoKSkgewotICAgICAgICBzaXplLnNl
dFdpZHRoKDEpOwotICAgICAgICBzcmNSZWN0LnNldFdpZHRoKDEpOwotICAgICAgICBzcmNSZWN0
LnNldFgoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fcDAueSgpICE9IG1f
cDEueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplLnNldEhlaWdodCgxKTsKLSAgICBz
cmNSZWN0LnNldEhlaWdodCgxKTsKLSAgICBzcmNSZWN0LnNldFkoMCk7CisgICAgV1RGOjpzd2l0
Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAg
ICAgICAgICAgaWYgKGRhdGEucG9pbnQwLngoKSA9PSBkYXRhLnBvaW50MS54KCkpIHsKKyAgICAg
ICAgICAgICAgICBzaXplLnNldFdpZHRoKDEpOworICAgICAgICAgICAgICAgIHNyY1JlY3Quc2V0
V2lkdGgoMSk7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5zZXRYKDApOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhLnBvaW50MC55
KCkgIT0gZGF0YS5wb2ludDEueSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgc2l6ZS5zZXRIZWlnaHQoMSk7CisgICAgICAgICAgICBzcmNSZWN0LnNldEhlaWdodCgx
KTsKKyAgICAgICAgICAgIHNyY1JlY3Quc2V0WSgwKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10g
KGNvbnN0IFJhZGlhbERhdGEmKSB7CisgICAgICAgIH0KKyAgICApOworfQorCitib29sIEdyYWRp
ZW50Ojppc1plcm9TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2Rh
dGEsCisgICAgICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZGF0YS5wb2ludDAueCgpID09IGRhdGEucG9pbnQxLngoKSAmJiBkYXRhLnBvaW50MC55
KCkgPT0gZGF0YS5wb2ludDEueSgpOworICAgICAgICB9LAorICAgICAgICBbXSAoY29uc3QgUmFk
aWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEucG9pbnQwLngoKSA9PSBk
YXRhLnBvaW50MS54KCkgJiYgZGF0YS5wb2ludDAueSgpID09IGRhdGEucG9pbnQxLnkoKSAmJiBk
YXRhLnN0YXJ0UmFkaXVzID09IGRhdGEuZW5kUmFkaXVzOworICAgICAgICB9CisgICAgKTsKIH0K
IAogdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIG1fc3RvcHMuYXBwZW5kKENvbG9yU3RvcChvZmZzZXQsIGNvbG9yKSk7
Ci0KLSAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7Ci0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci0K
LSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIGFkZENvbG9yU3RvcCh7IG9mZnNldCwgY29sb3Ig
fSk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWVudDo6Q29s
b3JTdG9wJiBzdG9wKQpAQCAtMTA5LDggKzExNSwxOCBAQCB2b2lkIEdyYWRpZW50OjphZGRDb2xv
clN0b3AoY29uc3QgR3JhZGllCiAgICAgbV9zdG9wcy5hcHBlbmQoc3RvcCk7CiAKICAgICBtX3N0
b3BzU29ydGVkID0gZmFsc2U7CisKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKKyAgICBpbnZhbGlk
YXRlSGFzaCgpOworfQorCit2b2lkIEdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3BzKENvbG9y
U3RvcFZlY3RvciYmIHN0b3BzKQoreworICAgIG1fc3RvcHMgPSBXVEZNb3ZlKHN0b3BzKTsKIAor
ICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOworCisgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAgICAg
aW52YWxpZGF0ZUhhc2goKTsKIH0KIApAQCAtMTMwLDcgKzE0Niw2IEBAIHZvaWQgR3JhZGllbnQ6
OnNvcnRTdG9wc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RkOjpzdGFi
bGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wcyk7Ci0K
ICAgICBpbnZhbGlkYXRlSGFzaCgpOwogfQogCkBAIC0xNzMsMTQgKzE4OCwxNCBAQCB1bnNpZ25l
ZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CiAK
ICAgICBzdHJ1Y3QgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uOwotICAgICAgICBGbG9hdFBvaW50IHAwOwotICAgICAgICBGbG9hdFBvaW50IHAx
OwotICAgICAgICBmbG9hdCByMDsKLSAgICAgICAgZmxvYXQgcjE7CisgICAgICAgIFR5cGUgdHlw
ZTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQx
OworICAgICAgICBmbG9hdCBzdGFydFJhZGl1czsKKyAgICAgICAgZmxvYXQgZW5kUmFkaXVzOwog
ICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsKICAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qg
c3ByZWFkTWV0aG9kOwotICAgICAgICBib29sIHJhZGlhbDsKKyAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICB9IHBhcmFtZXRlcnM7CiAKICAg
ICAvLyBTdHJpbmdIYXNoZXIgcmVxdWlyZXMgdGhhdCB0aGUgbWVtb3J5IGl0IGhhc2hlcyBiZSBh
IG11bHRpcGxlIG9mIHR3byBpbiBzaXplLgpAQCAtMTkwLDE0ICsyMDUsMjcgQEAgdW5zaWduZWQg
R3JhZGllbnQ6Omhhc2goKSBjb25zdAogICAgIC8vIEVuc3VyZSB0aGF0IGFueSBwYWRkaW5nIGlu
IHRoZSBzdHJ1Y3QgaXMgemVyby1maWxsZWQsIHNvIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgaGFz
aCB2YWx1ZS4KICAgICBtZW1zZXQoJnBhcmFtZXRlcnMsIDAsIHNpemVvZihwYXJhbWV0ZXJzKSk7
CiAgICAgCi0gICAgcGFyYW1ldGVycy5ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBtX2dy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBwYXJhbWV0ZXJzLnAwID0gbV9wMDsKLSAg
ICBwYXJhbWV0ZXJzLnAxID0gbV9wMTsKLSAgICBwYXJhbWV0ZXJzLnIwID0gbV9yMDsKLSAgICBw
YXJhbWV0ZXJzLnIxID0gbV9yMTsKLSAgICBwYXJhbWV0ZXJzLmFzcGVjdFJhdGlvID0gbV9hc3Bl
Y3RSYXRpbzsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZwYXJhbWV0ZXJz
XSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1ldGVycy5wb2lu
dDAgPSBkYXRhLnBvaW50MDsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQxID0gZGF0YS5w
b2ludDE7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFkaXVzID0gMDsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNw
ZWN0UmF0aW8gPSAwOworICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6TGluZWFy
OworICAgICAgICB9LAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBSYWRpYWxEYXRhJiBk
YXRhKSB7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50MTsKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMuc3RhcnRSYWRpdXMgPSBkYXRhLnN0YXJ0UmFkaXVzOworICAgICAgICAgICAgcGFy
YW1ldGVycy5lbmRSYWRpdXMgPSBkYXRhLmVuZFJhZGl1czsKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXNwZWN0UmF0aW8gPSBkYXRhLmFzcGVjdFJhdGlvOworICAgICAgICAgICAgcGFyYW1ldGVy
cy50eXBlID0gVHlwZTo6UmFkaWFsOworICAgICAgICB9CisgICAgKTsKKwogICAgIHBhcmFtZXRl
cnMuc3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0gICAgcGFyYW1ldGVycy5yYWRpYWwg
PSBtX3JhZGlhbDsKKyAgICBwYXJhbWV0ZXJzLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiA9
IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogCiAgICAgdW5zaWduZWQgcGFyYW1ldGVy
c0hhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoJnBhcmFtZXRlcnMsIHNpemVvZihwYXJh
bWV0ZXJzKSk7CiAgICAgdW5zaWduZWQgc3RvcEhhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkobV9zdG9wcy5kYXRhKCksIG1fc3RvcHMuc2l6ZSgpICogc2l6ZW9mKENvbG9yU3RvcCkpOwpA
QCAtMjA3LDQgKzIzNSw0IEBAIHVuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCi19IC8vbmFtZXNwYWNlCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDIyNDczNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIzICsyNSwyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBHcmFkaWVudF9oCi0jZGVmaW5lIEdyYWRpZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKICNpZiBVU0UoQ0cpCi0KIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0
UmVmOwotCiB0eXBlZGVmIHN0cnVjdCBDR0dyYWRpZW50KiBDR0dyYWRpZW50UmVmOwogdHlwZWRl
ZiBDR0dyYWRpZW50UmVmIFBsYXRmb3JtR3JhZGllbnQ7Ci0KICNlbGlmIFVTRShESVJFQ1QyRCkK
IGludGVyZmFjZSBJRDJEMUJydXNoOwogaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwpAQCAt
NTUsMTUyICs1MiwxMTYgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDb2xvcjsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7
Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotCi0gICAgY2xhc3MgR3JhZGllbnQgOiBwdWJs
aWMgUmVmQ291bnRlZDxHcmFkaWVudD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJl
ZjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSkKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworCitjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRpZW50PiB7Citw
dWJsaWM6CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBBIGNvbG9yIHN0b3AgbmVlZHMg
YSBub3Rpb24gb2YgY29sb3Igc3BhY2UuCisgICAgc3RydWN0IENvbG9yU3RvcCB7CisgICAgICAg
IGZsb2F0IG9mZnNldCB7IDAgfTsKKyAgICAgICAgQ29sb3IgY29sb3I7CisKKyAgICAgICAgQ29s
b3JTdG9wKCkgPSBkZWZhdWx0OworICAgICAgICBDb2xvclN0b3AoZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCisgICAgICAgICAgICA6IG9mZnNldChvZmZzZXQpCisgICAgICAgICAg
ICAsIGNvbG9yKGNvbG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBHcmFkaWVudChwMCwgcDEpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVmPEdy
YWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvID0gMSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQocDAsIHIwLCBwMSwgcjEs
IGFzcGVjdFJhdGlvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYWRp
ZW50KCk7Ci0KLSAgICAgICAgc3RydWN0IENvbG9yU3RvcDsKLSAgICAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7Ci0gICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBDb2xvciYpOworICAgIH07CiAK
LSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIHVzaW5nIENvbG9yU3RvcFZlY3Rv
ciA9IFZlY3RvcjxDb2xvclN0b3AsIDI+OwogCi0gICAgICAgIGJvb2wgaXNSYWRpYWwoKSBjb25z
dCB7IHJldHVybiBtX3JhZGlhbDsgfQotICAgICAgICBib29sIGlzWmVyb1NpemUoKSBjb25zdCB7
IHJldHVybiBtX3AwLngoKSA9PSBtX3AxLngoKSAmJiBtX3AwLnkoKSA9PSBtX3AxLnkoKSAmJiAo
IW1fcmFkaWFsIHx8IG1fcjAgPT0gbV9yMSk7IH0KKyAgICBzdHJ1Y3QgTGluZWFyRGF0YSB7Cisg
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAg
ICB9OwogCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAwKCkgY29uc3QgeyByZXR1cm4gbV9w
MDsgfQotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSgpIGNvbnN0IHsgcmV0dXJuIG1fcDE7
IH0KKyAgICBzdHJ1Y3QgUmFkaWFsRGF0YSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOwor
ICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXM7Cisg
ICAgICAgIGZsb2F0IGVuZFJhZGl1czsKKyAgICAgICAgZmxvYXQgYXNwZWN0UmF0aW87IC8vIEZv
ciBlbGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KKyAgICB9OwogCi0gICAgICAg
IHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYgcCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1fcDAgPT0gcCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fcDAgPSBwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnZhbGlkYXRl
SGFzaCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEZs
b2F0UG9pbnQmIHApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3AxID09IHApCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3AxID0gcDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaW52YWxpZGF0ZUhhc2goKTsKLSAgICAgICAgfQor
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIExpbmVhciwKKyAgICAgICAgUmFkaWFsCisg
ICAgfTsKIAotICAgICAgICBmbG9hdCBzdGFydFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fcjA7
IH0KLSAgICAgICAgZmxvYXQgZW5kUmFkaXVzKCkgY29uc3QgeyByZXR1cm4gbV9yMTsgfQorICAg
IHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShMaW5lYXJEYXRhJiYgZGF0YSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdURk1vdmUoZGF0YSkpKTsKKyAg
ICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdGFydFJhZGl1cyhmbG9hdCByKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9yMCA9PSByKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBz
dGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoUmFkaWFsRGF0YSYmIGRhdGEpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7CisgICAg
fQogCi0gICAgICAgICAgICBtX3IwID0gcjsKKyAgICBXRUJDT1JFX0VYUE9SVCB+R3JhZGllbnQo
KTsKIAotICAgICAgICAgICAgaW52YWxpZGF0ZUhhc2goKTsKLSAgICAgICAgfQorICAgIFR5cGUg
dHlwZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0RW5kUmFkaXVzKGZsb2F0IHIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX3IxID09IHIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKKyAgICBib29sIGlzWmVyb1NpemUoKSBjb25z
dDsKIAotICAgICAgICAgICAgbV9yMSA9IHI7CisgICAgY29uc3QgVmFyaWFudDxMaW5lYXJEYXRh
LCBSYWRpYWxEYXRhPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAgICAg
ICAgICBpbnZhbGlkYXRlSGFzaCgpOwotICAgICAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRDb2xvclN0b3AoZmxvYXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRTb3J0ZWRD
b2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYmKTsKIAotICAgICAgICBmbG9hdCBhc3BlY3RSYXRp
bygpIGNvbnN0IHsgcmV0dXJuIG1fYXNwZWN0UmF0aW87IH0KKyAgICBjb25zdCBDb2xvclN0b3BW
ZWN0b3ImIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQogCi0jaWYgVVNFKFdJTkdE
SSkKLSAgICAgICAgY29uc3QgVmVjdG9yPENvbG9yU3RvcCwgMj4mIGdldFN0b3BzKCkgY29uc3Q7
Ci0jZWxzZQotICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3JtR3JhZGllbnQoKTsKLSNl
bmRpZgorICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKKyAg
ICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3Nw
cmVhZE1ldGhvZDsgfQogCi0gICAgICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gQSBjb2xv
ciBzdG9wIG5lZWRzIGEgbm90aW9uIG9mIGNvbG9yIHNwYWNlLgotICAgICAgICBzdHJ1Y3QgQ29s
b3JTdG9wIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCB7IDAgfTsKLSAgICAgICAgICAgIENv
bG9yIGNvbG9yOwotCi0gICAgICAgICAgICBDb2xvclN0b3AoKSB7IH0KLSAgICAgICAgICAgIENv
bG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgICAgICAg
ICA6IG9mZnNldChvZmZzZXQpCi0gICAgICAgICAgICAgICAgLCBjb2xvcihjb2xvcikKLSAgICAg
ICAgICAgICAgICB7IH0KLSAgICAgICAgfTsKLQotICAgICAgICBjb25zdCBWZWN0b3I8Q29sb3JT
dG9wLCAyPiYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzOyB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRTdG9wc1NvcnRlZChib29sIHMpIHsgbV9zdG9wc1NvcnRlZCA9IHM7IH0KLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKLSAg
ICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgeyByZXR1cm4gbV9zcHJl
YWRNZXRob2Q7IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKLSAgICAgICAg
Ly8gUXQgYW5kIENHIHRyYW5zZm9ybSB0aGUgZ3JhZGllbnQgYXQgZHJhdyB0aW1lCi0gICAgICAg
IEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4gbV9ncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KKyAgICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zvcm0g
dGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KKyAgICB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24p
OworICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4g
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAotICAgICAgICB2b2lkIGZpbGwoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZvaWQgYWRqdXN0UGFy
YW1ldGVyc0ZvclRpbGVkRHJhd2luZyhGbG9hdFNpemUmLCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcpOworICAgIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxv
YXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAotICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUhhc2goKSB7
IG1fY2FjaGVkSGFzaCA9IDA7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgdm9p
ZCBpbnZhbGlkYXRlSGFzaCgpIHsgbV9jYWNoZWRIYXNoID0gMDsgfQogCiAjaWYgVVNFKENHKQot
ICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7Ci0gICAgICAgIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2
b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIFBs
YXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVu
ZGVyVGFyZ2V0Kik7CisgICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50
SWZOZWNlc3NhcnkoSUQyRDFSZW5kZXJUYXJnZXQqKTsKICNlbGlmIFVTRShDQUlSTykKLSAgICAg
ICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFs
cGhhKTsKKyAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQg
Z2xvYmFsQWxwaGEpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICBXRUJDT1JFX0VY
UE9SVCBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
OwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0aW8pOwotCi0gICAgICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gbnVsbHB0cjsgfQotICAgICAgICB2
b2lkIHBsYXRmb3JtRGVzdHJveSgpOworcHJpdmF0ZToKKyAgICBHcmFkaWVudChMaW5lYXJEYXRh
JiYpOworICAgIEdyYWRpZW50KFJhZGlhbERhdGEmJik7CisKKyAgICBQbGF0Zm9ybUdyYWRpZW50
IHBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVu
dCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgICAgIHZv
aWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5
KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJ
RDJEMVJlbmRlclRhcmdldCopOworICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRl
clRhcmdldCopOwogI2VuZGlmCiAKLSAgICAgICAgLy8gS2VlcCBhbnkgcGFyYW1ldGVycyByZWxl
dmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRoIHRoZSBzdHJ1Y3R1cmUgaW4gR3JhZGllbnQ6
Omhhc2goKS4KLSAgICAgICAgYm9vbCBtX3JhZGlhbDsKLSAgICAgICAgRmxvYXRQb2ludCBtX3Aw
OwotICAgICAgICBGbG9hdFBvaW50IG1fcDE7Ci0gICAgICAgIGZsb2F0IG1fcjA7Ci0gICAgICAg
IGZsb2F0IG1fcjE7Ci0gICAgICAgIGZsb2F0IG1fYXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRp
Y2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KLSAgICAgICAgbXV0YWJsZSBWZWN0b3I8Q29s
b3JTdG9wLCAyPiBtX3N0b3BzOwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsK
LSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBWYXJpYW50
PExpbmVhckRhdGEsIFJhZGlhbERhdGE+IG1fZGF0YTsKIAotICAgICAgICBtdXRhYmxlIHVuc2ln
bmVkIG1fY2FjaGVkSGFzaDsKKyAgICBtdXRhYmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOwor
ICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKKyAgICBHcmFkaWVudFNw
cmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7IFNwcmVhZE1ldGhvZFBhZCB9OworICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKIAotICAgICAgICBQbGF0
Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7Ci0gICAgfTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
Y2FjaGVkSGFzaCB7IDAgfTsKIAotfSAvL25hbWVzcGFjZQorICAgIFBsYXRmb3JtR3JhZGllbnQg
bV9ncmFkaWVudDsKK307CiAKLSNlbmRpZgorfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMjQ3
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzAsNyArODcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ3Jh
ZGllbnQuZmlsbCh0aGlzLCByZWN0KTsKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyMjQ3MzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDE0IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVz
dHJveSgpCiAKIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGll
bnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudDsK
LSAgICBpZiAobV9yYWRpYWwpCi0gICAgICAgIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVh
dGVfcmFkaWFsKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9yMCwgbV9wMS54KCksIG1fcDEueSgpLCBt
X3IxKTsKLSAgICBlbHNlCi0gICAgICAgIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVf
bGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54KCksIG1fcDEueSgpKTsKKyAgICBjYWly
b19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsm
XSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAg
ICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwg
ZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSk7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0
dGVybl90KiB7CisgICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFs
KGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRh
LnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICB9
CisgICAgKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAg
ICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRlZCgpKSB7CkBAIC03NywxOCArODAsMTggQEAgY2Fp
cm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZvcgogICAgIHJldHVybiBncmFkaWVu
dDsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgUmVmUHRyPGNhaXJvX3Bh
dHRlcm5fdD4gZ3JhZGllbnQgPSBhZG9wdFJlZihjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEuMCkp
OwogCi0gICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQuc2F2ZSgpOwogCi0gICAgY2Fp
cm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb190
KiBjciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fc2V0X3Nv
dXJjZShjciwgZ3JhZGllbnQuZ2V0KCkpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIGNhaXJvX2Zp
bGwoY3IpOwogCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkocmV2aXNpb24gMjI0NzM2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9p
ZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICBDR0dyYWRpZW50UmVsZWFzZSht
X2dyYWRpZW50KTsKLSAgICBtX2dyYWRpZW50ID0gMDsKKyAgICBtX2dyYWRpZW50ID0gbnVsbHB0
cjsKIH0KIAogQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCkBAIC05
Miw0MyArOTIsNDUgQEAgQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudAog
ICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGNvbnRleHQuY2xpcChyZWN0KTsKICAgICBw
YWludChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFkaWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQordm9pZCBHcmFkaWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogewotICAgIENHQ29udGV4dFJlZiBjdHggPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBwYWludChjdHgpOworICAgIHBhaW50KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCi12b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgR3Jh
ZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAgICAgQ0dHcmFk
aWVudERyYXdpbmdPcHRpb25zIGV4dGVuZE9wdGlvbnMgPSBrQ0dHcmFkaWVudERyYXdzQmVmb3Jl
U3RhcnRMb2NhdGlvbiB8IGtDR0dyYWRpZW50RHJhd3NBZnRlckVuZExvY2F0aW9uOwotICAgIGlm
ICghbV9yYWRpYWwpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KGNvbnRl
eHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgbV9wMCwgbV9wMSwgZXh0ZW5kT3B0aW9ucyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRTY2FsaW5nID0gYXNwZWN0UmF0aW8o
KSAhPSAxOwotICAgIGlmIChuZWVkU2NhbGluZykgewotICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwotICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdy
YWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAotICAg
ICAgICAvLyBmb3Igd2hpY2ggbV9wMCA9PSBtX3AxLgotICAgICAgICBBU1NFUlQobV9wMCA9PSBt
X3AxKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIG1fcDAueCgpLCBt
X3AwLnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIDEgLyBhc3Bl
Y3RSYXRpbygpKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1tX3Aw
LngoKSwgLW1fcDAueSgpKTsKLSAgICB9CiAKLSAgICBDR0NvbnRleHREcmF3UmFkaWFsR3JhZGll
bnQoY29udGV4dCwgcGxhdGZvcm1HcmFkaWVudCgpLCBtX3AwLCBtX3IwLCBtX3AxLCBtX3IxLCBl
eHRlbmRPcHRpb25zKTsKLQotICAgIGlmIChuZWVkU2NhbGluZykKLSAgICAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAg
ICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBDR0NvbnRleHRE
cmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBwbGF0Zm9ybUdyYWRpZW50KCksIGRh
dGEucG9pbnQwLCBkYXRhLnBvaW50MSwgZXh0ZW5kT3B0aW9ucyk7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgYm9vbCBuZWVk
U2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKKyAgICAgICAgICAgIGlmIChuZWVkU2Nh
bGluZykgeworICAgICAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUocGxhdGZvcm1Db250
ZXh0KTsKKyAgICAgICAgICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdy
YWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAorICAg
ICAgICAgICAgICAgIC8vIGZvciB3aGljaCBwb2ludDAgPT0gcG9pbnQxLgorICAgICAgICAgICAg
ICAgIEFTU0VSVChkYXRhLnBvaW50MCA9PSBkYXRhLnBvaW50MSk7CisgICAgICAgICAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgZGF0YS5wb2ludDAueCgpLCBk
YXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRm
b3JtQ29udGV4dCwgMSwgMSAvIGRhdGEuYXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1kYXRhLnBvaW50MC54KCksIC1k
YXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDR0NvbnRleHRE
cmF3UmFkaWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBwbGF0Zm9ybUdyYWRpZW50KCksIGRh
dGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMs
IGV4dGVuZE9wdGlvbnMpOworCisgICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpCisgICAgICAg
ICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOworICAgICAg
ICB9CisgICAgKTsKIH0KIAotfSAvL25hbWVzcGFjZQorfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzc3
LDcgKzc3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwog
Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAg
ICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0
cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5z
dHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTMyMyw3ICsxMzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRgogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQtPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjI0NzM2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2MiArNzgsNzggQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJE
MVJlbgogICAgICAgICBtX2dyYWRpZW50ID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAobV9y
YWRpYWwpIHsKLSAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IHAxKCkgLSBwMCgpOwotICAgICAg
ICBJRDJEMVJhZGlhbEdyYWRpZW50QnJ1c2gqIHJhZGlhbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAg
ICAgICAgZmxvYXQgcmFkaXVzWCA9IGVuZFJhZGl1cygpICsgb2Zmc2V0LndpZHRoKCk7Ci0gICAg
ICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gbV9hc3BlY3RSYXRpbzsKLSAgICAgICAgaHIg
PSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICBE
MkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhwMCgpLCBEMkQxOjpQb2ludDJGKG9m
ZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCByYWRpdXNZKSwKLSAgICAg
ICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdl
dCgpLAotICAgICAgICAgICAgJnJhZGlhbEdyYWRpZW50KTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1fZ3JhZGllbnQgPSByYWRpYWxHcmFkaWVudDsK
LSAgICB9IGVsc2UgewotICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxpbmVhckdy
YWRpZW50ID0gbnVsbHB0cjsKLSAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUxpbmVh
ckdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICBEMkQxOjpMaW5lYXJHcmFkaWVudEJydXNoUHJv
cGVydGllcyhwMCgpLCBwMSgpKSwKLSAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygp
LCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAgICAgICAgJmxpbmVhckdyYWRp
ZW50KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1f
Z3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKLSAgICB9CisgICAgV1RGOjpzd2l0Y2hPbihtX2Rh
dGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAg
SUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5lYXJHcmFkaWVudCA9IG51bGxwdHI7CisgICAg
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlTGluZWFyR3JhZGllbnRCcnVzaCgKKyAg
ICAgICAgICAgICAgICBEMkQxOjpMaW5lYXJHcmFkaWVudEJydXNoUHJvcGVydGllcyhkYXRhLnBv
aW50MCwgZGF0YS5wb2ludDEpLAorICAgICAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGll
cygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAorICAgICAgICAgICAgICAgICZsaW5l
YXJHcmFkaWVudCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
KyAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBGbG9hdFNp
emUgb2Zmc2V0ID0gZGF0YS5wb2ludDEgLSBkYXRhLnBvaW50MDsKKyAgICAgICAgICAgIElEMkQx
UmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOworICAgICAgICAg
ICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFkaXVzICsgb2Zmc2V0LndpZHRoKCk7CisgICAg
ICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87CisgICAg
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFkaWFsR3JhZGllbnRCcnVzaCgKKyAg
ICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhwMCgpLCBE
MkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCBy
YWRpdXNZKSwKKyAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGll
bnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKKyAgICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgICAg
ICBtX2dyYWRpZW50ID0gcmFkaWFsR3JhZGllbnQ7CisgICAgICAgIH0KKyAgICApOwogCiAgICAg
aGFzaCgpOwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhdXRvIGQyZENv
bnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGJvb2wgbmVlZFNjYWxp
bmcgPSBhc3BlY3RSYXRpbygpICE9IDE7Ci0gICAgaWYgKG5lZWRTY2FsaW5nKSB7Ci0gICAgICAg
IGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgLy8gU2NhbGUgZnJvbSB0aGUgY2VudGVyIG9mIHRo
ZSBncmFkaWVudC4gV2Ugb25seSBldmVyIHNjYWxlIG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cywK
LSAgICAgICAgLy8gZm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KLSAgICAgICAgQVNTRVJUKG1fcDAg
PT0gbV9wMSk7Ci0KLSAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtID0geyB9OwotICAgICAg
ICBkMmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybShjdG0pOwotICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1fcDApOwot
ICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwgMS4wIC8gYXNwZWN0UmF0aW8o
KSk7Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLW1fcDApOwotCi0gICAgICAgIGQyZENv
bnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgIH0KLQotICAgIGlmICghbV9jYWNoZWRIYXNo
IHx8ICFtX2dyYWRpZW50KQotICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwot
Ci0gICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7Ci0K
LSAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICBkMmRDb250ZXh0LT5G
aWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAgICBhdXRvIGQyZENvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG5lZWRTY2FsaW5nKQotICAg
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAg
ICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgaWYgKCFtX2Nh
Y2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVHcmFkaWVu
dChkMmRDb250ZXh0KTsKKworICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVO
VF9EUkFXSU5HLCBfX0xJTkVfXyk7CisKKyAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJk
UmVjdCwgbV9ncmFkaWVudCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFs
RGF0YSYgZGF0YSkgeworICAgICAgICAgICAgYm9vbCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0
UmF0aW8gIT0gMTsKKyAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAgICAgIC8vIFNjYWxlIGZyb20gdGhlIGNl
bnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZlciBzY2FsZSBub24tZGVwcmVjYXRlZCBn
cmFkaWVudHMsCisgICAgICAgICAgICAgICAgLy8gZm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KKyAg
ICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5wb2ludDAgPT0gZGF0YS5wb2ludDEpOworCisgICAg
ICAgICAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtID0geyB9OworICAgICAgICAgICAgICAg
IGQyZENvbnRleHQtPkdldFRyYW5zZm9ybSgmY3RtKTsKKworICAgICAgICAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKGRhdGEucG9pbnQwKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25V
bmlmb3JtKDEuMCwgMS4wIC8gZGF0YS5hc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtZGF0YS5wb2ludDApOworCisgICAgICAgICAgICAgICAgZDJkQ29u
dGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQorICAgICAgICAgICAgICAgIGdlbmVyYXRl
R3JhZGllbnQoZDJkQ29udGV4dCk7CisKKyAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRhZ3Mo
R1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOworCisgICAgICAgICAgICBjb25zdCBEMkQxX1JF
Q1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5n
bGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOworCisgICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcp
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICApOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
CShyZXZpc2lvbiAyMjQ3MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShT
b2xpZFN0cm9rZSk7CiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
ID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9r
ZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNh
bFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJp
bmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOworICAgIFJlZlB0cjxHcmFkaWVu
dD4gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRh
IHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0
UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0Jhckhl
aWdodCAtIDEpIH0pOwogICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xv
cigweDhkLCAweDhkLCAweDhkKSk7CiAgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjQ1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CiAgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjU1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CkBAIC05MTcsNyArOTE3LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgIHBhaW50SW5m
by5jb250ZXh0KCkuY2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoYm9yZGVyLCByb3Vu
ZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVz
LCByb3VuZGVkQ29ybmVyUmFkaXVzKSk7CiAKICAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0
ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IHVwcGVyR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkpOworICAgIFJlZlB0cjxH
cmFkaWVudD4gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OlJhZGlh
bERhdGEgeyBMaW5lYXJEYXRhKHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsg
MC41KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHVw
cGVyR3JhZGllbnRIZWlnaHQgLSAxLjUpIH0pOwogICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjAsIENvbG9yKDEzMywgMTMzLCAxMzMsIDE4OCkpOwogICAgIHVwcGVyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDE4LCAxOCwgMTgsIDUxKSk7CiAgICAgY29udGV4dC5z
ZXRGaWxsR3JhZGllbnQodXBwZXJHcmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTkyOSw3
ICs5MjksNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAg
ICAgIC8vIDIpIERyYXcgdGhlIHByb2dyZXNzIGJhci4KICAgICAgICAgZG91YmxlIHBvc2l0aW9u
ID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7CiAgICAgICAg
IGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwotICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxvYXRQb2ludChyZWN0
LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkp
OworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKICAgICAgICAgYmFyR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDE5NSwgMjE3LCAyNDcpKTsKICAgICAgICAg
YmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7CiAg
ICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40OSwgQ29sb3IoMTE4LCAxNjQsIDIy
OCkpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jl
c3NCYXIoY28KICAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDU3
LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudChiYXJHcmFkaWVu
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIAotICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhclN0cm9r
ZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNh
bFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJp
bmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOworICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGlu
ZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSB9KTsKICAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjAsIENvbG9yKDk1LCAxMDcsIDE4MykpOwogICAgICAgICBiYXJTdHJva2VHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuNSwgQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApKTsKICAgICAgICAg
YmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDM4LCAxMDQsIDE2Nikp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCShyZXZpc2lvbiAyMjQ3MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIEZsb2F0UG9pbnQg
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWUKIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50OjpidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhKSBj
b25zdAogewotICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0
YXJ0UG9pbnQobV9hdHRyaWJ1dGVzKSwgZW5kUG9pbnQobV9hdHRyaWJ1dGVzKSk7CisgICAgZ3Jh
ZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRh
dGEgeyBzdGFydFBvaW50KG1fYXR0cmlidXRlcyksIGVuZFBvaW50KG1fYXR0cmlidXRlcykgfSk7
CiAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKHBsYXRmb3JtU3By
ZWFkTWV0aG9kRnJvbVNWR1R5cGUobV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKSk7CiAgICAg
YWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2Myw3IEBAIGZsb2F0IFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQ6OmYKIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50OjpidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhKSBjb25zdAogewot
ICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHRoaXMtPmZvY2Fs
UG9pbnQobV9hdHRyaWJ1dGVzKSwKLSAgICAgICAgdGhpcy0+Zm9jYWxSYWRpdXMobV9hdHRyaWJ1
dGVzKSwKLSAgICAgICAgdGhpcy0+Y2VudGVyUG9pbnQobV9hdHRyaWJ1dGVzKSwKLSAgICAgICAg
dGhpcy0+cmFkaXVzKG1fYXR0cmlidXRlcykpOwotCisgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OlJhZGlhbERhdGEgeyB0aGlzLT5mb2NhbFBv
aW50KG1fYXR0cmlidXRlcyksIHRoaXMtPmNlbnRlclBvaW50KG1fYXR0cmlidXRlcyksIHRoaXMt
PmZvY2FsUmFkaXVzKG1fYXR0cmlidXRlcyksIHRoaXMtPnJhZGl1cyhtX2F0dHJpYnV0ZXMpLCAx
IH0pOwogICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChwbGF0Zm9y
bVNwcmVhZE1ldGhvZEZyb21TVkdUeXBlKG1fYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSkpOwog
CiAgICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326723</attachid>
            <date>2017-11-12 11:41:35 -0800</date>
            <delta_ts>2017-11-19 13:54:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179595-20171112114134.patch</filename>
            <type>text/plain</type>
            <size>57223</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBAQAorMjAxNy0xMS0xMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENsZWFuIHVwIGdyYWRpZW50IGNvZGUg
aW4gcHJlcGFyYXRpb24gZm9yIGNvbmljIGdyYWRpZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBTd2l0Y2hlcyBHcmFkaWVudCB0byB1c2UgYSBW
YXJpZW50IHdpdGggdHlwZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHMgYW5kIG1ha2VzIHRoZSAKKyAg
ICAgICAgICBwb2ludHMgLyByYWRpaSBpbW11dGFibGUuCisgICAgICAgIC0gUmVwbGFjZXMgQ1NT
R3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMgd2l0aCB0ZW1wbGF0ZSBmdW5jdGlvbiBDU1NHcmFkaWVu
dFZhbHVlOjpjb21wdXRlU3RvcHMKKyAgICAgICAgICB3aGljaCBkaXNwYXRjaGVzIHRvIGEgaGVs
cGVyIGFkb3B0b3Igc3RydWN0IHdoaWNoIGlzIHBhc3NlZCBpbiBmb3IgZ3JhZGllbnQgdHlwZSBz
cGVjaWZpYworICAgICAgICAgIHZhbHVlcywgcmF0aGVyIHRoYW4gc3dpdGNoaW5nIG9uIHR5cGUg
aW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gSW4gYWRkaXRpb24sIHRoZSBmdW5jdGlvbiBubworICAg
ICAgICAgIGxvbmdlciBtdXRhdGVzIGEgR3JhZGllbnQsIGJ1dCByYXRoZXIgbXV0YXRlcyB0eXBl
IHNwZWNpZmljIHRoZSBkYXRhIHN0cnVjdCAoZS5nLiBMaW5lYXIgb3IKKyAgICAgICAgICBSYWRp
YWwgZm9yIG5vdykuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lYXJHcmFkaWVudEFkYXB0b3I6OkxpbmVhckdyYWRpZW50QWRhcHRv
cik6CisgICAgICAgIChXZWJDb3JlOjpSYWRpYWxHcmFkaWVudEFkYXB0b3I6OlJhZGlhbEdyYWRp
ZW50QWRhcHRvcik6CisKKyAgICAgICAgICAgIEFkZCBoZWxwZXIgc3RydWN0cyBmb3IgdGhlIG5v
dyB0ZW1wbGF0aXplZCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMgdGhhdAorICAgICAg
ICAgICAgaW1wbGVtZW50IHR5cGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAo
V2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKToKKyAgICAgICAgCisgICAg
ICAgICAgICBSZW5hbWVkIGZyb20gYWRkU3RvcHMuIE5vdyB0YWtlcyBhIEdyYWRpZW50QWRhcHRv
ciB3cmFwcGVyIHdoaWNoIGFic3RyYWN0cyBvdXQKKyAgICAgICAgICAgIHRoZSBncmFkaWVudCB0
eXBlIHNwZWNpZmljIGZ1bmN0aW9ubGl0eS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpD
U1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KToKKyAgICAgICAgCisg
ICAgICAgICAgICBVcGRhdGUgdG8gY2FsbCBjb21wdXRlU3RvcHMgYW5kIHVzZSBuZXcgR3JhZGll
bnQgY3JlYXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUg
Zm9yIGNvbXB1dGVTdG9wcy4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OkNhbnZhc0dy
YWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBHcmFkaWVu
dCBjcmVhdGUgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFy
cmF5Rm9yQ2FudmFzR3JhZGllbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBn
ZXQgZ3JhZGllbnQgcG9pbnQgLyByYWRpaSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhIGFjY2Vz
c29yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6OkdyYWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBV
cGRhdGUgY29uc3RydWN0b3JzIHRvIHRoZSBuZXcgZGF0YSBzdHJ1Y3RzLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojp0eXBlIGNvbnN0KToKKyAgICAgICAgCisgICAgICAg
ICAgICBBZGQgaGVscGVyIHRvIGdldCB0aGUgdHlwZSBvZiB0aGUgdmFyaWVudCwgbmVlZCBmb3Ig
aW5zcGVjdG9yIGNvZGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFk
anVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OmlzWmVyb1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc2gg
Y29uc3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBzd2l0Y2ggb24gdGhlIHVu
ZGVybHlpbmcgdmFyaWFudCB0byBnZXQgZGF0YSB2YWx1ZXMuCisgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6CisgICAgICAgIAorICAgICAgICAgICAg
U2ltcGxpZnkgYnkgaGF2aW5nIG9uZSBhZGRDb2xvclN0b3AgY2FsbCB0aGUgb3RoZXIuCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3Bz
KToKKyAgICAgICAgCisgICAgICAgICAgICBBZGRlZC4gUmVwbGFjZXMgc2V0U3RvcHNTb3J0ZWQu
IFVzZWQgbm93IHRoYXQgQ1NTR3JhZGllbnRWYWx1ZSBjb21wdXRlcyBhbmQgc29ydHMKKyAgICAg
ICAgICAgIGl0cyBjb2xvciBzdG9wcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGdyYWRpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpjcmVhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlcGxhY2UgY3JlYXRl
IGZ1bmN0aW9ucyB3aXRoIG9uZXMgdGhhdCB0YWtlIGRhdGEgc3RydWN0cy4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZGF0YSBjb25zdCk6CisKKyAgICAgICAgICAgIEFk
ZCBhY2Nlc3NvciBmb3IgdGhlIHVuZGVybHlpbmcgdmFyaWFudC4KKworICAgICAgICAoV2ViQ29y
ZTo6R3JhZGllbnQ6OmlzUmFkaWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgCisgICAgICAg
ICAgICBSZXBsYWNlZCBieSB0eXBlIGFjY2Vzc29yLgorICAgICAgICAKKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpwMCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFk
aWVudDo6cDEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNl
dFAwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c3RhcnRSYWRpdXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmVuZFJhZGl1cyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U3RhcnRSYWRpdXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEVuZFJhZGl1cyk6IERlbGV0ZWQuCisg
ICAgICAgIAorICAgICAgICAgICAgUG9pbnQgYW5kIHJhZGlpIGFyZSBub3cgaW1tdXRhYmxlLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTdG9wc1NvcnRlZCk6IERl
bGV0ZWQuCisgICAgICAgIAorICAgICAgICAgICAgUmVwbGFjZWQgYnkgc2V0U29ydGVkQ29sb3JT
dG9wcyBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNzQ29udGV4dCBi
eSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBs
YXRmb3JtR3JhZGllbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8gc3dpdGNoIG9uIHRoZSB1
bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisgICAgICAgIChXZWJDb3Jl
OjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0aGUgR3JhcGhp
Y3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxh
dGZvcm1EZXN0cm95KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgbnVsbHB0ci4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAg
ICAgICAgUGFzcyB0aGUgR3JhcGhpY3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGFpbnQpOgorCisgICAgICAgICAgICBVcGRhdGUg
dG8gc3dpdGNoIG9uIHRoZSB1bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBo
aWNzQ29udGV4dCBieSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpnZW5lcmF0ZUdyYWRpZW50KToKKworICAgICAgICAgICAgVXBkYXRlIHRvIHN3aXRjaCBv
biB0aGUgdW5kZXJseWluZyB2YXJpYW50IHRvIGdldCBkYXRhIHZhbHVlcy4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgCisgICAgICAgICAgICBQYXNz
IHRoZSBHcmFwaGljc0NvbnRleHQgYnkgcmVmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyYWRp
ZW50IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBHcmFkaWVu
dCBjcmVhdGUgZnVuY3Rpb24gc2lnbmF0dXJlLgorCiAyMDE3LTExLTEyICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtXZWJDb3JlXSBJbXBsZW1lbnQg
aW1wb3J0Lm1ldGEudXJsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
Y3BwCShyZXZpc2lvbiAyMjQ3MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw1NyArMTM1LDE0OSBAQCBzdGF0aWMgaW5s
aW5lIENvbG9yIGludGVycG9sYXRlKGNvbnN0IENvCiAgICAgcmV0dXJuIENvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKIH0KIAotdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhH
cmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpCitzdHJ1Y3QgTGluZWFyR3JhZGll
bnRBZGFwdG9yIHsKKyAgICBMaW5lYXJHcmFkaWVudEFkYXB0b3IoR3JhZGllbnQ6OkxpbmVhckRh
dGEmIGRhdGEpCisgICAgICAgIDogZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IHN0YXJ0UG9pbnQoKSBjb25zdCB7IHJldHVybiBkYXRhLnBvaW50MDsgfQorICAgIEZs
b2F0UG9pbnQgZW5kUG9pbnQoKSBjb25zdCB7IHJldHVybiBkYXRhLnBvaW50MTsgfQorICAgIGZs
b2F0IG1heEV4dGVudChmbG9hdCwgZmxvYXQpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKworICAgIHZv
aWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UoVmVjdG9yPEdyYWRpZW50
U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wcy5m
aXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzLmxhc3QoKS5v
ZmZzZXQ7CisgICAgICAgIGlmIChmaXJzdE9mZnNldCAhPSBsYXN0T2Zmc2V0KSB7CisgICAgICAg
ICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKKworICAgICAgICAg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQg
PSAoc3RvcC5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKKworICAgICAgICAgICAgYXV0
byBwMCA9IGRhdGEucG9pbnQwOworICAgICAgICAgICAgYXV0byBwMSA9IGRhdGEucG9pbnQxOwor
ICAgICAgICAgICAgZGF0YS5wb2ludDAgPSBGbG9hdFBvaW50KHAwLngoKSArIGZpcnN0T2Zmc2V0
ICogKHAxLngoKSAtIHAwLngoKSksIHAwLnkoKSArIGZpcnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAw
LnkoKSkpOworICAgICAgICAgICAgZGF0YS5wb2ludDEgPSBGbG9hdFBvaW50KHAxLngoKSArIChs
YXN0T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEueSgpICsgKGxhc3RPZmZzZXQg
LSAxKSAqIChwMS55KCkgLSBwMC55KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIFRoZXJlJ3MgYSBzaW5nbGUgcG9zaXRpb24gdGhhdCBpcyBvdXRzaWRlIHRoZSBzY2FsZSwg
Y2xhbXAgdGhlIHBvc2l0aW9ucyB0byAxLgorICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDog
c3RvcHMpCisgICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAxOworICAgICAgICB9CisgICAg
fQorCisgICAgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGE7Cit9OworCitzdHJ1Y3QgUmFkaWFs
R3JhZGllbnRBZGFwdG9yIHsKKyAgICBSYWRpYWxHcmFkaWVudEFkYXB0b3IoR3JhZGllbnQ6OlJh
ZGlhbERhdGEmIGRhdGEpCisgICAgICAgIDogZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAg
ICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoKSB7IHJldHVybiBkYXRhLnBvaW50MDsgfQorICAgIEZs
b2F0UG9pbnQgZW5kUG9pbnQoKSB7IHJldHVybiBkYXRhLnBvaW50MCArIEZsb2F0U2l6ZShkYXRh
LmVuZFJhZGl1cywgMCk7IH0KKworICAgIC8vIFJhZGlhbCBncmFkaWVudHMgbWF5IG5lZWQgdG8g
ZXh0ZW5kIGZ1cnRoZXIgdGhhbiB0aGUgZW5kcG9pbnRzLCBiZWNhdXNlIHRoZXkgaGF2ZQorICAg
IC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KKyAgICBmbG9hdCBt
YXhFeHRlbnQoZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0LCBmbG9hdCBncmFkaWVudExlbmd0aCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtYXhMZW5ndGhGb3JSZXBlYXQgPiBncmFkaWVudExl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudExlbmd0aCA+IDAgPyBtYXhMZW5ndGhG
b3JSZXBlYXQgLyBncmFkaWVudExlbmd0aCA6IDA7CisgICAgICAgIHJldHVybiAxOworICAgIH0K
KworICAgIHZvaWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UoVmVjdG9y
PEdyYWRpZW50U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAgYXV0byBudW1TdG9wcyA9IHN0
b3BzLnNpemUoKTsKKworICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRoZSBwb2ludHMg
PCAwLCB3ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0byB0aGUgbGFy
Z2VzdCBwb2ludC4KKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAwOworICAgICAgICBmbG9h
dCBsYXN0T2Zmc2V0ID0gc3RvcHMubGFzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgc2NhbGUg
PSBsYXN0T2Zmc2V0IC0gZmlyc3RPZmZzZXQ7CisKKyAgICAgICAgLy8gUmVzZXQgcG9pbnRzIGJl
bG93IDAgdG8gdGhlIGZpcnN0IHZpc2libGUgY29sb3IuCisgICAgICAgIHNpemVfdCBmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bVN0b3BzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPj0g
MCkgeworICAgICAgICAgICAgICAgIGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gaTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlcklu
ZGV4XS5vZmZzZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9IHN0
b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0OworICAgICAgICAgICAgICAg
IGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0
OworCisgICAgICAgICAgICAgICAgZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zm
c2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xv
cnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgIENv
bG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0g
MV0uY29sb3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9w
UHJvcG9ydGlvbik7CisKKyAgICAgICAgICAgICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRv
IDAgYW5kIHNldCB0aGUgY29sb3IuCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IHN0b3BzW2ldLm9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLmNvbG9y
ID0gYmxlbmRlZENvbG9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gQWxsIHN0b3BzIGFyZSBiZWxvdyAwOyBqdXN0IGNsYW1wIHRo
ZW0uCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleDsgKytpKQorICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBzdG9wIDog
c3RvcHMpCisgICAgICAgICAgICBzdG9wLm9mZnNldCAvPSBzY2FsZTsKKworICAgICAgICBkYXRh
LnN0YXJ0UmFkaXVzICo9IHNjYWxlOworICAgICAgICBkYXRhLmVuZFJhZGl1cyAqPSBzY2FsZTsK
KyAgICB9CisKKyAgICBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YTsKK307CisKK3RlbXBsYXRl
PGNsYXNzIEdyYWRpZW50QWRhcHRvcj4KK0dyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3Jh
ZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRvciYgZ3JhZGllbnQsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBmbG9hdCBtYXhMZW5n
dGhGb3JSZXBlYXQpCiB7CiAgICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRM
aW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQpIHsKICAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQoKTsKIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29u
c3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwogCisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6
IG1fc3RvcHMpIHsKICAgICAgICAgICAgIGZsb2F0IG9mZnNldDsKICAgICAgICAgICAgIGlmIChz
dG9wLm1fcG9zaXRpb24tPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIG9mZnNldCA9
IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCA9
IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CiAKLSAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcChvZmZzZXQsIHN0b3AubV9y
ZXNvbHZlZENvbG9yKTsKKyAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBvZmZz
ZXQsIHN0b3AubV9yZXNvbHZlZENvbG9yIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhl
IGJhY2sgZW5kIGFscmVhZHkgc29ydGVkIHRoZSBzdG9wcy4KLSAgICAgICAgZ3JhZGllbnQuc2V0
U3RvcHNTb3J0ZWQodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICBzaXplX3QgbnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsKLQogICAg
IFZlY3RvcjxHcmFkaWVudFN0b3A+IHN0b3BzKG51bVN0b3BzKTsKIAotICAgIGZsb2F0IGdyYWRp
ZW50TGVuZ3RoID0gMDsKLSAgICBib29sIGNvbXB1dGVkR3JhZGllbnRMZW5ndGggPSBmYWxzZTsK
KyAgICBhdXRvIGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC5zdGFydFBvaW50KCk7CisgICAgYXV0
byBncmFkaWVudEVuZCA9IGdyYWRpZW50LmVuZFBvaW50KCk7CiAKLSAgICBGbG9hdFBvaW50IGdy
YWRpZW50U3RhcnQgPSBncmFkaWVudC5wMCgpOwotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7
Ci0gICAgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICBncmFkaWVudEVuZCA9
IGdyYWRpZW50LnAxKCk7Ci0gICAgZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0g
ICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEZsb2F0U2l6ZShncmFkaWVudC5l
bmRSYWRpdXMoKSwgMCk7CisgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0
IC0gZ3JhZGllbnRFbmQpOworICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXpl
LmRpYWdvbmFsTGVuZ3RoKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3Bz
OyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0
b3BzW2ldOworICAgICAgICBhdXRvJiBzdG9wID0gbV9zdG9wc1tpXTsKIAogICAgICAgICBzdG9w
c1tpXS5pc01pZHBvaW50ID0gc3RvcC5pc01pZHBvaW50OwogICAgICAgICBzdG9wc1tpXS5jb2xv
ciA9IHN0b3AubV9yZXNvbHZlZENvbG9yOwogCiAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24p
IHsKLSAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwb3NpdGlvblZhbHVlID0g
KnN0b3AubV9wb3NpdGlvbjsKKyAgICAgICAgICAgIGF1dG8mIHBvc2l0aW9uVmFsdWUgPSAqc3Rv
cC5tX3Bvc2l0aW9uOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uVmFsdWUuaXNQZXJjZW50YWdl
KCkpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gcG9zaXRpb25WYWx1ZS5mbG9h
dFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkgfHwgcG9zaXRpb25WYWx1ZS5p
c1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIHx8IHBvc2l0aW9uVmFsdWUuaXNDYWxjdWxhdGVk
UGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIGlmICghY29tcHV0ZWRH
cmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRT
aXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGdy
YWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGZsb2F0IGxlbmd0aDsKICAgICAgICAgICAgICAgICBp
ZiAocG9zaXRpb25WYWx1ZS5pc0xlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
PSBwb3NpdGlvblZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKTsKQEAg
LTM0MiwyNiArNDM0LDE0IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGll
bnQKICAgICBpZiAobV9yZXBlYXRpbmcgJiYgbnVtU3RvcHMgPiAxKSB7CiAgICAgICAgIC8vIElm
IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGNv
bG9yLXN0b3BzIGlzIDAsCiAgICAgICAgIC8vIHRoZSBncmFkaWVudCBkZWZpbmVzIGEgc29saWQt
Y29sb3IgaW1hZ2Ugd2l0aCB0aGUgY29sb3Igb2YgdGhlIGxhc3QgY29sb3Itc3RvcCBpbiB0aGUg
cnVsZS4KLSAgICAgICAgZmxvYXQgZ3JhZGllbnRSYW5nZSA9IHN0b3BzW251bVN0b3BzIC0gMV0u
b2Zmc2V0IC0gc3RvcHNbMF0ub2Zmc2V0OworICAgICAgICBmbG9hdCBncmFkaWVudFJhbmdlID0g
c3RvcHMubGFzdCgpLm9mZnNldCAtIHN0b3BzLmZpcnN0KCkub2Zmc2V0OwogICAgICAgICBpZiAo
IWdyYWRpZW50UmFuZ2UpIHsKICAgICAgICAgICAgIHN0b3BzLmZpcnN0KCkub2Zmc2V0ID0gMDsK
ICAgICAgICAgICAgIHN0b3BzLmZpcnN0KCkuY29sb3IgPSBzdG9wcy5sYXN0KCkuY29sb3I7CiAg
ICAgICAgICAgICBzdG9wcy5zaHJpbmsoMSk7CiAgICAgICAgICAgICBudW1TdG9wcyA9IDE7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmbG9hdCBtYXhFeHRlbnQgPSAxOwotCi0gICAg
ICAgICAgICAvLyBSYWRpYWwgZ3JhZGllbnRzIG1heSBuZWVkIHRvIGV4dGVuZCBmdXJ0aGVyIHRo
YW4gdGhlIGVuZHBvaW50cywgYmVjYXVzZSB0aGV5IGhhdmUKLSAgICAgICAgICAgIC8vIHRvIHJl
cGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KLSAgICAgICAgICAgIGlmIChpc1Jh
ZGlhbEdyYWRpZW50VmFsdWUoKSkgewotICAgICAgICAgICAgICAgIGlmICghY29tcHV0ZWRHcmFk
aWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRTaXpl
KGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYWRp
ZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1heExlbmd0aEZvclJlcGVhdCA+IGdyYWRpZW50
TGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBtYXhFeHRlbnQgPSBncmFkaWVudExlbmd0aCA+
IDAgPyBtYXhMZW5ndGhGb3JSZXBlYXQgLyBncmFkaWVudExlbmd0aCA6IDA7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBmbG9hdCBtYXhFeHRlbnQgPSBncmFkaWVudC5tYXhFeHRlbnQobWF4
TGVuZ3RoRm9yUmVwZWF0LCBncmFkaWVudExlbmd0aCk7CiAKICAgICAgICAgICAgIHNpemVfdCBv
cmlnaW5hbE51bVN0b3BzID0gbnVtU3RvcHM7CiAgICAgICAgICAgICBzaXplX3Qgb3JpZ2luYWxG
aXJzdFN0b3BJbmRleCA9IDA7CkBAIC00MDcsNzYgKzQ4NywxNiBAQCB2b2lkIENTU0dyYWRpZW50
VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBudW1TdG9w
cyA9IHN0b3BzLnNpemUoKTsKLQogICAgIC8vIElmIHRoZSBncmFkaWVudCBnb2VzIG91dHNpZGUg
dGhlIDAtMSByYW5nZSwgbm9ybWFsaXplIGl0IGJ5IG1vdmluZyB0aGUgZW5kcG9pbnRzLCBhbmQg
YWRqdXN0aW5nIHRoZSBzdG9wcy4KLSAgICBpZiAobnVtU3RvcHMgPiAxICYmIChzdG9wc1swXS5v
ZmZzZXQgPCAwIHx8IHN0b3BzW251bVN0b3BzIC0gMV0ub2Zmc2V0ID4gMSkpIHsKLSAgICAgICAg
aWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCBmaXJzdE9m
ZnNldCA9IHN0b3BzWzBdLm9mZnNldDsKLSAgICAgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBz
dG9wc1tudW1TdG9wcyAtIDFdLm9mZnNldDsKLSAgICAgICAgICAgIGlmIChmaXJzdE9mZnNldCAh
PSBsYXN0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0
IC0gZmlyc3RPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bVN0b3BzOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IChz
dG9wc1tpXS5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKLQotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgcDAgPSBncmFkaWVudC5wMCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDEgPSBncmFkaWVudC5wMSgpOwotICAgICAgICAgICAgICAgIGdyYWRpZW50LnNldFAwKEZs
b2F0UG9pbnQocDAueCgpICsgZmlyc3RPZmZzZXQgKiAocDEueCgpIC0gcDAueCgpKSwgcDAueSgp
ICsgZmlyc3RPZmZzZXQgKiAocDEueSgpIC0gcDAueSgpKSkpOwotICAgICAgICAgICAgICAgIGdy
YWRpZW50LnNldFAxKEZsb2F0UG9pbnQocDEueCgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS54
KCkgLSBwMC54KCkpLCBwMS55KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLnkoKSAtIHAwLnko
KSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUncyBh
IHNpbmdsZSBwb3NpdGlvbiB0aGF0IGlzIG91dHNpZGUgdGhlIHNjYWxlLCBjbGFtcCB0aGUgcG9z
aXRpb25zIHRvIDEuCi0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1T
dG9wczsgKytpKQotICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAxOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnRWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRoZSBwb2ludHMgPCAwLCB3ZSB0
cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0byB0aGUgbGFyZ2VzdCBwb2lu
dC4KLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGZsb2F0
IGxhc3RPZmZzZXQgPSBzdG9wc1tudW1TdG9wcyAtIDFdLm9mZnNldDsKLSAgICAgICAgICAgIGZs
b2F0IHNjYWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0OwotCi0gICAgICAgICAgICAvLyBS
ZXNldCBwb2ludHMgYmVsb3cgMCB0byB0aGUgZmlyc3QgdmlzaWJsZSBjb2xvci4KLSAgICAgICAg
ICAgIHNpemVfdCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0b3BzW2ldLm9mZnNldCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
WmVyb09yR3JlYXRlckluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3Jl
YXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9m
ZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9IHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNl
dDsKLQotICAgICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXBy
ZXZPZmZzZXQgLyAobmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOwotICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlw
bGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAg
ICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3IgPSBibGVuZChzdG9wc1tmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0uY29s
b3IsIGludGVyU3RvcFByb3BvcnRpb24pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENsYW1w
IHRoZSBwb3NpdGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RvcHNbaV0uY29sb3IgPSBibGVuZGVkQ29sb3I7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBBbGwgc3RvcHMgYXJlIGJlbG93IDA7IGp1c3QgY2xhbXAgdGhlbS4KLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsg
KytpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKLSAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQg
Lz0gc2NhbGU7Ci0KLSAgICAgICAgICAgIGdyYWRpZW50LnNldFN0YXJ0UmFkaXVzKGdyYWRpZW50
LnN0YXJ0UmFkaXVzKCkgKiBzY2FsZSk7Ci0gICAgICAgICAgICBncmFkaWVudC5zZXRFbmRSYWRp
dXMoZ3JhZGllbnQuZW5kUmFkaXVzKCkgKiBzY2FsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RvcHM7IGkrKykKLSAgICAgICAgZ3JhZGll
bnQuYWRkQ29sb3JTdG9wKHN0b3BzW2ldLm9mZnNldCwgc3RvcHNbaV0uY29sb3IpOworICAgIGlm
IChzdG9wcy5zaXplKCkgPiAxICYmIChzdG9wcy5maXJzdCgpLm9mZnNldCA8IDAgfHwgc3RvcHMu
bGFzdCgpLm9mZnNldCA+IDEpKQorICAgICAgICBncmFkaWVudC5ub3JtYWxpemVTdG9wc0FuZEVu
ZHBvaW50c091dHNpZGVSYW5nZShzdG9wcyk7CisgICAgCisgICAgR3JhZGllbnQ6OkNvbG9yU3Rv
cFZlY3RvciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RvcHMu
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yIH0pOwogCi0gICAgZ3JhZGll
bnQuc2V0U3RvcHNTb3J0ZWQodHJ1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGlj
IGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgYm9vbCBpc0hvcml6b250YWwpCkBAIC02MjQsNyArNjQ0LDcgQEAgU3Ry
aW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNTUwogICAgICAgICB9CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKKyAg
ICAgICAgICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOwogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIiwgIik7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3AubV9jb2xv
ci0+Y3NzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24pIHsKQEAgLTgw
MSwxNCArODIxLDE0IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3IK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9Ci0KICAgICB9CiAKLSAgICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6
OmNyZWF0ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7Ci0KLSAgICAvLyBOb3cgYWRkIHRoZSBz
dG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudCwgY29udmVyc2lvbkRhdGEsIDEpOworICAgIEdy
YWRpZW50OjpMaW5lYXJEYXRhIGRhdGEgeyBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCB9OworICAg
IExpbmVhckdyYWRpZW50QWRhcHRvciBhZGFwdG9yIHsgZGF0YSB9OworICAgIGF1dG8gc3RvcHMg
PSBjb21wdXRlU3RvcHMoYWRhcHRvciwgY29udmVyc2lvbkRhdGEsIDEpOwogCisgICAgYXV0byBn
cmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CisgICAgZ3JhZGllbnQt
PnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92ZShzdG9wcykpOwogICAgIHJldHVybiBncmFkaWVu
dDsKIH0KIApAQCAtMTIxMywxOCArMTIzMywxOSBAQCBSZWY8R3JhZGllbnQ+IENTU1JhZGlhbEdy
YWRpZW50VmFsdWU6OmNyCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWY8R3JhZGllbnQ+IGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25k
UG9pbnQsIHNlY29uZFJhZGl1cywgYXNwZWN0UmF0aW8pOwotCi0gICAgLy8gYWRkU3RvcHMoKSBv
bmx5IHVzZXMgbWF4RXh0ZW50IGZvciByZXBlYXRpbmcgZ3JhZGllbnRzLgorICAgIC8vIGNvbXB1
dGVTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVhdGluZyBncmFkaWVudHMuCiAg
ICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKICAgICBpZiAobV9yZXBlYXRpbmcpIHsKICAgICAgICAg
RmxvYXRQb2ludCBjb3JuZXI7CiAgICAgICAgIG1heEV4dGVudCA9IGRpc3RhbmNlVG9GYXJ0aGVz
dENvcm5lcihzZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICB9CiAKLSAgICAvLyBOb3cg
YWRkIHRoZSBzdG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudCwgY29udmVyc2lvbkRhdGEsIG1h
eEV4dGVudCk7CisgICAgR3JhZGllbnQ6OlJhZGlhbERhdGEgZGF0YSB7IGZpcnN0UG9pbnQsIHNl
Y29uZFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25kUmFkaXVzLCBhc3BlY3RSYXRpbyB9OworICAg
IFJhZGlhbEdyYWRpZW50QWRhcHRvciBhZGFwdG9yIHsgZGF0YSB9OworICAgIGF1dG8gc3RvcHMg
PSBjb21wdXRlU3RvcHMoYWRhcHRvciwgY29udmVyc2lvbkRhdGEsIG1heEV4dGVudCk7CiAKKyAg
ICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKKyAgICBn
cmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3ZlKHN0b3BzKSk7CiAgICAgcmV0dXJu
IGdyYWRpZW50OwogfQogCkBAIC0xMzI2LDcgKzEzNDcsNyBAQCBTdHJpbmcgQ1NTQ29uaWNHcmFk
aWVudFZhbHVlOjpjdXN0b21DU1NUCiBSZWY8R3JhZGllbnQ+IENTU0NvbmljR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0ZShGbG9h
dFBvaW50IHsgfSwgRmxvYXRQb2ludCB7IH0pOworICAgIHJldHVybiBHcmFkaWVudDo6Y3JlYXRl
KEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgfSk7CiB9CiAKIGJvb2wgQ1NTQ29uaWNHcmFkaWVudFZh
bHVlOjplcXVhbHMoY29uc3QgQ1NTQ29uaWNHcmFkaWVudFZhbHVlJiBvdGhlcikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkocmV2aXNpb24gMjI0NzM2KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTIgKzI3LDEyIEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBlbnVt
IENTU0dyYWRpZW50VHlwZSB7CkBAIC0xMDksNyArMTA5LDggQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICB9CiAKLSAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50JiwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYsIGZsb2F0IG1heExlbmd0aEZvclJlcGVhdCA9IDApOworICAgIHRlbXBs
YXRlPGNsYXNzIEdyYWRpZW50QWRhcHRvcj4KKyAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9y
IGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0b3ImLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KTsKIAogICAgIC8vIFJlc29sdmUgcG9p
bnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxvYXRQb2ludCBjb21wdXRlRW5k
UG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBGbG9hdFNpemUmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDcz
NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENh
bnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEpCi0gICAgOiBtX2dyYWRpZW50KEdyYWRpZW50OjpjcmVhdGUocDAsIHAx
KSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0
YSB7IHAwLCBwMSB9KSkKIHsKIH0KIAogQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0
IHIxKQotICAgIDogbV9ncmFkaWVudChHcmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkK
KyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6UmFkaWFsRGF0YSB7
IHAwLCBwMSwgcjAsIHIxLCAxIH0pKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkocmV2aXNpb24gMjI0NzM2KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5MSwyMyArNTkxLDMwIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWMKIAogUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPj4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQoY29uc3QgQ2FudmFz
R3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewotICAgIGNvbnN0IEdyYWRpZW50JiBncmFkaWVu
dCA9IGNhbnZhc0dyYWRpZW50LmdyYWRpZW50KCk7Ci0gICAgYm9vbCBpc1JhZGlhbCA9IGdyYWRp
ZW50LmlzUmFkaWFsKCk7CisgICAgY29uc3QgYXV0byYgZ3JhZGllbnQgPSBjYW52YXNHcmFkaWVu
dC5ncmFkaWVudCgpOwogCi0gICAgU3RyaW5nIHR5cGUgPSBpc1JhZGlhbCA/IEFTQ0lJTGl0ZXJh
bCgicmFkaWFsLWdyYWRpZW50IikgOiBBU0NJSUxpdGVyYWwoImxpbmVhci1ncmFkaWVudCIpOwor
ICAgIFN0cmluZyB0eXBlID0gZ3JhZGllbnQudHlwZSgpID09IEdyYWRpZW50OjpUeXBlOjpSYWRp
YWwgPyBBU0NJSUxpdGVyYWwoInJhZGlhbC1ncmFkaWVudCIpIDogQVNDSUlMaXRlcmFsKCJsaW5l
YXItZ3JhZGllbnQiKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxm
bG9hdD4+IHBhcmFtZXRlcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxmbG9hdD46OmNy
ZWF0ZSgpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDAoKS54KCkpOwotICAg
IHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDAoKS55KCkpOwotICAgIGlmIChpc1JhZGlh
bCkKLSAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShncmFkaWVudC5zdGFydFJhZGl1cygpKTsK
LSAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGdyYWRpZW50LnAxKCkueCgpKTsKLSAgICBwYXJhbWV0
ZXJzLT5hZGRJdGVtKGdyYWRpZW50LnAxKCkueSgpKTsKLSAgICBpZiAoaXNSYWRpYWwpCi0gICAg
ICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQuZW5kUmFkaXVzKCkpOworICAgIFdURjo6
c3dpdGNoT24oZ3JhZGllbnQuZGF0YSgpLAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBH
cmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLnBvaW50MC54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShk
YXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBv
aW50MS54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55
KCkpOworICAgICAgICB9LAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6
UmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRh
LnBvaW50MC54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50
MC55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnN0YXJ0UmFkaXVz
KTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEueCgpKTsKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEueSgpKTsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5lbmRSYWRpdXMpOworICAgICAgICB9CisgICAg
KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1
ZT4+IHN0b3BzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+Ojpj
cmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGNvbG9yU3RvcCA6
IGdyYWRpZW50LnN0b3BzKCkpIHsKKyAgICBmb3IgKGF1dG8mIGNvbG9yU3RvcCA6IGdyYWRpZW50
LnN0b3BzKCkpIHsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3RvclZhbHVlPj4gc3RvcCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rv
clZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oY29sb3JTdG9wLm9mZnNl
dCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGNvbG9yU3RvcC5jb2xvci5j
c3NUZXh0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMzAgKzM2LDE0IEBA
IHVzaW5nIFdURjo6cGFpckludEhhc2g7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGll
bnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkK
LSAgICA6IG1fcmFkaWFsKGZhbHNlKQotICAgICwgbV9wMChwMCkKLSAgICAsIG1fcDEocDEpCi0g
ICAgLCBtX3IwKDApCi0gICAgLCBtX3IxKDApCi0gICAgLCBtX2FzcGVjdFJhdGlvKDEpCi0gICAg
LCBtX3N0b3BzU29ydGVkKGZhbHNlKQotICAgICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9k
UGFkKQotICAgICwgbV9jYWNoZWRIYXNoKDApCitHcmFkaWVudDo6R3JhZGllbnQoTGluZWFyRGF0
YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKICAgICBwbGF0Zm9ybUlu
aXQoKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9h
dCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbykK
LSAgICA6IG1fcmFkaWFsKHRydWUpCi0gICAgLCBtX3AwKHAwKQotICAgICwgbV9wMShwMSkKLSAg
ICAsIG1fcjAocjApCi0gICAgLCBtX3IxKHIxKQotICAgICwgbV9hc3BlY3RSYXRpbyhhc3BlY3RS
YXRpbykKLSAgICAsIG1fc3RvcHNTb3J0ZWQoZmFsc2UpCi0gICAgLCBtX3NwcmVhZE1ldGhvZChT
cHJlYWRNZXRob2RQYWQpCi0gICAgLCBtX2NhY2hlZEhhc2goMCkKK0dyYWRpZW50OjpHcmFkaWVu
dChSYWRpYWxEYXRhJiYgZGF0YSkKKyAgICA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewogICAg
IHBsYXRmb3JtSW5pdCgpOwogfQpAQCAtNjksMzkgKzUzLDYxIEBAIEdyYWRpZW50Ojp+R3JhZGll
bnQoKQogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi12b2lkIEdyYWRpZW50OjphZGp1c3RQ
YXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcpCithdXRvIEdyYWRpZW50Ojp0eXBlKCkgY29u
c3QgLT4gVHlwZQogewotICAgIGlmIChtX3JhZGlhbCkKLSAgICAgICAgcmV0dXJuOworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgW10gKGNvbnN0IExpbmVhckRhdGEm
KSB7CisgICAgICAgICAgICByZXR1cm4gVHlwZTo6TGluZWFyOworICAgICAgICB9LAorICAgICAg
ICBbXSAoY29uc3QgUmFkaWFsRGF0YSYpIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlOjpSYWRp
YWw7CisgICAgICAgIH0KKyAgICApOworfQogCit2b2lkIEdyYWRpZW50OjphZGp1c3RQYXJhbWV0
ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcpCit7CiAgICAgaWYgKHNyY1JlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXNwYWNpbmcuaXNaZXJvKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX3AwLngoKSA9PSBtX3AxLngoKSkgewotICAgICAgICBzaXplLnNl
dFdpZHRoKDEpOwotICAgICAgICBzcmNSZWN0LnNldFdpZHRoKDEpOwotICAgICAgICBzcmNSZWN0
LnNldFgoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fcDAueSgpICE9IG1f
cDEueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplLnNldEhlaWdodCgxKTsKLSAgICBz
cmNSZWN0LnNldEhlaWdodCgxKTsKLSAgICBzcmNSZWN0LnNldFkoMCk7CisgICAgV1RGOjpzd2l0
Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAg
ICAgICAgICAgaWYgKGRhdGEucG9pbnQwLngoKSA9PSBkYXRhLnBvaW50MS54KCkpIHsKKyAgICAg
ICAgICAgICAgICBzaXplLnNldFdpZHRoKDEpOworICAgICAgICAgICAgICAgIHNyY1JlY3Quc2V0
V2lkdGgoMSk7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5zZXRYKDApOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhLnBvaW50MC55
KCkgIT0gZGF0YS5wb2ludDEueSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgc2l6ZS5zZXRIZWlnaHQoMSk7CisgICAgICAgICAgICBzcmNSZWN0LnNldEhlaWdodCgx
KTsKKyAgICAgICAgICAgIHNyY1JlY3Quc2V0WSgwKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10g
KGNvbnN0IFJhZGlhbERhdGEmKSB7CisgICAgICAgIH0KKyAgICApOworfQorCitib29sIEdyYWRp
ZW50Ojppc1plcm9TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2Rh
dGEsCisgICAgICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZGF0YS5wb2ludDAueCgpID09IGRhdGEucG9pbnQxLngoKSAmJiBkYXRhLnBvaW50MC55
KCkgPT0gZGF0YS5wb2ludDEueSgpOworICAgICAgICB9LAorICAgICAgICBbXSAoY29uc3QgUmFk
aWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEucG9pbnQwLngoKSA9PSBk
YXRhLnBvaW50MS54KCkgJiYgZGF0YS5wb2ludDAueSgpID09IGRhdGEucG9pbnQxLnkoKSAmJiBk
YXRhLnN0YXJ0UmFkaXVzID09IGRhdGEuZW5kUmFkaXVzOworICAgICAgICB9CisgICAgKTsKIH0K
IAogdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIG1fc3RvcHMuYXBwZW5kKENvbG9yU3RvcChvZmZzZXQsIGNvbG9yKSk7
Ci0KLSAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7Ci0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci0K
LSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIGFkZENvbG9yU3RvcCh7IG9mZnNldCwgY29sb3Ig
fSk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWVudDo6Q29s
b3JTdG9wJiBzdG9wKQpAQCAtMTA5LDggKzExNSwxOCBAQCB2b2lkIEdyYWRpZW50OjphZGRDb2xv
clN0b3AoY29uc3QgR3JhZGllCiAgICAgbV9zdG9wcy5hcHBlbmQoc3RvcCk7CiAKICAgICBtX3N0
b3BzU29ydGVkID0gZmFsc2U7CisKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKKyAgICBpbnZhbGlk
YXRlSGFzaCgpOworfQorCit2b2lkIEdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3BzKENvbG9y
U3RvcFZlY3RvciYmIHN0b3BzKQoreworICAgIG1fc3RvcHMgPSBXVEZNb3ZlKHN0b3BzKTsKIAor
ICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOworCisgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAgICAg
aW52YWxpZGF0ZUhhc2goKTsKIH0KIApAQCAtMTMwLDcgKzE0Niw2IEBAIHZvaWQgR3JhZGllbnQ6
OnNvcnRTdG9wc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RkOjpzdGFi
bGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wcyk7Ci0K
ICAgICBpbnZhbGlkYXRlSGFzaCgpOwogfQogCkBAIC0xNzMsMTQgKzE4OCwxNCBAQCB1bnNpZ25l
ZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CiAK
ICAgICBzdHJ1Y3QgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uOwotICAgICAgICBGbG9hdFBvaW50IHAwOwotICAgICAgICBGbG9hdFBvaW50IHAx
OwotICAgICAgICBmbG9hdCByMDsKLSAgICAgICAgZmxvYXQgcjE7CisgICAgICAgIFR5cGUgdHlw
ZTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQx
OworICAgICAgICBmbG9hdCBzdGFydFJhZGl1czsKKyAgICAgICAgZmxvYXQgZW5kUmFkaXVzOwog
ICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsKICAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qg
c3ByZWFkTWV0aG9kOwotICAgICAgICBib29sIHJhZGlhbDsKKyAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICB9IHBhcmFtZXRlcnM7CiAKICAg
ICAvLyBTdHJpbmdIYXNoZXIgcmVxdWlyZXMgdGhhdCB0aGUgbWVtb3J5IGl0IGhhc2hlcyBiZSBh
IG11bHRpcGxlIG9mIHR3byBpbiBzaXplLgpAQCAtMTkwLDE0ICsyMDUsMjcgQEAgdW5zaWduZWQg
R3JhZGllbnQ6Omhhc2goKSBjb25zdAogICAgIC8vIEVuc3VyZSB0aGF0IGFueSBwYWRkaW5nIGlu
IHRoZSBzdHJ1Y3QgaXMgemVyby1maWxsZWQsIHNvIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgaGFz
aCB2YWx1ZS4KICAgICBtZW1zZXQoJnBhcmFtZXRlcnMsIDAsIHNpemVvZihwYXJhbWV0ZXJzKSk7
CiAgICAgCi0gICAgcGFyYW1ldGVycy5ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBtX2dy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBwYXJhbWV0ZXJzLnAwID0gbV9wMDsKLSAg
ICBwYXJhbWV0ZXJzLnAxID0gbV9wMTsKLSAgICBwYXJhbWV0ZXJzLnIwID0gbV9yMDsKLSAgICBw
YXJhbWV0ZXJzLnIxID0gbV9yMTsKLSAgICBwYXJhbWV0ZXJzLmFzcGVjdFJhdGlvID0gbV9hc3Bl
Y3RSYXRpbzsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZwYXJhbWV0ZXJz
XSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcGFyYW1ldGVycy5wb2lu
dDAgPSBkYXRhLnBvaW50MDsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQxID0gZGF0YS5w
b2ludDE7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFkaXVzID0gMDsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNw
ZWN0UmF0aW8gPSAwOworICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6TGluZWFy
OworICAgICAgICB9LAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBSYWRpYWxEYXRhJiBk
YXRhKSB7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50MTsKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMuc3RhcnRSYWRpdXMgPSBkYXRhLnN0YXJ0UmFkaXVzOworICAgICAgICAgICAgcGFy
YW1ldGVycy5lbmRSYWRpdXMgPSBkYXRhLmVuZFJhZGl1czsKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXNwZWN0UmF0aW8gPSBkYXRhLmFzcGVjdFJhdGlvOworICAgICAgICAgICAgcGFyYW1ldGVy
cy50eXBlID0gVHlwZTo6UmFkaWFsOworICAgICAgICB9CisgICAgKTsKKwogICAgIHBhcmFtZXRl
cnMuc3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0gICAgcGFyYW1ldGVycy5yYWRpYWwg
PSBtX3JhZGlhbDsKKyAgICBwYXJhbWV0ZXJzLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiA9
IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogCiAgICAgdW5zaWduZWQgcGFyYW1ldGVy
c0hhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoJnBhcmFtZXRlcnMsIHNpemVvZihwYXJh
bWV0ZXJzKSk7CiAgICAgdW5zaWduZWQgc3RvcEhhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkobV9zdG9wcy5kYXRhKCksIG1fc3RvcHMuc2l6ZSgpICogc2l6ZW9mKENvbG9yU3RvcCkpOwpA
QCAtMjA3LDQgKzIzNSw0IEBAIHVuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCi19IC8vbmFtZXNwYWNlCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDIyNDczNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIzICsyNSwyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBHcmFkaWVudF9oCi0jZGVmaW5lIEdyYWRpZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKICNpZiBVU0UoQ0cpCi0KIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0
UmVmOwotCiB0eXBlZGVmIHN0cnVjdCBDR0dyYWRpZW50KiBDR0dyYWRpZW50UmVmOwogdHlwZWRl
ZiBDR0dyYWRpZW50UmVmIFBsYXRmb3JtR3JhZGllbnQ7Ci0KICNlbGlmIFVTRShESVJFQ1QyRCkK
IGludGVyZmFjZSBJRDJEMUJydXNoOwogaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OwpAQCAt
NTUsMTUyICs1MiwxMTYgQEAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDb2xvcjsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7
Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotCi0gICAgY2xhc3MgR3JhZGllbnQgOiBwdWJs
aWMgUmVmQ291bnRlZDxHcmFkaWVudD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJl
ZjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSkKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworCitjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRpZW50PiB7Citw
dWJsaWM6CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBBIGNvbG9yIHN0b3AgbmVlZHMg
YSBub3Rpb24gb2YgY29sb3Igc3BhY2UuCisgICAgc3RydWN0IENvbG9yU3RvcCB7CisgICAgICAg
IGZsb2F0IG9mZnNldCB7IDAgfTsKKyAgICAgICAgQ29sb3IgY29sb3I7CisKKyAgICAgICAgQ29s
b3JTdG9wKCkgPSBkZWZhdWx0OworICAgICAgICBDb2xvclN0b3AoZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCisgICAgICAgICAgICA6IG9mZnNldChvZmZzZXQpCisgICAgICAgICAg
ICAsIGNvbG9yKGNvbG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBHcmFkaWVudChwMCwgcDEpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVmPEdy
YWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvID0gMSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQocDAsIHIwLCBwMSwgcjEs
IGFzcGVjdFJhdGlvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYWRp
ZW50KCk7Ci0KLSAgICAgICAgc3RydWN0IENvbG9yU3RvcDsKLSAgICAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7Ci0gICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBDb2xvciYpOworICAgIH07CiAK
LSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIHVzaW5nIENvbG9yU3RvcFZlY3Rv
ciA9IFZlY3RvcjxDb2xvclN0b3AsIDI+OwogCi0gICAgICAgIGJvb2wgaXNSYWRpYWwoKSBjb25z
dCB7IHJldHVybiBtX3JhZGlhbDsgfQotICAgICAgICBib29sIGlzWmVyb1NpemUoKSBjb25zdCB7
IHJldHVybiBtX3AwLngoKSA9PSBtX3AxLngoKSAmJiBtX3AwLnkoKSA9PSBtX3AxLnkoKSAmJiAo
IW1fcmFkaWFsIHx8IG1fcjAgPT0gbV9yMSk7IH0KKyAgICBzdHJ1Y3QgTGluZWFyRGF0YSB7Cisg
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAg
ICB9OwogCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAwKCkgY29uc3QgeyByZXR1cm4gbV9w
MDsgfQotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSgpIGNvbnN0IHsgcmV0dXJuIG1fcDE7
IH0KKyAgICBzdHJ1Y3QgUmFkaWFsRGF0YSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQwOwor
ICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXM7Cisg
ICAgICAgIGZsb2F0IGVuZFJhZGl1czsKKyAgICAgICAgZmxvYXQgYXNwZWN0UmF0aW87IC8vIEZv
ciBlbGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KKyAgICB9OwogCi0gICAgICAg
IHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYgcCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1fcDAgPT0gcCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fcDAgPSBwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnZhbGlkYXRl
SGFzaCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEZs
b2F0UG9pbnQmIHApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3AxID09IHApCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3AxID0gcDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaW52YWxpZGF0ZUhhc2goKTsKLSAgICAgICAgfQor
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIExpbmVhciwKKyAgICAgICAgUmFkaWFsCisg
ICAgfTsKIAotICAgICAgICBmbG9hdCBzdGFydFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fcjA7
IH0KLSAgICAgICAgZmxvYXQgZW5kUmFkaXVzKCkgY29uc3QgeyByZXR1cm4gbV9yMTsgfQorICAg
IHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShMaW5lYXJEYXRhJiYgZGF0YSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdURk1vdmUoZGF0YSkpKTsKKyAg
ICB9CiAKLSAgICAgICAgdm9pZCBzZXRTdGFydFJhZGl1cyhmbG9hdCByKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9yMCA9PSByKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBz
dGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoUmFkaWFsRGF0YSYmIGRhdGEpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7CisgICAg
fQogCi0gICAgICAgICAgICBtX3IwID0gcjsKKyAgICBXRUJDT1JFX0VYUE9SVCB+R3JhZGllbnQo
KTsKIAotICAgICAgICAgICAgaW52YWxpZGF0ZUhhc2goKTsKLSAgICAgICAgfQorICAgIFR5cGUg
dHlwZSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0RW5kUmFkaXVzKGZsb2F0IHIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX3IxID09IHIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKKyAgICBib29sIGlzWmVyb1NpemUoKSBjb25z
dDsKIAotICAgICAgICAgICAgbV9yMSA9IHI7CisgICAgY29uc3QgVmFyaWFudDxMaW5lYXJEYXRh
LCBSYWRpYWxEYXRhPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCi0gICAgICAg
ICAgICBpbnZhbGlkYXRlSGFzaCgpOwotICAgICAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRDb2xvclN0b3AoY29uc3QgQ29sb3JTdG9wJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRDb2xvclN0b3AoZmxvYXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRTb3J0ZWRD
b2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYmKTsKIAotICAgICAgICBmbG9hdCBhc3BlY3RSYXRp
bygpIGNvbnN0IHsgcmV0dXJuIG1fYXNwZWN0UmF0aW87IH0KKyAgICBjb25zdCBDb2xvclN0b3BW
ZWN0b3ImIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQogCi0jaWYgVVNFKFdJTkdE
SSkKLSAgICAgICAgY29uc3QgVmVjdG9yPENvbG9yU3RvcCwgMj4mIGdldFN0b3BzKCkgY29uc3Q7
Ci0jZWxzZQotICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3JtR3JhZGllbnQoKTsKLSNl
bmRpZgorICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKKyAg
ICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX3Nw
cmVhZE1ldGhvZDsgfQogCi0gICAgICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gQSBjb2xv
ciBzdG9wIG5lZWRzIGEgbm90aW9uIG9mIGNvbG9yIHNwYWNlLgotICAgICAgICBzdHJ1Y3QgQ29s
b3JTdG9wIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCB7IDAgfTsKLSAgICAgICAgICAgIENv
bG9yIGNvbG9yOwotCi0gICAgICAgICAgICBDb2xvclN0b3AoKSB7IH0KLSAgICAgICAgICAgIENv
bG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgICAgICAg
ICA6IG9mZnNldChvZmZzZXQpCi0gICAgICAgICAgICAgICAgLCBjb2xvcihjb2xvcikKLSAgICAg
ICAgICAgICAgICB7IH0KLSAgICAgICAgfTsKLQotICAgICAgICBjb25zdCBWZWN0b3I8Q29sb3JT
dG9wLCAyPiYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzOyB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRTdG9wc1NvcnRlZChib29sIHMpIHsgbV9zdG9wc1NvcnRlZCA9IHM7IH0KLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kKTsKLSAg
ICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgeyByZXR1cm4gbV9zcHJl
YWRNZXRob2Q7IH0KLSAgICAgICAgdm9pZCBzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKLSAgICAgICAg
Ly8gUXQgYW5kIENHIHRyYW5zZm9ybSB0aGUgZ3JhZGllbnQgYXQgZHJhdyB0aW1lCi0gICAgICAg
IEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4gbV9ncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KKyAgICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zvcm0g
dGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KKyAgICB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24p
OworICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4g
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAotICAgICAgICB2b2lkIGZpbGwoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZvaWQgYWRqdXN0UGFy
YW1ldGVyc0ZvclRpbGVkRHJhd2luZyhGbG9hdFNpemUmLCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcpOworICAgIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxv
YXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAotICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUhhc2goKSB7
IG1fY2FjaGVkSGFzaCA9IDA7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgdm9p
ZCBpbnZhbGlkYXRlSGFzaCgpIHsgbV9jYWNoZWRIYXNoID0gMDsgfQogCiAjaWYgVVNFKENHKQot
ICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7Ci0gICAgICAgIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2
b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIFBs
YXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVu
ZGVyVGFyZ2V0Kik7CisgICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50
SWZOZWNlc3NhcnkoSUQyRDFSZW5kZXJUYXJnZXQqKTsKICNlbGlmIFVTRShDQUlSTykKLSAgICAg
ICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFs
cGhhKTsKKyAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQg
Z2xvYmFsQWxwaGEpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICBXRUJDT1JFX0VY
UE9SVCBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
OwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0aW8pOwotCi0gICAgICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gbnVsbHB0cjsgfQotICAgICAgICB2
b2lkIHBsYXRmb3JtRGVzdHJveSgpOworcHJpdmF0ZToKKyAgICBHcmFkaWVudChMaW5lYXJEYXRh
JiYpOworICAgIEdyYWRpZW50KFJhZGlhbERhdGEmJik7CisKKyAgICBQbGF0Zm9ybUdyYWRpZW50
IHBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVu
dCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgICAgIHZv
aWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5
KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJ
RDJEMVJlbmRlclRhcmdldCopOworICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRl
clRhcmdldCopOwogI2VuZGlmCiAKLSAgICAgICAgLy8gS2VlcCBhbnkgcGFyYW1ldGVycyByZWxl
dmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRoIHRoZSBzdHJ1Y3R1cmUgaW4gR3JhZGllbnQ6
Omhhc2goKS4KLSAgICAgICAgYm9vbCBtX3JhZGlhbDsKLSAgICAgICAgRmxvYXRQb2ludCBtX3Aw
OwotICAgICAgICBGbG9hdFBvaW50IG1fcDE7Ci0gICAgICAgIGZsb2F0IG1fcjA7Ci0gICAgICAg
IGZsb2F0IG1fcjE7Ci0gICAgICAgIGZsb2F0IG1fYXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRp
Y2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KLSAgICAgICAgbXV0YWJsZSBWZWN0b3I8Q29s
b3JTdG9wLCAyPiBtX3N0b3BzOwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsK
LSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBWYXJpYW50
PExpbmVhckRhdGEsIFJhZGlhbERhdGE+IG1fZGF0YTsKIAotICAgICAgICBtdXRhYmxlIHVuc2ln
bmVkIG1fY2FjaGVkSGFzaDsKKyAgICBtdXRhYmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOwor
ICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKKyAgICBHcmFkaWVudFNw
cmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7IFNwcmVhZE1ldGhvZFBhZCB9OworICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKIAotICAgICAgICBQbGF0
Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7Ci0gICAgfTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
Y2FjaGVkSGFzaCB7IDAgfTsKIAotfSAvL25hbWVzcGFjZQorICAgIFBsYXRmb3JtR3JhZGllbnQg
bV9ncmFkaWVudDsKK307CiAKLSNlbmRpZgorfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMjQ3
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzAsNyArODcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ3Jh
ZGllbnQuZmlsbCh0aGlzLCByZWN0KTsKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyMjQ3MzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDE0IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVz
dHJveSgpCiAKIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGll
bnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudDsK
LSAgICBpZiAobV9yYWRpYWwpCi0gICAgICAgIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVh
dGVfcmFkaWFsKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9yMCwgbV9wMS54KCksIG1fcDEueSgpLCBt
X3IxKTsKLSAgICBlbHNlCi0gICAgICAgIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVf
bGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwgbV9wMS54KCksIG1fcDEueSgpKTsKKyAgICBjYWly
b19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsm
XSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAg
ICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwg
ZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSk7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0
dGVybl90KiB7CisgICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFs
KGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRh
LnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICB9
CisgICAgKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAg
ICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRlZCgpKSB7CkBAIC03NywxOCArODAsMTggQEAgY2Fp
cm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZvcgogICAgIHJldHVybiBncmFkaWVu
dDsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgUmVmUHRyPGNhaXJvX3Bh
dHRlcm5fdD4gZ3JhZGllbnQgPSBhZG9wdFJlZihjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEuMCkp
OwogCi0gICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQuc2F2ZSgpOwogCi0gICAgY2Fp
cm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb190
KiBjciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fc2V0X3Nv
dXJjZShjciwgZ3JhZGllbnQuZ2V0KCkpOwogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIGNhaXJvX2Zp
bGwoY3IpOwogCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkocmV2aXNpb24gMjI0NzM2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9p
ZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICBDR0dyYWRpZW50UmVsZWFzZSht
X2dyYWRpZW50KTsKLSAgICBtX2dyYWRpZW50ID0gMDsKKyAgICBtX2dyYWRpZW50ID0gbnVsbHB0
cjsKIH0KIAogQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCkBAIC05
Miw0MyArOTIsNDUgQEAgQ0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudAog
ICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBjb250ZXh0LT5jbGlwKHJlY3QpOworICAgIGNvbnRleHQuY2xpcChyZWN0KTsKICAgICBw
YWludChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFkaWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQordm9pZCBHcmFkaWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogewotICAgIENHQ29udGV4dFJlZiBjdHggPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBwYWludChjdHgpOworICAgIHBhaW50KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCi12b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgR3Jh
ZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAgICAgQ0dHcmFk
aWVudERyYXdpbmdPcHRpb25zIGV4dGVuZE9wdGlvbnMgPSBrQ0dHcmFkaWVudERyYXdzQmVmb3Jl
U3RhcnRMb2NhdGlvbiB8IGtDR0dyYWRpZW50RHJhd3NBZnRlckVuZExvY2F0aW9uOwotICAgIGlm
ICghbV9yYWRpYWwpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KGNvbnRl
eHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgbV9wMCwgbV9wMSwgZXh0ZW5kT3B0aW9ucyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRTY2FsaW5nID0gYXNwZWN0UmF0aW8o
KSAhPSAxOwotICAgIGlmIChuZWVkU2NhbGluZykgewotICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwotICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdy
YWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAotICAg
ICAgICAvLyBmb3Igd2hpY2ggbV9wMCA9PSBtX3AxLgotICAgICAgICBBU1NFUlQobV9wMCA9PSBt
X3AxKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIG1fcDAueCgpLCBt
X3AwLnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIDEgLyBhc3Bl
Y3RSYXRpbygpKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1tX3Aw
LngoKSwgLW1fcDAueSgpKTsKLSAgICB9CiAKLSAgICBDR0NvbnRleHREcmF3UmFkaWFsR3JhZGll
bnQoY29udGV4dCwgcGxhdGZvcm1HcmFkaWVudCgpLCBtX3AwLCBtX3IwLCBtX3AxLCBtX3IxLCBl
eHRlbmRPcHRpb25zKTsKLQotICAgIGlmIChuZWVkU2NhbGluZykKLSAgICAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAg
ICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBDR0NvbnRleHRE
cmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBwbGF0Zm9ybUdyYWRpZW50KCksIGRh
dGEucG9pbnQwLCBkYXRhLnBvaW50MSwgZXh0ZW5kT3B0aW9ucyk7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgYm9vbCBuZWVk
U2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKKyAgICAgICAgICAgIGlmIChuZWVkU2Nh
bGluZykgeworICAgICAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUocGxhdGZvcm1Db250
ZXh0KTsKKyAgICAgICAgICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdy
YWRpZW50LiBXZSBvbmx5IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAorICAg
ICAgICAgICAgICAgIC8vIGZvciB3aGljaCBwb2ludDAgPT0gcG9pbnQxLgorICAgICAgICAgICAg
ICAgIEFTU0VSVChkYXRhLnBvaW50MCA9PSBkYXRhLnBvaW50MSk7CisgICAgICAgICAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgZGF0YS5wb2ludDAueCgpLCBk
YXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRm
b3JtQ29udGV4dCwgMSwgMSAvIGRhdGEuYXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1kYXRhLnBvaW50MC54KCksIC1k
YXRhLnBvaW50MC55KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDR0NvbnRleHRE
cmF3UmFkaWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBwbGF0Zm9ybUdyYWRpZW50KCksIGRh
dGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMs
IGV4dGVuZE9wdGlvbnMpOworCisgICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpCisgICAgICAg
ICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOworICAgICAg
ICB9CisgICAgKTsKIH0KIAotfSAvL25hbWVzcGFjZQorfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzc3
LDcgKzc3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwog
Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAg
ICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuOwpAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0
cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5z
dHJva2VHcmFkaWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KHRoaXMpOworICAgICAgICAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTMyMyw3ICsxMzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRgogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQtPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjI0NzM2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2MiArNzgsNzggQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJE
MVJlbgogICAgICAgICBtX2dyYWRpZW50ID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAobV9y
YWRpYWwpIHsKLSAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IHAxKCkgLSBwMCgpOwotICAgICAg
ICBJRDJEMVJhZGlhbEdyYWRpZW50QnJ1c2gqIHJhZGlhbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAg
ICAgICAgZmxvYXQgcmFkaXVzWCA9IGVuZFJhZGl1cygpICsgb2Zmc2V0LndpZHRoKCk7Ci0gICAg
ICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gbV9hc3BlY3RSYXRpbzsKLSAgICAgICAgaHIg
PSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICBE
MkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhwMCgpLCBEMkQxOjpQb2ludDJGKG9m
ZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCByYWRpdXNZKSwKLSAgICAg
ICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdl
dCgpLAotICAgICAgICAgICAgJnJhZGlhbEdyYWRpZW50KTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1fZ3JhZGllbnQgPSByYWRpYWxHcmFkaWVudDsK
LSAgICB9IGVsc2UgewotICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxpbmVhckdy
YWRpZW50ID0gbnVsbHB0cjsKLSAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUxpbmVh
ckdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICBEMkQxOjpMaW5lYXJHcmFkaWVudEJydXNoUHJv
cGVydGllcyhwMCgpLCBwMSgpKSwKLSAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygp
LCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAotICAgICAgICAgICAgJmxpbmVhckdyYWRp
ZW50KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIG1f
Z3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKLSAgICB9CisgICAgV1RGOjpzd2l0Y2hPbihtX2Rh
dGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAg
SUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5lYXJHcmFkaWVudCA9IG51bGxwdHI7CisgICAg
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlTGluZWFyR3JhZGllbnRCcnVzaCgKKyAg
ICAgICAgICAgICAgICBEMkQxOjpMaW5lYXJHcmFkaWVudEJydXNoUHJvcGVydGllcyhkYXRhLnBv
aW50MCwgZGF0YS5wb2ludDEpLAorICAgICAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGll
cygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAorICAgICAgICAgICAgICAgICZsaW5l
YXJHcmFkaWVudCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
KyAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBGbG9hdFNp
emUgb2Zmc2V0ID0gZGF0YS5wb2ludDEgLSBkYXRhLnBvaW50MDsKKyAgICAgICAgICAgIElEMkQx
UmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOworICAgICAgICAg
ICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFkaXVzICsgb2Zmc2V0LndpZHRoKCk7CisgICAg
ICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87CisgICAg
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFkaWFsR3JhZGllbnRCcnVzaCgKKyAg
ICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhwMCgpLCBE
MkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCBy
YWRpdXNZKSwKKyAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGll
bnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKKyAgICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgICAg
ICBtX2dyYWRpZW50ID0gcmFkaWFsR3JhZGllbnQ7CisgICAgICAgIH0KKyAgICApOwogCiAgICAg
aGFzaCgpOwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhdXRvIGQyZENv
bnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIGJvb2wgbmVlZFNjYWxp
bmcgPSBhc3BlY3RSYXRpbygpICE9IDE7Ci0gICAgaWYgKG5lZWRTY2FsaW5nKSB7Ci0gICAgICAg
IGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgLy8gU2NhbGUgZnJvbSB0aGUgY2VudGVyIG9mIHRo
ZSBncmFkaWVudC4gV2Ugb25seSBldmVyIHNjYWxlIG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cywK
LSAgICAgICAgLy8gZm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KLSAgICAgICAgQVNTRVJUKG1fcDAg
PT0gbV9wMSk7Ci0KLSAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtID0geyB9OwotICAgICAg
ICBkMmRDb250ZXh0LT5HZXRUcmFuc2Zvcm0oJmN0bSk7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybShjdG0pOwotICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1fcDApOwot
ICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKDEuMCwgMS4wIC8gYXNwZWN0UmF0aW8o
KSk7Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLW1fcDApOwotCi0gICAgICAgIGQyZENv
bnRleHQtPlNldFRyYW5zZm9ybShjdG0pOwotICAgIH0KLQotICAgIGlmICghbV9jYWNoZWRIYXNo
IHx8ICFtX2dyYWRpZW50KQotICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwot
Ci0gICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7Ci0K
LSAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICBkMmRDb250ZXh0LT5G
aWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAgICBhdXRvIGQyZENvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG5lZWRTY2FsaW5nKQotICAg
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAg
ICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgaWYgKCFtX2Nh
Y2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVHcmFkaWVu
dChkMmRDb250ZXh0KTsKKworICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVO
VF9EUkFXSU5HLCBfX0xJTkVfXyk7CisKKyAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJk
UmVjdCwgbV9ncmFkaWVudCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFs
RGF0YSYgZGF0YSkgeworICAgICAgICAgICAgYm9vbCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0
UmF0aW8gIT0gMTsKKyAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAgICAgIC8vIFNjYWxlIGZyb20gdGhlIGNl
bnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZlciBzY2FsZSBub24tZGVwcmVjYXRlZCBn
cmFkaWVudHMsCisgICAgICAgICAgICAgICAgLy8gZm9yIHdoaWNoIG1fcDAgPT0gbV9wMS4KKyAg
ICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5wb2ludDAgPT0gZGF0YS5wb2ludDEpOworCisgICAg
ICAgICAgICAgICAgRDJEMV9NQVRSSVhfM1gyX0YgY3RtID0geyB9OworICAgICAgICAgICAgICAg
IGQyZENvbnRleHQtPkdldFRyYW5zZm9ybSgmY3RtKTsKKworICAgICAgICAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0oY3RtKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJh
bnNsYXRlKGRhdGEucG9pbnQwKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25V
bmlmb3JtKDEuMCwgMS4wIC8gZGF0YS5hc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtZGF0YS5wb2ludDApOworCisgICAgICAgICAgICAgICAgZDJkQ29u
dGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQorICAgICAgICAgICAgICAgIGdlbmVyYXRl
R3JhZGllbnQoZDJkQ29udGV4dCk7CisKKyAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRhZ3Mo
R1JBRElFTlRfRFJBV0lORywgX19MSU5FX18pOworCisgICAgICAgICAgICBjb25zdCBEMkQxX1JF
Q1RfRiBkMmRSZWN0ID0gcmVjdDsKKyAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5n
bGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOworCisgICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcp
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICApOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
CShyZXZpc2lvbiAyMjQ3MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw3ICs4OTcsNyBAQCBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShT
b2xpZFN0cm9rZSk7CiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
ID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9r
ZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNh
bFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJp
bmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOworICAgIFJlZlB0cjxHcmFkaWVu
dD4gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRh
IHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0
UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0Jhckhl
aWdodCAtIDEpIH0pOwogICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xv
cigweDhkLCAweDhkLCAweDhkKSk7CiAgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjQ1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CiAgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjU1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CkBAIC05MTcsNyArOTE3LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgIHBhaW50SW5m
by5jb250ZXh0KCkuY2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoYm9yZGVyLCByb3Vu
ZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVz
LCByb3VuZGVkQ29ybmVyUmFkaXVzKSk7CiAKICAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0
ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IHVwcGVyR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkpOworICAgIFJlZlB0cjxH
cmFkaWVudD4gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVh
ckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsg
MC41KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHVw
cGVyR3JhZGllbnRIZWlnaHQgLSAxLjUpIH0pOwogICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjAsIENvbG9yKDEzMywgMTMzLCAxMzMsIDE4OCkpOwogICAgIHVwcGVyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDE4LCAxOCwgMTgsIDUxKSk7CiAgICAgY29udGV4dC5z
ZXRGaWxsR3JhZGllbnQodXBwZXJHcmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTkyOSw3
ICs5MjksNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAg
ICAgIC8vIDIpIERyYXcgdGhlIHByb2dyZXNzIGJhci4KICAgICAgICAgZG91YmxlIHBvc2l0aW9u
ID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7CiAgICAgICAg
IGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwotICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxvYXRQb2ludChyZWN0
LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkp
OworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKICAgICAgICAgYmFyR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDE5NSwgMjE3LCAyNDcpKTsKICAgICAgICAg
YmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7CiAg
ICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40OSwgQ29sb3IoMTE4LCAxNjQsIDIy
OCkpOwpAQCAtOTM4LDcgKzkzOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jl
c3NCYXIoY28KICAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDU3
LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudChiYXJHcmFkaWVu
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIAotICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGJhclN0cm9r
ZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNh
bFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJp
bmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkpOworICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGlu
ZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSB9KTsKICAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjAsIENvbG9yKDk1LCAxMDcsIDE4MykpOwogICAgICAgICBiYXJTdHJva2VHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuNSwgQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApKTsKICAgICAgICAg
YmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDM4LCAxMDQsIDE2Nikp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCShyZXZpc2lvbiAyMjQ3MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIEZsb2F0UG9pbnQg
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWUKIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50OjpidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhKSBj
b25zdAogewotICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0
YXJ0UG9pbnQobV9hdHRyaWJ1dGVzKSwgZW5kUG9pbnQobV9hdHRyaWJ1dGVzKSk7CisgICAgZ3Jh
ZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRh
dGEgeyBzdGFydFBvaW50KG1fYXR0cmlidXRlcyksIGVuZFBvaW50KG1fYXR0cmlidXRlcykgfSk7
CiAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKHBsYXRmb3JtU3By
ZWFkTWV0aG9kRnJvbVNWR1R5cGUobV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKSk7CiAgICAg
YWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNDczNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2Myw3IEBAIGZsb2F0IFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQ6OmYKIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50OjpidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhKSBjb25zdAogewot
ICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHRoaXMtPmZvY2Fs
UG9pbnQobV9hdHRyaWJ1dGVzKSwKLSAgICAgICAgdGhpcy0+Zm9jYWxSYWRpdXMobV9hdHRyaWJ1
dGVzKSwKLSAgICAgICAgdGhpcy0+Y2VudGVyUG9pbnQobV9hdHRyaWJ1dGVzKSwKLSAgICAgICAg
dGhpcy0+cmFkaXVzKG1fYXR0cmlidXRlcykpOwotCisgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OlJhZGlhbERhdGEgeyB0aGlzLT5mb2NhbFBv
aW50KG1fYXR0cmlidXRlcyksIHRoaXMtPmNlbnRlclBvaW50KG1fYXR0cmlidXRlcyksIHRoaXMt
PmZvY2FsUmFkaXVzKG1fYXR0cmlidXRlcyksIHRoaXMtPnJhZGl1cyhtX2F0dHJpYnV0ZXMpLCAx
IH0pOwogICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChwbGF0Zm9y
bVNwcmVhZE1ldGhvZEZyb21TVkdUeXBlKG1fYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSkpOwog
CiAgICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327349</attachid>
            <date>2017-11-19 13:54:15 -0800</date>
            <delta_ts>2017-11-19 14:03:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179595-20171119135414.patch</filename>
            <type>text/plain</type>
            <size>57432</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTAzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBAQAorMjAxNy0xMS0xOSAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENsZWFuIHVwIGdyYWRpZW50IGNvZGUg
aW4gcHJlcGFyYXRpb24gZm9yIGNvbmljIGdyYWRpZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgLSBTd2l0Y2hlcyBHcmFkaWVudCB0byB1c2UgYSBWYXJp
ZW50IHdpdGggdHlwZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHMgYW5kIG1ha2VzIHRoZSAKKyAgICAg
ICAgICBwb2ludHMgLyByYWRpaSBpbW11dGFibGUuCisgICAgICAgIC0gUmVwbGFjZXMgQ1NTR3Jh
ZGllbnRWYWx1ZTo6YWRkU3RvcHMgd2l0aCB0ZW1wbGF0ZSBmdW5jdGlvbiBDU1NHcmFkaWVudFZh
bHVlOjpjb21wdXRlU3RvcHMKKyAgICAgICAgICB3aGljaCBkaXNwYXRjaGVzIHRvIGEgaGVscGVy
IGFkb3B0b3Igc3RydWN0IHdoaWNoIGlzIHBhc3NlZCBpbiBmb3IgZ3JhZGllbnQgdHlwZSBzcGVj
aWZpYworICAgICAgICAgIHZhbHVlcywgcmF0aGVyIHRoYW4gc3dpdGNoaW5nIG9uIHR5cGUgaW4g
dGhlIGZ1bmN0aW9uIGl0c2VsZi4gSW4gYWRkaXRpb24sIHRoZSBmdW5jdGlvbiBubworICAgICAg
ICAgIGxvbmdlciBtdXRhdGVzIGEgR3JhZGllbnQsIGJ1dCByYXRoZXIgbXV0YXRlcyB0eXBlIHNw
ZWNpZmljIHRoZSBkYXRhIHN0cnVjdCAoZS5nLiBMaW5lYXIgb3IKKyAgICAgICAgICBSYWRpYWwg
Zm9yIG5vdykuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lYXJHcmFkaWVudEFkYXB0b3I6OkxpbmVhckdyYWRpZW50QWRhcHRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSYWRpYWxHcmFkaWVudEFkYXB0b3I6OlJhZGlhbEdyYWRpZW50
QWRhcHRvcik6CisKKyAgICAgICAgICAgIEFkZCBoZWxwZXIgc3RydWN0cyBmb3IgdGhlIG5vdyB0
ZW1wbGF0aXplZCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMgdGhhdAorICAgICAgICAg
ICAgaW1wbGVtZW50IHR5cGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAoV2Vi
Q29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKToKKyAgICAgICAgCisgICAgICAg
ICAgICBSZW5hbWVkIGZyb20gYWRkU3RvcHMuIE5vdyB0YWtlcyBhIEdyYWRpZW50QWRhcHRvciB3
cmFwcGVyIHdoaWNoIGFic3RyYWN0cyBvdXQKKyAgICAgICAgICAgIHRoZSBncmFkaWVudCB0eXBl
IHNwZWNpZmljIGZ1bmN0aW9ubGl0eS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NM
aW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KToKKyAgICAgICAgCisgICAg
ICAgICAgICBVcGRhdGUgdG8gY2FsbCBjb21wdXRlU3RvcHMgYW5kIHVzZSBuZXcgR3JhZGllbnQg
Y3JlYXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFs
dWUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUgZm9y
IGNvbXB1dGVTdG9wcy4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3Jh
ZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRp
ZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBHcmFkaWVudCBj
cmVhdGUgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5
Rm9yQ2FudmFzR3JhZGllbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBnZXQg
Z3JhZGllbnQgcG9pbnQgLyByYWRpaSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhIGFjY2Vzc29y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OkdyYWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRh
dGUgY29uc3RydWN0b3JzIHRvIHRoZSBuZXcgZGF0YSBzdHJ1Y3RzLgorICAgICAgICAKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50Ojp0eXBlIGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAg
ICBBZGQgaGVscGVyIHRvIGdldCB0aGUgdHlwZSBvZiB0aGUgdmFyaWVudCwgbmVlZCBmb3IgaW5z
cGVjdG9yIGNvZGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFkanVz
dFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
OmlzWmVyb1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc2ggY29u
c3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBzd2l0Y2ggb24gdGhlIHVuZGVy
bHlpbmcgdmFyaWFudCB0byBnZXQgZGF0YSB2YWx1ZXMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6CisgICAgICAgIAorICAgICAgICAgICAgU2lt
cGxpZnkgYnkgaGF2aW5nIG9uZSBhZGRDb2xvclN0b3AgY2FsbCB0aGUgb3RoZXIuCisgICAgICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3BzKToK
KyAgICAgICAgCisgICAgICAgICAgICBBZGRlZC4gUmVwbGFjZXMgc2V0U3RvcHNTb3J0ZWQuIFVz
ZWQgbm93IHRoYXQgQ1NTR3JhZGllbnRWYWx1ZSBjb21wdXRlcyBhbmQgc29ydHMKKyAgICAgICAg
ICAgIGl0cyBjb2xvciBzdG9wcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGdyYWRpZW50LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpjcmVhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlcGxhY2UgY3JlYXRlIGZ1
bmN0aW9ucyB3aXRoIG9uZXMgdGhhdCB0YWtlIGRhdGEgc3RydWN0cy4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZGF0YSBjb25zdCk6CisKKyAgICAgICAgICAgIEFkZCBh
Y2Nlc3NvciBmb3IgdGhlIHVuZGVybHlpbmcgdmFyaWFudC4KKworICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OmlzUmFkaWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgCisgICAgICAgICAg
ICBSZXBsYWNlZCBieSB0eXBlIGFjY2Vzc29yLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpwMCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6cDEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFAw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c3RhcnRSYWRpdXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmVuZFJhZGl1cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U3RhcnRSYWRpdXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEVuZFJhZGl1cyk6IERlbGV0ZWQuCisgICAg
ICAgIAorICAgICAgICAgICAgUG9pbnQgYW5kIHJhZGlpIGFyZSBub3cgaW1tdXRhYmxlLgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTdG9wc1NvcnRlZCk6IERlbGV0
ZWQuCisgICAgICAgIAorICAgICAgICAgICAgUmVwbGFjZWQgYnkgc2V0U29ydGVkQ29sb3JTdG9w
cyBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNzQ29udGV4dCBieSBy
ZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBsYXRm
b3JtR3JhZGllbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8gc3dpdGNoIG9uIHRoZSB1bmRl
cmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0aGUgR3JhcGhpY3ND
b250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhZGllbnRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgbnVsbHB0ci4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAg
ICAgUGFzcyB0aGUgR3JhcGhpY3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGFpbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8g
c3dpdGNoIG9uIHRoZSB1bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNz
Q29udGV4dCBieSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50
OjpnZW5lcmF0ZUdyYWRpZW50KToKKworICAgICAgICAgICAgVXBkYXRlIHRvIHN3aXRjaCBvbiB0
aGUgdW5kZXJseWluZyB2YXJpYW50IHRvIGdldCBkYXRhIHZhbHVlcy4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgCisgICAgICAgICAgICBQYXNzIHRo
ZSBHcmFwaGljc0NvbnRleHQgYnkgcmVmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyYWRpZW50
IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBHcmFkaWVudCBj
cmVhdGUgZnVuY3Rpb24gc2lnbmF0dXJlLgorCiAyMDE3LTExLTE4ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogcmVnaXN0cmF0aW9u
IGluIFdlYkNvcmU6OlNXU2VydmVySm9iUXVldWU6OnNjcmlwdENvbnRleHRTdGFydGVkKFNlcnZp
Y2VXb3JrZXJJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmNwcAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNTcgKzEzNSwxNTMgQEAgc3RhdGlj
IGlubGluZSBDb2xvciBpbnRlcnBvbGF0ZShjb25zdCBDbwogICAgIHJldHVybiBDb2xvcihyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3Rv
cHMoR3JhZGllbnQmIGdyYWRpZW50LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQorY2xhc3MgTGluZWFyR3Jh
ZGllbnRBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMaW5lYXJHcmFkaWVudEFkYXB0
ZXIoR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisg
ICAgeworICAgIH0KKworICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5wb2ludDA7IH0KKyAgICBGbG9hdFBvaW50IGVuZFBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLnBvaW50MTsgfQorICAgIGZsb2F0IG1heEV4dGVudChmbG9hdCwgZmxvYXQpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKworICAgIHZvaWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNP
dXRzaWRlUmFuZ2UoVmVjdG9yPEdyYWRpZW50U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAg
ZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wcy5maXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQg
bGFzdE9mZnNldCA9IHN0b3BzLmxhc3QoKS5vZmZzZXQ7CisgICAgICAgIGlmIChmaXJzdE9mZnNl
dCAhPSBsYXN0T2Zmc2V0KSB7CisgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQg
LSBmaXJzdE9mZnNldDsKKworICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisg
ICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAoc3RvcC5vZmZzZXQgLSBmaXJzdE9mZnNldCkg
LyBzY2FsZTsKKworICAgICAgICAgICAgYXV0byBwMCA9IG1fZGF0YS5wb2ludDA7CisgICAgICAg
ICAgICBhdXRvIHAxID0gbV9kYXRhLnBvaW50MTsKKyAgICAgICAgICAgIG1fZGF0YS5wb2ludDAg
PSB7IHAwLngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngoKSAtIHAwLngoKSksIHAwLnkoKSArIGZp
cnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAwLnkoKSkgfTsKKyAgICAgICAgICAgIG1fZGF0YS5wb2lu
dDEgPSB7IHAxLngoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEu
eSgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS55KCkgLSBwMC55KCkpIH07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBUaGVyZSdzIGEgc2luZ2xlIHBvc2l0aW9uIHRoYXQgaXMg
b3V0c2lkZSB0aGUgc2NhbGUsIGNsYW1wIHRoZSBwb3NpdGlvbnMgdG8gMS4KKyAgICAgICAgICAg
IGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQorICAgICAgICAgICAgICAgIHN0b3Aub2Zmc2V0ID0g
MTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFkaWVudDo6TGluZWFyRGF0
YSYgbV9kYXRhOworfTsKKworY2xhc3MgUmFkaWFsR3JhZGllbnRBZGFwdGVyIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBSYWRpYWxHcmFkaWVudEFkYXB0ZXIoR3JhZGllbnQ6OlJhZGlhbERhdGEm
IGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIEZsb2F0
UG9pbnQgc3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5wb2ludDA7IH0KKyAgICBG
bG9hdFBvaW50IGVuZFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnBvaW50MCArIEZsb2F0
U2l6ZSB7IG1fZGF0YS5lbmRSYWRpdXMsIDAgfTsgfQorCisgICAgLy8gUmFkaWFsIGdyYWRpZW50
cyBtYXkgbmVlZCB0byBleHRlbmQgZnVydGhlciB0aGFuIHRoZSBlbmRwb2ludHMsIGJlY2F1c2Ug
dGhleSBoYXZlCisgICAgLy8gdG8gcmVwZWF0IG91dCB0byB0aGUgY29ybmVycyBvZiB0aGUgYm94
LgorICAgIGZsb2F0IG1heEV4dGVudChmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQsIGZsb2F0IGdy
YWRpZW50TGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1heExlbmd0aEZvclJlcGVh
dCA+IGdyYWRpZW50TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50TGVuZ3RoID4g
MCA/IG1heExlbmd0aEZvclJlcGVhdCAvIGdyYWRpZW50TGVuZ3RoIDogMDsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgdm9pZCBub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNp
ZGVSYW5nZShWZWN0b3I8R3JhZGllbnRTdG9wPiYgc3RvcHMpCisgICAgeworICAgICAgICBhdXRv
IG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOworCisgICAgICAgIC8vIFJhdGhlciB0aGFuIHNjYWxp
bmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5jYXRlIHRoZW0sIHNvIG9ubHkgc2NhbGUgYWNjb3Jk
aW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50LgorICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IDA7
CisgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wcy5sYXN0KCkub2Zmc2V0OworICAgICAg
ICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKKworICAgICAgICAvLyBS
ZXNldCBwb2ludHMgYmVsb3cgMCB0byB0aGUgZmlyc3QgdmlzaWJsZSBjb2xvci4KKyAgICAgICAg
c2l6ZV90IGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gbnVtU3RvcHM7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3Bz
W2ldLm9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5k
ZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID4gMCkgeworICAgICAgICAg
ICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3Ra
ZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldCA+IDApIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBw
cmV2T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRl
ckluZGV4XS5vZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0
aW9uID0gLXByZXZPZmZzZXQgLyAobmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVt
dWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCisgICAg
ICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNbZmlyc3RaZXJvT3JH
cmVhdGVySW5kZXggLSAxXS5jb2xvciwgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLmNv
bG9yLCBpbnRlclN0b3BQcm9wb3J0aW9uKTsKKworICAgICAgICAgICAgICAgIC8vIENsYW1wIHRo
ZSBwb3NpdGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
c3RvcHNbaV0uY29sb3IgPSBibGVuZGVkQ29sb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBbGwgc3RvcHMgYXJlIGJlbG93IDA7
IGp1c3QgY2xhbXAgdGhlbS4KKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHN0b3Bz
W2ldLm9mZnNldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGF1dG8mIHN0b3AgOiBzdG9wcykKKyAgICAgICAgICAgIHN0b3Aub2Zmc2V0IC89IHNjYWxlOwor
CisgICAgICAgIG1fZGF0YS5zdGFydFJhZGl1cyAqPSBzY2FsZTsKKyAgICAgICAgbV9kYXRhLmVu
ZFJhZGl1cyAqPSBzY2FsZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhZGllbnQ6OlJhZGlh
bERhdGEmIG1fZGF0YTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4K
K0dyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3Bz
KEdyYWRpZW50QWRhcHRlciYgZ3JhZGllbnQsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpCiB7CiAgICAgaWYg
KG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRp
ZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKICAgICAgICAgc29ydFN0
b3BzSWZOZWVkZWQoKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9w
cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3Am
IHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXpl
KCkpOwogCisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgICAg
IGZsb2F0IG9mZnNldDsKICAgICAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24tPmlzUGVyY2Vu
dGFnZSgpKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKLSAgICAgICAgICAgIGdyYWRp
ZW50LmFkZENvbG9yU3RvcChvZmZzZXQsIHN0b3AubV9yZXNvbHZlZENvbG9yKTsKKyAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBvZmZzZXQsIHN0b3AubV9yZXNvbHZlZENvbG9y
IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlIGJhY2sgZW5kIGFscmVhZHkgc29ydGVk
IHRoZSBzdG9wcy4KLSAgICAgICAgZ3JhZGllbnQuc2V0U3RvcHNTb3J0ZWQodHJ1ZSk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBzaXplX3Qg
bnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsKLQogICAgIFZlY3RvcjxHcmFkaWVudFN0b3A+IHN0
b3BzKG51bVN0b3BzKTsKIAotICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gMDsKLSAgICBib29s
IGNvbXB1dGVkR3JhZGllbnRMZW5ndGggPSBmYWxzZTsKKyAgICBhdXRvIGdyYWRpZW50U3RhcnQg
PSBncmFkaWVudC5zdGFydFBvaW50KCk7CisgICAgYXV0byBncmFkaWVudEVuZCA9IGdyYWRpZW50
LmVuZFBvaW50KCk7CiAKLSAgICBGbG9hdFBvaW50IGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC5w
MCgpOwotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7Ci0gICAgaWYgKGlzTGluZWFyR3JhZGll
bnRWYWx1ZSgpKQotICAgICAgICBncmFkaWVudEVuZCA9IGdyYWRpZW50LnAxKCk7Ci0gICAgZWxz
ZSBpZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgIGdyYWRpZW50RW5kID0gZ3Jh
ZGllbnRTdGFydCArIEZsb2F0U2l6ZShncmFkaWVudC5lbmRSYWRpdXMoKSwgMCk7CisgICAgYXV0
byBncmFkaWVudFNpemUgPSBncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQ7CisgICAgZmxvYXQg
Z3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICBjb25zdCBDU1NH
cmFkaWVudENvbG9yU3RvcCYgc3RvcCA9IG1fc3RvcHNbaV07CisgICAgICAgIGF1dG8mIHN0b3Ag
PSBtX3N0b3BzW2ldOwogCiAgICAgICAgIHN0b3BzW2ldLmlzTWlkcG9pbnQgPSBzdG9wLmlzTWlk
cG9pbnQ7CiAgICAgICAgIHN0b3BzW2ldLmNvbG9yID0gc3RvcC5tX3Jlc29sdmVkQ29sb3I7CiAK
ICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHBvc2l0aW9uVmFsdWUgPSAqc3RvcC5tX3Bvc2l0aW9uOworICAgICAgICAg
ICAgYXV0byYgcG9zaXRpb25WYWx1ZSA9ICpzdG9wLm1fcG9zaXRpb247CiAgICAgICAgICAgICBp
ZiAocG9zaXRpb25WYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICBzdG9wc1tp
XS5vZmZzZXQgPSBwb3NpdGlvblZhbHVlLmZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKSAvIDEwMDsKICAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uVmFsdWUu
aXNMZW5ndGgoKSB8fCBwb3NpdGlvblZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkg
fHwgcG9zaXRpb25WYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb21wdXRlZEdyYWRpZW50TGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEZsb2F0U2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50
RW5kKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUu
ZGlhZ29uYWxMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZmxv
YXQgbGVuZ3RoOwogICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHBvc2l0aW9uVmFsdWUuY29tcHV0ZUxlbmd0
aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwpAQCAtMzQyLDI2ICs0MzgsMTQgQEAgdm9pZCBDU1NH
cmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudAogICAgIGlmIChtX3JlcGVhdGluZyAmJiBu
dW1TdG9wcyA+IDEpIHsKICAgICAgICAgLy8gSWYgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIHBvc2l0
aW9ucyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY29sb3Itc3RvcHMgaXMgMCwKICAgICAgICAgLy8g
dGhlIGdyYWRpZW50IGRlZmluZXMgYSBzb2xpZC1jb2xvciBpbWFnZSB3aXRoIHRoZSBjb2xvciBv
ZiB0aGUgbGFzdCBjb2xvci1zdG9wIGluIHRoZSBydWxlLgotICAgICAgICBmbG9hdCBncmFkaWVu
dFJhbmdlID0gc3RvcHNbbnVtU3RvcHMgLSAxXS5vZmZzZXQgLSBzdG9wc1swXS5vZmZzZXQ7Cisg
ICAgICAgIGZsb2F0IGdyYWRpZW50UmFuZ2UgPSBzdG9wcy5sYXN0KCkub2Zmc2V0IC0gc3RvcHMu
Zmlyc3QoKS5vZmZzZXQ7CiAgICAgICAgIGlmICghZ3JhZGllbnRSYW5nZSkgewogICAgICAgICAg
ICAgc3RvcHMuZmlyc3QoKS5vZmZzZXQgPSAwOwogICAgICAgICAgICAgc3RvcHMuZmlyc3QoKS5j
b2xvciA9IHN0b3BzLmxhc3QoKS5jb2xvcjsKICAgICAgICAgICAgIHN0b3BzLnNocmluaygxKTsK
ICAgICAgICAgICAgIG51bVN0b3BzID0gMTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZsb2F0IG1heEV4dGVudCA9IDE7Ci0KLSAgICAgICAgICAgIC8vIFJhZGlhbCBncmFkaWVudHMg
bWF5IG5lZWQgdG8gZXh0ZW5kIGZ1cnRoZXIgdGhhbiB0aGUgZW5kcG9pbnRzLCBiZWNhdXNlIHRo
ZXkgaGF2ZQotICAgICAgICAgICAgLy8gdG8gcmVwZWF0IG91dCB0byB0aGUgY29ybmVycyBvZiB0
aGUgYm94LgotICAgICAgICAgICAgaWYgKGlzUmFkaWFsR3JhZGllbnRWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb21wdXRlZEdyYWRpZW50TGVuZ3RoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEZsb2F0U2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50RW5k
KTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlh
Z29uYWxMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
bWF4TGVuZ3RoRm9yUmVwZWF0ID4gZ3JhZGllbnRMZW5ndGgpCi0gICAgICAgICAgICAgICAgICAg
IG1heEV4dGVudCA9IGdyYWRpZW50TGVuZ3RoID4gMCA/IG1heExlbmd0aEZvclJlcGVhdCAvIGdy
YWRpZW50TGVuZ3RoIDogMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsb2F0IG1heEV4
dGVudCA9IGdyYWRpZW50Lm1heEV4dGVudChtYXhMZW5ndGhGb3JSZXBlYXQsIGdyYWRpZW50TGVu
Z3RoKTsKIAogICAgICAgICAgICAgc2l6ZV90IG9yaWdpbmFsTnVtU3RvcHMgPSBudW1TdG9wczsK
ICAgICAgICAgICAgIHNpemVfdCBvcmlnaW5hbEZpcnN0U3RvcEluZGV4ID0gMDsKQEAgLTQwNyw3
NiArNDkxLDE2IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAg
ICAgICAgfQogICAgIH0KIAotICAgIG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwotCiAgICAgLy8g
SWYgdGhlIGdyYWRpZW50IGdvZXMgb3V0c2lkZSB0aGUgMC0xIHJhbmdlLCBub3JtYWxpemUgaXQg
YnkgbW92aW5nIHRoZSBlbmRwb2ludHMsIGFuZCBhZGp1c3RpbmcgdGhlIHN0b3BzLgotICAgIGlm
IChudW1TdG9wcyA+IDEgJiYgKHN0b3BzWzBdLm9mZnNldCA8IDAgfHwgc3RvcHNbbnVtU3RvcHMg
LSAxXS5vZmZzZXQgPiAxKSkgewotICAgICAgICBpZiAoaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkp
IHsKLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gc3RvcHNbMF0ub2Zmc2V0OwotICAg
ICAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzW251bVN0b3BzIC0gMV0ub2Zmc2V0Owot
ICAgICAgICAgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IGxhc3RPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKLQotICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gKHN0b3BzW2ldLm9mZnNldCAtIGZpcnN0T2Zmc2V0
KSAvIHNjYWxlOwotCi0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMCA9IGdyYWRpZW50LnAw
KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMSA9IGdyYWRpZW50LnAxKCk7Ci0gICAg
ICAgICAgICAgICAgZ3JhZGllbnQuc2V0UDAoRmxvYXRQb2ludChwMC54KCkgKyBmaXJzdE9mZnNl
dCAqIChwMS54KCkgLSBwMC54KCkpLCBwMC55KCkgKyBmaXJzdE9mZnNldCAqIChwMS55KCkgLSBw
MC55KCkpKSk7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0UDEoRmxvYXRQb2ludChwMS54
KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLngoKSAtIHAwLngoKSksIHAxLnkoKSArIChsYXN0
T2Zmc2V0IC0gMSkgKiAocDEueSgpIC0gcDAueSgpKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIGEgc2luZ2xlIHBvc2l0aW9uIHRoYXQgaXMgb3V0
c2lkZSB0aGUgc2NhbGUsIGNsYW1wIHRoZSBwb3NpdGlvbnMgdG8gMS4KLSAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHN0b3BzW2ldLm9mZnNldCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpIHsKLSAgICAgICAgICAgIC8vIFJhdGhlciB0aGFu
IHNjYWxpbmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5jYXRlIHRoZW0sIHNvIG9ubHkgc2NhbGUg
YWNjb3JkaW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50LgotICAgICAgICAgICAgZmxvYXQgZmlyc3RP
ZmZzZXQgPSAwOwotICAgICAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzW251bVN0b3Bz
IC0gMV0ub2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmly
c3RPZmZzZXQ7Ci0KLSAgICAgICAgICAgIC8vIFJlc2V0IHBvaW50cyBiZWxvdyAwIHRvIHRoZSBm
aXJzdCB2aXNpYmxlIGNvbG9yLgotICAgICAgICAgICAgc2l6ZV90IGZpcnN0WmVyb09yR3JlYXRl
ckluZGV4ID0gbnVtU3RvcHM7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bVN0b3BzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RvcHNbaV0ub2Zmc2V0ID49IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiBzdG9w
c1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAx
XS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tm
aXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IGludGVyU3RvcFByb3BvcnRpb24gPSAtcHJldk9mZnNldCAvIChuZXh0T2Zmc2V0IC0gcHJl
dk9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVycG9s
YXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQgZG8g
cHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIENvbG9yIGJsZW5kZWRDb2xv
ciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0uY29sb3IsIHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGhlIHBvc2l0aW9ucyB0byAwIGFuZCBzZXQg
dGhlIGNvbG9yLgotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
cnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3BzW2ldLm9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5jb2xv
ciA9IGJsZW5kZWRDb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFsbCBzdG9wcyBhcmUgYmVsb3cgMDsg
anVzdCBjbGFtcCB0aGVtLgotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzdG9wc1tpXS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKQotICAg
ICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCAvPSBzY2FsZTsKLQotICAgICAgICAgICAgZ3Jh
ZGllbnQuc2V0U3RhcnRSYWRpdXMoZ3JhZGllbnQuc3RhcnRSYWRpdXMoKSAqIHNjYWxlKTsKLSAg
ICAgICAgICAgIGdyYWRpZW50LnNldEVuZFJhZGl1cyhncmFkaWVudC5lbmRSYWRpdXMoKSAqIHNj
YWxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1TdG9wczsgaSsrKQotICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3Aoc3RvcHNbaV0ub2Zm
c2V0LCBzdG9wc1tpXS5jb2xvcik7CisgICAgaWYgKHN0b3BzLnNpemUoKSA+IDEgJiYgKHN0b3Bz
LmZpcnN0KCkub2Zmc2V0IDwgMCB8fCBzdG9wcy5sYXN0KCkub2Zmc2V0ID4gMSkpCisgICAgICAg
IGdyYWRpZW50Lm5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRzT3V0c2lkZVJhbmdlKHN0b3BzKTsK
KyAgICAKKyAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdG9wcy5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3Rv
cCA6IHN0b3BzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgc3RvcC5vZmZzZXQs
IHN0b3AuY29sb3IgfSk7CiAKLSAgICBncmFkaWVudC5zZXRTdG9wc1NvcnRlZCh0cnVlKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoY29u
c3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplLCBib29sIGlzSG9yaXpv
bnRhbCkKQEAgLTYyNCw3ICs2NDgsNyBAQCBTdHJpbmcgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6
Y3VzdG9tQ1NTCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zdG9wcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xv
clN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICAgICAgYXV0byYgc3RvcCA9IG1fc3Rv
cHNbaV07CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAg
aWYgKHN0b3AubV9wb3NpdGlvbikgewpAQCAtODAxLDE0ICs4MjUsMTQgQEAgUmVmPEdyYWRpZW50
PiBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLQogICAgIH0KIAotICAgIFJlZjxH
cmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIHNlY29uZFBv
aW50KTsKLQotICAgIC8vIE5vdyBhZGQgdGhlIHN0b3BzLgotICAgIGFkZFN0b3BzKGdyYWRpZW50
LCBjb252ZXJzaW9uRGF0YSwgMSk7CisgICAgR3JhZGllbnQ6OkxpbmVhckRhdGEgZGF0YSB7IGZp
cnN0UG9pbnQsIHNlY29uZFBvaW50IH07CisgICAgTGluZWFyR3JhZGllbnRBZGFwdG9yIGFkYXB0
b3IgeyBkYXRhIH07CisgICAgYXV0byBzdG9wcyA9IGNvbXB1dGVTdG9wcyhhZGFwdG9yLCBjb252
ZXJzaW9uRGF0YSwgMSk7CiAKKyAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShX
VEZNb3ZlKGRhdGEpKTsKKyAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3Zl
KHN0b3BzKSk7CiAgICAgcmV0dXJuIGdyYWRpZW50OwogfQogCkBAIC0xMjEzLDE4ICsxMjM3LDE5
IEBAIFJlZjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3IKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZp
cnN0UG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzLCBhc3BlY3RS
YXRpbyk7Ci0KLSAgICAvLyBhZGRTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVh
dGluZyBncmFkaWVudHMuCisgICAgLy8gY29tcHV0ZVN0b3BzKCkgb25seSB1c2VzIG1heEV4dGVu
dCBmb3IgcmVwZWF0aW5nIGdyYWRpZW50cy4KICAgICBmbG9hdCBtYXhFeHRlbnQgPSAwOwogICAg
IGlmIChtX3JlcGVhdGluZykgewogICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKICAgICAgICAg
bWF4RXh0ZW50ID0gZGlzdGFuY2VUb0ZhcnRoZXN0Q29ybmVyKHNlY29uZFBvaW50LCBzaXplLCBj
b3JuZXIpOwogICAgIH0KIAotICAgIC8vIE5vdyBhZGQgdGhlIHN0b3BzLgotICAgIGFkZFN0b3Bz
KGdyYWRpZW50LCBjb252ZXJzaW9uRGF0YSwgbWF4RXh0ZW50KTsKKyAgICBHcmFkaWVudDo6UmFk
aWFsRGF0YSBkYXRhIHsgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNv
bmRSYWRpdXMsIGFzcGVjdFJhdGlvIH07CisgICAgUmFkaWFsR3JhZGllbnRBZGFwdG9yIGFkYXB0
ZXIgeyBkYXRhIH07CisgICAgYXV0byBzdG9wcyA9IGNvbXB1dGVTdG9wcyhhZGFwdGVyLCBjb252
ZXJzaW9uRGF0YSwgbWF4RXh0ZW50KTsKIAorICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6
Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3Bz
KFdURk1vdmUoc3RvcHMpKTsKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKQEAgLTEzMjYsNyAr
MTM1MSw3IEBAIFN0cmluZyBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1QKIFJlZjxH
cmFkaWVudD4gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVt
ZW50JiwgY29uc3QgRmxvYXRTaXplJikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAg
IHJldHVybiBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQgeyB9LCBGbG9hdFBvaW50IHsgfSk7
CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyB9KTsK
IH0KIAogYm9vbCBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NDb25pY0dy
YWRpZW50VmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2luY2x1
ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFkaWVudDsK
IGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGVudW0gQ1NTR3JhZGllbnRUeXBlIHsKQEAgLTEwOSw3
ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYWRkU3RvcHMo
R3JhZGllbnQmLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgZmxvYXQgbWF4TGVu
Z3RoRm9yUmVwZWF0ID0gMCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVy
PgorICAgIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgY29tcHV0ZVN0b3BzKEdyYWRpZW50QWRh
cHRlciYsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBmbG9hdCBtYXhMZW5ndGhG
b3JSZXBlYXQpOwogCiAgICAgLy8gUmVzb2x2ZSBwb2ludHMvcmFkaWkgdG8gZnJvbnQgZW5kIHZh
bHVlcy4KICAgICBGbG9hdFBvaW50IGNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSos
IENTU1ByaW1pdGl2ZVZhbHVlKiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIGNv
bnN0IEZsb2F0U2l6ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmNwcAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIs
MTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRp
ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKLSAgICA6IG1f
Z3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShwMCwgcDEpKQorICAgIDogbV9ncmFkaWVudChHcmFk
aWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgcDAsIHAxIH0pKQogewogfQogCiBD
YW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0
IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCi0gICAgOiBtX2dyYWRpZW50KEdy
YWRpZW50OjpjcmVhdGUocDAsIHIwLCBwMSwgcjEpKQorICAgIDogbV9ncmFkaWVudChHcmFkaWVu
dDo6Y3JlYXRlKEdyYWRpZW50OjpSYWRpYWxEYXRhIHsgcDAsIHAxLCByMCwgcjEsIDEgfSkpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMu
Y3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDIzICs1OTEsMzAgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlYwogCiBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJy
YXlGb3JDYW52YXNHcmFkaWVudChjb25zdCBDYW52YXNHcmFkaWVudCYgY2FudmFzR3JhZGllbnQp
CiB7Ci0gICAgY29uc3QgR3JhZGllbnQmIGdyYWRpZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGll
bnQoKTsKLSAgICBib29sIGlzUmFkaWFsID0gZ3JhZGllbnQuaXNSYWRpYWwoKTsKKyAgICBjb25z
dCBhdXRvJiBncmFkaWVudCA9IGNhbnZhc0dyYWRpZW50LmdyYWRpZW50KCk7CiAKLSAgICBTdHJp
bmcgdHlwZSA9IGlzUmFkaWFsID8gQVNDSUlMaXRlcmFsKCJyYWRpYWwtZ3JhZGllbnQiKSA6IEFT
Q0lJTGl0ZXJhbCgibGluZWFyLWdyYWRpZW50Iik7CisgICAgU3RyaW5nIHR5cGUgPSBncmFkaWVu
dC50eXBlKCkgPT0gR3JhZGllbnQ6OlR5cGU6OlJhZGlhbCA/IEFTQ0lJTGl0ZXJhbCgicmFkaWFs
LWdyYWRpZW50IikgOiBBU0NJSUxpdGVyYWwoImxpbmVhci1ncmFkaWVudCIpOwogCiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGZsb2F0Pj4gcGFyYW1ldGVycyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1ldGVycy0+
YWRkSXRlbShncmFkaWVudC5wMCgpLngoKSk7Ci0gICAgcGFyYW1ldGVycy0+YWRkSXRlbShncmFk
aWVudC5wMCgpLnkoKSk7Ci0gICAgaWYgKGlzUmFkaWFsKQotICAgICAgICBwYXJhbWV0ZXJzLT5h
ZGRJdGVtKGdyYWRpZW50LnN0YXJ0UmFkaXVzKCkpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0o
Z3JhZGllbnQucDEoKS54KCkpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDEo
KS55KCkpOwotICAgIGlmIChpc1JhZGlhbCkKLSAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShn
cmFkaWVudC5lbmRSYWRpdXMoKSk7CisgICAgV1RGOjpzd2l0Y2hPbihncmFkaWVudC5kYXRhKCks
CisgICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRh
KSB7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLngoKSk7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLnkoKSk7CisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQxLngoKSk7CisgICAgICAgICAgICBw
YXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQxLnkoKSk7CisgICAgICAgIH0sCisgICAgICAg
IFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLngoKSk7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLnkoKSk7CisgICAgICAgICAgICBwYXJh
bWV0ZXJzLT5hZGRJdGVtKGRhdGEuc3RhcnRSYWRpdXMpOworICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLnBvaW50MS55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShk
YXRhLmVuZFJhZGl1cyk7CisgICAgICAgIH0KKyAgICApOwogCiAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPj4gc3RvcHMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT46OmNyZWF0ZSgpOwotICAgIGZvciAoY29uc3Qg
R3JhZGllbnQ6OkNvbG9yU3RvcCYgY29sb3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgeworICAg
IGZvciAoYXV0byYgY29sb3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgewogICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiBzdG9wID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+OjpjcmVhdGUoKTsKICAgICAg
ICAgc3RvcC0+YWRkSXRlbShjb2xvclN0b3Aub2Zmc2V0KTsKICAgICAgICAgc3RvcC0+YWRkSXRl
bShpbmRleEZvckRhdGEoY29sb3JTdG9wLmNvbG9yLmNzc1RleHQoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkocmV2aXNpb24gMjI1
MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwzMCArMzYsMjQgQEAgdXNpbmcgV1RGOjpwYWlySW50SGFzaDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFkaWVudDo6R3JhZGllbnQoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQotICAgIDogbV9yYWRpYWwoZmFsc2UpCi0g
ICAgLCBtX3AwKHAwKQotICAgICwgbV9wMShwMSkKLSAgICAsIG1fcjAoMCkKLSAgICAsIG1fcjEo
MCkKLSAgICAsIG1fYXNwZWN0UmF0aW8oMSkKLSAgICAsIG1fc3RvcHNTb3J0ZWQoZmFsc2UpCi0g
ICAgLCBtX3NwcmVhZE1ldGhvZChTcHJlYWRNZXRob2RQYWQpCi0gICAgLCBtX2NhY2hlZEhhc2go
MCkKK1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShMaW5lYXJEYXRhJiYgZGF0YSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7Cit9CisK
K1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShSYWRpYWxEYXRhJiYgZGF0YSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7Cit9CisKK0dy
YWRpZW50OjpHcmFkaWVudChMaW5lYXJEYXRhJiYgZGF0YSkKKyAgICA6IG1fZGF0YShXVEZNb3Zl
KGRhdGEpKQogewogICAgIHBsYXRmb3JtSW5pdCgpOwogfQogCi1HcmFkaWVudDo6R3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxv
YXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvKQotICAgIDogbV9yYWRpYWwodHJ1ZSkKLSAgICAsIG1f
cDAocDApCi0gICAgLCBtX3AxKHAxKQotICAgICwgbV9yMChyMCkKLSAgICAsIG1fcjEocjEpCi0g
ICAgLCBtX2FzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKQotICAgICwgbV9zdG9wc1NvcnRlZChmYWxz
ZSkKLSAgICAsIG1fc3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBhZCkKLSAgICAsIG1fY2FjaGVk
SGFzaCgwKQorR3JhZGllbnQ6OkdyYWRpZW50KFJhZGlhbERhdGEmJiBkYXRhKQorICAgIDogbV9k
YXRhKFdURk1vdmUoZGF0YSkpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC02OSwzOSAr
NjMsNjEgQEAgR3JhZGllbnQ6On5HcmFkaWVudCgpCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiB9
CiAKLXZvaWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRT
aXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykK
K2F1dG8gR3JhZGllbnQ6OnR5cGUoKSBjb25zdCAtPiBUeXBlCiB7Ci0gICAgaWYgKG1fcmFkaWFs
KQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9kYXRhLAorICAg
ICAgICBbXSAoY29uc3QgTGluZWFyRGF0YSYpIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlOjpM
aW5lYXI7CisgICAgICAgIH0sCisgICAgICAgIFtdIChjb25zdCBSYWRpYWxEYXRhJikgeworICAg
ICAgICAgICAgcmV0dXJuIFR5cGU6OlJhZGlhbDsKKyAgICAgICAgfQorICAgICk7Cit9CiAKK3Zv
aWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiBz
aXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykKK3sKICAg
ICBpZiAoc3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghc3Bh
Y2luZy5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcDAueCgpID09IG1f
cDEueCgpKSB7Ci0gICAgICAgIHNpemUuc2V0V2lkdGgoMSk7Ci0gICAgICAgIHNyY1JlY3Quc2V0
V2lkdGgoMSk7Ci0gICAgICAgIHNyY1JlY3Quc2V0WCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAobV9wMC55KCkgIT0gbV9wMS55KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNpemUuc2V0SGVpZ2h0KDEpOwotICAgIHNyY1JlY3Quc2V0SGVpZ2h0KDEpOwotICAgIHNyY1Jl
Y3Quc2V0WSgwKTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25z
dCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBpZiAoZGF0YS5wb2ludDAueCgpID09
IGRhdGEucG9pbnQxLngoKSkgeworICAgICAgICAgICAgICAgIHNpemUuc2V0V2lkdGgoMSk7Cisg
ICAgICAgICAgICAgICAgc3JjUmVjdC5zZXRXaWR0aCgxKTsKKyAgICAgICAgICAgICAgICBzcmNS
ZWN0LnNldFgoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRhdGEucG9pbnQwLnkoKSAhPSBkYXRhLnBvaW50MS55KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBzaXplLnNldEhlaWdodCgxKTsKKyAgICAg
ICAgICAgIHNyY1JlY3Quc2V0SGVpZ2h0KDEpOworICAgICAgICAgICAgc3JjUmVjdC5zZXRZKDAp
OworICAgICAgICB9LAorICAgICAgICBbXSAoY29uc3QgUmFkaWFsRGF0YSYpIHsKKyAgICAgICAg
fQorICAgICk7Cit9CisKK2Jvb2wgR3JhZGllbnQ6OmlzWmVyb1NpemUoKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgW10gKGNvbnN0IExpbmVhckRh
dGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnBvaW50MC54KCkgPT0gZGF0YS5w
b2ludDEueCgpICYmIGRhdGEucG9pbnQwLnkoKSA9PSBkYXRhLnBvaW50MS55KCk7CisgICAgICAg
IH0sCisgICAgICAgIFtdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZGF0YS5wb2ludDAueCgpID09IGRhdGEucG9pbnQxLngoKSAmJiBkYXRhLnBvaW50MC55
KCkgPT0gZGF0YS5wb2ludDEueSgpICYmIGRhdGEuc3RhcnRSYWRpdXMgPT0gZGF0YS5lbmRSYWRp
dXM7CisgICAgICAgIH0KKyAgICApOwogfQogCiB2b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3Ao
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9zdG9wcy5hcHBlbmQo
Q29sb3JTdG9wKG9mZnNldCwgY29sb3IpKTsKLQotICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsK
LSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLQotICAgIGludmFsaWRhdGVIYXNoKCk7CisgICAgYWRk
Q29sb3JTdG9wKHsgb2Zmc2V0LCBjb2xvciB9KTsKIH0KIAogdm9pZCBHcmFkaWVudDo6YWRkQ29s
b3JTdG9wKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3ApCkBAIC0xMDksOCArMTI1LDE4
IEBAIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWUKICAgICBtX3N0b3Bz
LmFwcGVuZChzdG9wKTsKIAogICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsKKwogICAgIHBsYXRm
b3JtRGVzdHJveSgpOworICAgIGludmFsaWRhdGVIYXNoKCk7Cit9CisKK3ZvaWQgR3JhZGllbnQ6
OnNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYgc3RvcHMpCit7CisgICAgbV9z
dG9wcyA9IFdURk1vdmUoc3RvcHMpOworCisgICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7CiAKKyAg
ICBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICBpbnZhbGlkYXRlSGFzaCgpOwogfQogCkBAIC0xMzAs
NyArMTU2LDYgQEAgdm9pZCBHcmFkaWVudDo6c29ydFN0b3BzSWZOZWNlc3NhcnkoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9w
cy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLQogICAgIGludmFsaWRhdGVIYXNoKCk7CiB9CiAKQEAg
LTE3MywxNCArMTk4LDE0IEBAIHVuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIG1fY2FjaGVkSGFzaDsKIAogICAgIHN0cnVjdCB7Ci0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgICAgIEZsb2F0UG9pbnQg
cDA7Ci0gICAgICAgIEZsb2F0UG9pbnQgcDE7Ci0gICAgICAgIGZsb2F0IHIwOwotICAgICAgICBm
bG9hdCByMTsKKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7CisgICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzOwor
ICAgICAgICBmbG9hdCBlbmRSYWRpdXM7CiAgICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvOwogICAg
ICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Q7Ci0gICAgICAgIGJvb2wgcmFk
aWFsOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
OwogICAgIH0gcGFyYW1ldGVyczsKIAogICAgIC8vIFN0cmluZ0hhc2hlciByZXF1aXJlcyB0aGF0
IHRoZSBtZW1vcnkgaXQgaGFzaGVzIGJlIGEgbXVsdGlwbGUgb2YgdHdvIGluIHNpemUuCkBAIC0x
OTAsMTQgKzIxNSwyNyBAQCB1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CiAgICAgLy8g
RW5zdXJlIHRoYXQgYW55IHBhZGRpbmcgaW4gdGhlIHN0cnVjdCBpcyB6ZXJvLWZpbGxlZCwgc28g
aXQgd2lsbCBub3QgYWZmZWN0IHRoZSBoYXNoIHZhbHVlLgogICAgIG1lbXNldCgmcGFyYW1ldGVy
cywgMCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKICAgICAKLSAgICBwYXJhbWV0ZXJzLmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbiA9IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAg
IHBhcmFtZXRlcnMucDAgPSBtX3AwOwotICAgIHBhcmFtZXRlcnMucDEgPSBtX3AxOwotICAgIHBh
cmFtZXRlcnMucjAgPSBtX3IwOwotICAgIHBhcmFtZXRlcnMucjEgPSBtX3IxOwotICAgIHBhcmFt
ZXRlcnMuYXNwZWN0UmF0aW8gPSBtX2FzcGVjdFJhdGlvOworICAgIFdURjo6c3dpdGNoT24obV9k
YXRhLAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOworICAgICAgICAgICAg
cGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50MTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
c3RhcnRSYWRpdXMgPSAwOworICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSAwOwor
ICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IDA7CisgICAgICAgICAgICBwYXJh
bWV0ZXJzLnR5cGUgPSBUeXBlOjpMaW5lYXI7CisgICAgICAgIH0sCisgICAgICAgIFsmcGFyYW1l
dGVyc10gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
cG9pbnQwID0gZGF0YS5wb2ludDA7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MSA9IGRh
dGEucG9pbnQxOworICAgICAgICAgICAgcGFyYW1ldGVycy5zdGFydFJhZGl1cyA9IGRhdGEuc3Rh
cnRSYWRpdXM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmVuZFJhZGl1cyA9IGRhdGEuZW5kUmFk
aXVzOworICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IGRhdGEuYXNwZWN0UmF0
aW87CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnR5cGUgPSBUeXBlOjpSYWRpYWw7CisgICAgICAg
IH0KKyAgICApOworCiAgICAgcGFyYW1ldGVycy5zcHJlYWRNZXRob2QgPSBtX3NwcmVhZE1ldGhv
ZDsKLSAgICBwYXJhbWV0ZXJzLnJhZGlhbCA9IG1fcmFkaWFsOworICAgIHBhcmFtZXRlcnMuZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247
CiAKICAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzSGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eSgmcGFyYW1ldGVycywgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKICAgICB1bnNpZ25lZCBzdG9wSGFz
aCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXpl
KCkgKiBzaXplb2YoQ29sb3JTdG9wKSk7CkBAIC0yMDcsNCArMjQ1LDQgQEAgdW5zaWduZWQgR3Jh
ZGllbnQ6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CiB9CiAKLX0gLy9u
YW1lc3BhY2UKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjMgKzI1LDIwIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEdyYWRpZW50X2gKLSNkZWZpbmUgR3JhZGllbnRf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFu
dC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKLQogdHlwZWRlZiBz
dHJ1Y3QgQ0dDb250ZXh0KiBDR0NvbnRleHRSZWY7Ci0KIHR5cGVkZWYgc3RydWN0IENHR3JhZGll
bnQqIENHR3JhZGllbnRSZWY7CiB0eXBlZGVmIENHR3JhZGllbnRSZWYgUGxhdGZvcm1HcmFkaWVu
dDsKLQogI2VsaWYgVVNFKERJUkVDVDJEKQogaW50ZXJmYWNlIElEMkQxQnJ1c2g7CiBpbnRlcmZh
Y2UgSUQyRDFSZW5kZXJUYXJnZXQ7CkBAIC01NSwxNTIgKzUyLDEwOCBAQCB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtR3JhZGllbnQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENv
bG9yOwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0K
LSAgICBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRpZW50PiB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9h
dFJlY3Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIEdyYWRpZW50IDogcHVibGlj
IFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsKK3B1YmxpYzoKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRD
b2xvciAtIEEgY29sb3Igc3RvcCBuZWVkcyBhIG5vdGlvbiBvZiBjb2xvciBzcGFjZS4KKyAgICBz
dHJ1Y3QgQ29sb3JTdG9wIHsKKyAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OworICAgICAgICBD
b2xvciBjb2xvcjsKKworICAgICAgICBDb2xvclN0b3AoKSA9IGRlZmF1bHQ7CisgICAgICAgIENv
bG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgICAgIDog
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgY29sb3IoY29sb3IpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KHAwLCBwMSkpOwogICAgICAg
ICB9Ci0gICAgICAgIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50
JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNw
ZWN0UmF0aW8gPSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBHcmFkaWVudChwMCwgcjAsIHAxLCByMSwgYXNwZWN0UmF0aW8pKTsKLSAgICAgICAgfQotICAg
ICAgICBXRUJDT1JFX0VYUE9SVCB+R3JhZGllbnQoKTsKLQotICAgICAgICBzdHJ1Y3QgQ29sb3JT
dG9wOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChjb25zdCBDb2xv
clN0b3AmKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQs
IGNvbnN0IENvbG9yJik7CisgICAgfTsKIAotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7
CisgICAgdXNpbmcgQ29sb3JTdG9wVmVjdG9yID0gVmVjdG9yPENvbG9yU3RvcCwgMj47CiAKLSAg
ICAgICAgYm9vbCBpc1JhZGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWFsOyB9Ci0gICAgICAg
IGJvb2wgaXNaZXJvU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcDAueCgpID09IG1fcDEueCgpICYm
IG1fcDAueSgpID09IG1fcDEueSgpICYmICghbV9yYWRpYWwgfHwgbV9yMCA9PSBtX3IxKTsgfQor
ICAgIHN0cnVjdCBMaW5lYXJEYXRhIHsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgIH07CiAKLSAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcDAoKSBjb25zdCB7IHJldHVybiBtX3AwOyB9Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsgfQorICAgIHN0cnVjdCBSYWRpYWxEYXRhIHsKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAg
ICAgICBmbG9hdCBzdGFydFJhZGl1czsKKyAgICAgICAgZmxvYXQgZW5kUmFkaXVzOworICAgICAg
ICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8g
aGVpZ2h0LgorICAgIH07CiAKLSAgICAgICAgdm9pZCBzZXRQMChjb25zdCBGbG9hdFBvaW50JiBw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wMCA9PSBwKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9wMCA9IHA7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGludmFsaWRhdGVIYXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2V0UDEoY29uc3QgRmxvYXRQb2ludCYgcCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1fcDEgPT0gcCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fcDEgPSBwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnZh
bGlkYXRlSGFzaCgpOwotICAgICAgICB9CisgICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8TGluZWFy
RGF0YSwgUmFkaWFsRGF0YT47CiAKLSAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXMoKSBjb25zdCB7
IHJldHVybiBtX3IwOyB9Ci0gICAgICAgIGZsb2F0IGVuZFJhZGl1cygpIGNvbnN0IHsgcmV0dXJu
IG1fcjE7IH0KKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBMaW5lYXIsIFJhZGlhbCB9OwogCi0gICAg
ICAgIHZvaWQgc2V0U3RhcnRSYWRpdXMoZmxvYXQgcikKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1fcjAgPT0gcikKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgc3RhdGljIFJlZjxH
cmFkaWVudD4gY3JlYXRlKExpbmVhckRhdGEmJik7CisgICAgc3RhdGljIFJlZjxHcmFkaWVudD4g
Y3JlYXRlKFJhZGlhbERhdGEmJik7CiAKLSAgICAgICAgICAgIG1fcjAgPSByOworICAgIFdFQkNP
UkVfRVhQT1JUIH5HcmFkaWVudCgpOwogCi0gICAgICAgICAgICBpbnZhbGlkYXRlSGFzaCgpOwot
ICAgICAgICB9CisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRFbmRS
YWRpdXMoZmxvYXQgcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcjEgPT0gcikKLSAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIGJv
b2wgaXNaZXJvU2l6ZSgpIGNvbnN0OwogCi0gICAgICAgICAgICBtX3IxID0gcjsKKyAgICBjb25z
dCBEYXRhJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKLSAgICAgICAgICAgIGlu
dmFsaWRhdGVIYXNoKCk7Ci0gICAgICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENv
bG9yU3RvcChjb25zdCBDb2xvclN0b3AmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENv
bG9yU3RvcChmbG9hdCwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHNldFNvcnRlZENvbG9yU3Rv
cHMoQ29sb3JTdG9wVmVjdG9yJiYpOwogCi0gICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29u
c3QgeyByZXR1cm4gbV9hc3BlY3RSYXRpbzsgfQorICAgIGNvbnN0IENvbG9yU3RvcFZlY3RvciYg
c3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzOyB9CiAKLSNpZiBVU0UoV0lOR0RJKQotICAg
ICAgICBjb25zdCBWZWN0b3I8Q29sb3JTdG9wLCAyPiYgZ2V0U3RvcHMoKSBjb25zdDsKLSNlbHNl
Ci0gICAgICAgIFBsYXRmb3JtR3JhZGllbnQgcGxhdGZvcm1HcmFkaWVudCgpOwotI2VuZGlmCisg
ICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOworICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0
aG9kOyB9CiAKLSAgICAgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBBIGNvbG9yIHN0b3Ag
bmVlZHMgYSBub3Rpb24gb2YgY29sb3Igc3BhY2UuCi0gICAgICAgIHN0cnVjdCBDb2xvclN0b3Ag
ewotICAgICAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0KLSAgICAgICAgICAgIENvbG9yU3RvcCgpIHsgfQotICAgICAgICAgICAgQ29sb3JTdG9w
KGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICAgICAgICAgIDogb2Zm
c2V0KG9mZnNldCkKLSAgICAgICAgICAgICAgICAsIGNvbG9yKGNvbG9yKQotICAgICAgICAgICAg
ICAgIHsgfQotICAgICAgICB9OwotCi0gICAgICAgIGNvbnN0IFZlY3RvcjxDb2xvclN0b3AsIDI+
JiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KLQotICAgICAgICB2b2lkIHNldFN0
b3BzU29ydGVkKGJvb2wgcykgeyBtX3N0b3BzU29ydGVkID0gczsgfQotICAgICAgICAKLSAgICAg
ICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwotICAgICAgICBH
cmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSB7IHJldHVybiBtX3NwcmVhZE1ldGhv
ZDsgfQotICAgICAgICB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwotICAgICAgICAvLyBRdCBh
bmQgQ0cgdHJhbnNmb3JtIHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX2dyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsgfQorICAgIC8vIENHIG5lZWRzIHRvIHRyYW5zZm9ybSB0aGUgZ3Jh
ZGllbnQgYXQgZHJhdyB0aW1lLgorICAgIHZvaWQgc2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7CisgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4g
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAotICAgICAgICB2b2lkIGZpbGwoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZvaWQgYWRqdXN0UGFy
YW1ldGVyc0ZvclRpbGVkRHJhd2luZyhGbG9hdFNpemUmLCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcpOworICAgIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxv
YXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAotICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUhhc2goKSB7
IG1fY2FjaGVkSGFzaCA9IDA7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgdm9p
ZCBpbnZhbGlkYXRlSGFzaCgpIHsgbV9jYWNoZWRIYXNoID0gMDsgfQogCiAjaWYgVVNFKENHKQot
ICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7Ci0gICAgICAgIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2
b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIFBs
YXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVu
ZGVyVGFyZ2V0Kik7CisgICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50
SWZOZWNlc3NhcnkoSUQyRDFSZW5kZXJUYXJnZXQqKTsKICNlbGlmIFVTRShDQUlSTykKLSAgICAg
ICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFs
cGhhKTsKKyAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQg
Z2xvYmFsQWxwaGEpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICBXRUJDT1JFX0VY
UE9SVCBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
OwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0aW8pOwotCi0gICAgICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gbnVsbHB0cjsgfQotICAgICAgICB2
b2lkIHBsYXRmb3JtRGVzdHJveSgpOworcHJpdmF0ZToKKyAgICBHcmFkaWVudChMaW5lYXJEYXRh
JiYpOworICAgIEdyYWRpZW50KFJhZGlhbERhdGEmJik7CisKKyAgICBQbGF0Zm9ybUdyYWRpZW50
IHBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVu
dCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgICAgIHZv
aWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5
KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJ
RDJEMVJlbmRlclRhcmdldCopOworICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRl
clRhcmdldCopOwogI2VuZGlmCiAKLSAgICAgICAgLy8gS2VlcCBhbnkgcGFyYW1ldGVycyByZWxl
dmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRoIHRoZSBzdHJ1Y3R1cmUgaW4gR3JhZGllbnQ6
Omhhc2goKS4KLSAgICAgICAgYm9vbCBtX3JhZGlhbDsKLSAgICAgICAgRmxvYXRQb2ludCBtX3Aw
OwotICAgICAgICBGbG9hdFBvaW50IG1fcDE7Ci0gICAgICAgIGZsb2F0IG1fcjA7Ci0gICAgICAg
IGZsb2F0IG1fcjE7Ci0gICAgICAgIGZsb2F0IG1fYXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRp
Y2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KLSAgICAgICAgbXV0YWJsZSBWZWN0b3I8Q29s
b3JTdG9wLCAyPiBtX3N0b3BzOwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsK
LSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBEYXRhIG1f
ZGF0YTsKIAotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaDsKKyAgICBtdXRh
YmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOworICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29y
dGVkIHsgZmFsc2UgfTsKKyAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7
IFNwcmVhZE1ldGhvZFBhZCB9OworICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbjsKIAotICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7Ci0g
ICAgfTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaCB7IDAgfTsKIAotfSAvL25h
bWVzcGFjZQorICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFkaWVudDsKK307CiAKLSNlbmRpZgor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTIs
NyArODUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ3JhZGllbnQuZmlsbCh0aGlzLCByZWN0KTsKKyAg
ICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDE0
IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIGNhaXJvX3BhdHRlcm5fdCog
R3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0g
ICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudDsKLSAgICBpZiAobV9yYWRpYWwpCi0gICAgICAg
IGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKG1fcDAueCgpLCBtX3AwLnko
KSwgbV9yMCwgbV9wMS54KCksIG1fcDEueSgpLCBtX3IxKTsKLSAgICBlbHNlCi0gICAgICAgIGdy
YWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwg
bV9wMS54KCksIG1fcDEueSgpKTsKKyAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RG
Ojpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkg
LT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9j
cmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50
MS54KCksIGRhdGEucG9pbnQxLnkoKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3Qg
UmFkaWFsRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgICAgICByZXR1
cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2lu
dDAueSgpLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnko
KSwgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICB9CisgICAgKTsKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRl
ZCgpKSB7CkBAIC03OCwxNCArODEsMTQgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3Jl
YXRlUGxhdGZvcgogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotdm9pZCBHcmFkaWVudDo6Zmls
bChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcGxhdGZvcm1HcmFkaWVudCA9
IGFkb3B0UmVmKGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMS4wKSk7CiAKLSAgICBjb250ZXh0LT5z
YXZlKCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBD
YWlybzo6ZmlsbFJlY3QoKmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBwbGF0Zm9y
bUdyYWRpZW50LmdldCgpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgY29udGV4dC5z
YXZlKCk7CisgICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIENh
aXJvOjpmaWxsUmVjdCgqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcGxhdGZvcm1H
cmFkaWVudC5nZXQoKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYWRpZW50Q0cuY3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEdyYWRpZW50OjpwbGF0Zm9y
bURlc3Ryb3koKQogewogICAgIENHR3JhZGllbnRSZWxlYXNlKG1fZ3JhZGllbnQpOwotICAgIG1f
Z3JhZGllbnQgPSAwOworICAgIG1fZ3JhZGllbnQgPSBudWxscHRyOwogfQogCiBDR0dyYWRpZW50
UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKQEAgLTkyLDQzICs5Miw0NSBAQCBDR0dy
YWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50CiAgICAgcmV0dXJuIG1fZ3JhZGll
bnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGNvbnRleHQtPmNsaXAo
cmVjdCk7CisgICAgY29udGV4dC5jbGlwKHJlY3QpOwogICAgIHBhaW50KGNvbnRleHQpOwogfQog
Ci12b2lkIEdyYWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdy
YWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQ0dDb250ZXh0
UmVmIGN0eCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHBhaW50KGN0eCk7Cisg
ICAgcGFpbnQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhZGllbnQ6
OnBhaW50KENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBDR0dyYWRpZW50RHJhd2luZ09wdGlvbnMg
ZXh0ZW5kT3B0aW9ucyA9IGtDR0dyYWRpZW50RHJhd3NCZWZvcmVTdGFydExvY2F0aW9uIHwga0NH
R3JhZGllbnREcmF3c0FmdGVyRW5kTG9jYXRpb247Ci0gICAgaWYgKCFtX3JhZGlhbCkgewotICAg
ICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQoY29udGV4dCwgcGxhdGZvcm1HcmFkaWVu
dCgpLCBtX3AwLCBtX3AxLCBleHRlbmRPcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGJvb2wgbmVlZFNjYWxpbmcgPSBhc3BlY3RSYXRpbygpICE9IDE7Ci0gICAgaWYgKG5l
ZWRTY2FsaW5nKSB7Ci0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAg
ICAgIC8vIFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZl
ciBzY2FsZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCi0gICAgICAgIC8vIGZvciB3aGljaCBt
X3AwID09IG1fcDEuCi0gICAgICAgIEFTU0VSVChtX3AwID09IG1fcDEpOwotICAgICAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgbV9wMC54KCksIG1fcDAueSgpKTsKLSAgICAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgMSAvIGFzcGVjdFJhdGlvKCkpOwotICAgICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLW1fcDAueCgpLCAtbV9wMC55KCkpOwot
ICAgIH0KIAotICAgIENHQ29udGV4dERyYXdSYWRpYWxHcmFkaWVudChjb250ZXh0LCBwbGF0Zm9y
bUdyYWRpZW50KCksIG1fcDAsIG1fcjAsIG1fcDEsIG1fcjEsIGV4dGVuZE9wdGlvbnMpOwotCi0g
ICAgaWYgKG5lZWRTY2FsaW5nKQotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRl
eHQpOworICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAorICAgICAgICBbJl0gKGNvbnN0IExpbmVh
ckRhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMaW5lYXJHcmFkaWVudChw
bGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgZGF0YS5wb2ludDAsIGRhdGEucG9p
bnQxLCBleHRlbmRPcHRpb25zKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSYWRp
YWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBib29sIG5lZWRTY2FsaW5nID0gZGF0YS5hc3Bl
Y3RSYXRpbyAhPSAxOworICAgICAgICAgICAgaWYgKG5lZWRTY2FsaW5nKSB7CisgICAgICAgICAg
ICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOworICAgICAgICAgICAg
ICAgIC8vIFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZl
ciBzY2FsZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCisgICAgICAgICAgICAgICAgLy8gZm9y
IHdoaWNoIHBvaW50MCA9PSBwb2ludDEuCisgICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEucG9p
bnQwID09IGRhdGEucG9pbnQxKTsKKyAgICAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0ocGxhdGZvcm1Db250ZXh0LCBkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSk7Cisg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0LCAxLCAxIC8g
ZGF0YS5hc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCwgLWRhdGEucG9pbnQwLngoKSwgLWRhdGEucG9pbnQwLnkoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdSYWRpYWxHcmFkaWVudChw
bGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgZGF0YS5wb2ludDAsIGRhdGEuc3Rh
cnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cywgZXh0ZW5kT3B0aW9ucyk7CisK
KyAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKKyAgICAgICAgICAgICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCk7CisgICAgICAgIH0KKyAgICApOwogfQogCi19
IC8vbmFtZXNwYWNlCit9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNp
b24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3Rh
dGUuZmlsbEdyYWRpZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CkBAIC04
NDgsNyArODQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAog
ICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7
CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250
ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlz
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODk2LDcgKzg5Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVjdCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnQt
PmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFp
bnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzIzLDcg
KzEzMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAg
ICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRy
YW5zZm9ybSgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRo
aXMpOworICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYyICs3OCw3OCBA
QCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgICAgIG1fZ3Jh
ZGllbnQgPSBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChtX3JhZGlhbCkgewotICAgICAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gcDEoKSAtIHAwKCk7Ci0gICAgICAgIElEMkQxUmFkaWFsR3JhZGll
bnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICBmbG9hdCByYWRpdXNY
ID0gZW5kUmFkaXVzKCkgKyBvZmZzZXQud2lkdGgoKTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWSA9
IHJhZGl1c1ggLyBtX2FzcGVjdFJhdGlvOwotICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3Jl
YXRlUmFkaWFsR3JhZGllbnRCcnVzaCgKLSAgICAgICAgICAgIEQyRDE6OlJhZGlhbEdyYWRpZW50
QnJ1c2hQcm9wZXJ0aWVzKHAwKCksIEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9mZnNl
dC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAotICAgICAgICAgICAgRDJEMTo6QnJ1c2hQ
cm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAm
cmFkaWFsR3JhZGllbnQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICAgICAgbV9ncmFkaWVudCA9IHJhZGlhbEdyYWRpZW50OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIElEMkQxTGluZWFyR3JhZGllbnRCcnVzaCogbGluZWFyR3JhZGllbnQgPSBudWxscHRyOwot
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlTGluZWFyR3JhZGllbnRCcnVzaCgKLSAg
ICAgICAgICAgIEQyRDE6OkxpbmVhckdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKHAwKCksIHAxKCkp
LAotICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxl
Y3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAmbGluZWFyR3JhZGllbnQpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgbV9ncmFkaWVudCA9IGxpbmVhckdy
YWRpZW50OwotICAgIH0KKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChj
b25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50
QnJ1c2gqIGxpbmVhckdyYWRpZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGhyID0gcmVuZGVy
VGFyZ2V0LT5DcmVhdGVMaW5lYXJHcmFkaWVudEJydXNoKAorICAgICAgICAgICAgICAgIEQyRDE6
OkxpbmVhckdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSks
CisgICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENv
bGxlY3Rpb24uZ2V0KCksCisgICAgICAgICAgICAgICAgJmxpbmVhckdyYWRpZW50KTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICAgICAgbV9ncmFk
aWVudCA9IGxpbmVhckdyYWRpZW50OworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJh
ZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBkYXRhLnBv
aW50MSAtIGRhdGEucG9pbnQwOworICAgICAgICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNo
KiByYWRpYWxHcmFkaWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBmbG9hdCByYWRpdXNYID0g
ZGF0YS5lbmRSYWRpdXMgKyBvZmZzZXQud2lkdGgoKTsKKyAgICAgICAgICAgIGZsb2F0IHJhZGl1
c1kgPSByYWRpdXNYIC8gZGF0YS5hc3BlY3RSYXRpbzsKKyAgICAgICAgICAgIGhyID0gcmVuZGVy
VGFyZ2V0LT5DcmVhdGVSYWRpYWxHcmFkaWVudEJydXNoKAorICAgICAgICAgICAgICAgIEQyRDE6
OlJhZGlhbEdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKHAwKCksIEQyRDE6OlBvaW50MkYob2Zmc2V0
LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAorICAgICAgICAg
ICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdl
dCgpLAorICAgICAgICAgICAgICAgICZyYWRpYWxHcmFkaWVudCk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgICAgIG1fZ3JhZGllbnQgPSByYWRp
YWxHcmFkaWVudDsKKyAgICAgICAgfQorICAgICk7CiAKICAgICBoYXNoKCk7CiB9CiAKLXZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gZDJkQ29udGV4dCA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwotCi0gICAgYm9vbCBuZWVkU2NhbGluZyA9IGFzcGVjdFJhdGlvKCkg
IT0gMTsKLSAgICBpZiAobmVlZFNjYWxpbmcpIHsKLSAgICAgICAgY29udGV4dC0+c2F2ZSgpOwot
ICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5
IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAotICAgICAgICAvLyBmb3Igd2hp
Y2ggbV9wMCA9PSBtX3AxLgotICAgICAgICBBU1NFUlQobV9wMCA9PSBtX3AxKTsKLQotICAgICAg
ICBEMkQxX01BVFJJWF8zWDJfRiBjdG0gPSB7IH07Ci0gICAgICAgIGQyZENvbnRleHQtPkdldFRy
YW5zZm9ybSgmY3RtKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7
Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV9wMCk7Ci0gICAgICAgIHRyYW5zZm9ybS5z
Y2FsZU5vblVuaWZvcm0oMS4wLCAxLjAgLyBhc3BlY3RSYXRpbygpKTsKLSAgICAgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgtbV9wMCk7Ci0KLSAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3Jt
KGN0bSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCi0g
ICAgICAgIGdlbmVyYXRlR3JhZGllbnQoZDJkQ29udGV4dCk7Ci0KLSAgICBkMmRDb250ZXh0LT5T
ZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKLQotICAgIGNvbnN0IEQyRDFfUkVD
VF9GIGQyZFJlY3QgPSByZWN0OwotICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJl
Y3QsIG1fZ3JhZGllbnQpOworICAgIGF1dG8gZDJkQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCk7CiAKLSAgICBpZiAobmVlZFNjYWxpbmcpCi0gICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBMaW5l
YXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFk
aWVudCkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOworCisg
ICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9f
KTsKKworICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CisgICAg
ICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsK
KyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICBib29sIG5lZWRTY2FsaW5nID0gZGF0YS5hc3BlY3RSYXRpbyAhPSAxOworICAgICAg
ICAgICAgaWYgKG5lZWRTY2FsaW5nKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5zYXZlKCk7
CisgICAgICAgICAgICAgICAgLy8gU2NhbGUgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBncmFkaWVu
dC4gV2Ugb25seSBldmVyIHNjYWxlIG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cywKKyAgICAgICAg
ICAgICAgICAvLyBmb3Igd2hpY2ggbV9wMCA9PSBtX3AxLgorICAgICAgICAgICAgICAgIEFTU0VS
VChkYXRhLnBvaW50MCA9PSBkYXRhLnBvaW50MSk7CisKKyAgICAgICAgICAgICAgICBEMkQxX01B
VFJJWF8zWDJfRiBjdG0gPSB7IH07CisgICAgICAgICAgICAgICAgZDJkQ29udGV4dC0+R2V0VHJh
bnNmb3JtKCZjdG0pOworCisgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bShjdG0pOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGF0YS5wb2ludDAp
OworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMS4wLCAxLjAgLyBk
YXRhLmFzcGVjdFJhdGlvKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1k
YXRhLnBvaW50MCk7CisKKyAgICAgICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUcmFuc2Zvcm0o
Y3RtKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwg
IW1fZ3JhZGllbnQpCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0
KTsKKworICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBf
X0xJTkVfXyk7CisKKyAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0
OworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9ncmFk
aWVudCk7CisKKyAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgfQorICAgICk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDIyNTAzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtODk3LDcgKzg5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jl
c3NCYXIoY28KICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKIAogICAg
IGNvbnN0IGZsb2F0IHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gPSByZWN0LnkoKSArIHZlcnRp
Y2FsT2Zmc2V0OwotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSk7CisgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3Qu
eCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVy
dGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7CiAgICAg
c3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDB4OGQsIDB4OGQsIDB4OGQp
KTsKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIENvbG9yKDB4ZWUsIDB4
ZWUsIDB4ZWUpKTsKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIENvbG9y
KDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChib3JkZXIsIHJvdW5kZWRDb3JuZXJSYWRpdXMsIHJv
dW5kZWRDb3JuZXJSYWRpdXMsIHJvdW5kZWRDb3JuZXJSYWRpdXMsIHJvdW5kZWRDb3JuZXJSYWRp
dXMpKTsKIAogICAgIGZsb2F0IHVwcGVyR3JhZGllbnRIZWlnaHQgPSBwcm9ncmVzc0JhckhlaWdo
dCAvIDIuOwotICAgIFJlZlB0cjxHcmFkaWVudD4gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50Ojpj
cmVhdGUoRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
NSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBl
ckdyYWRpZW50SGVpZ2h0IC0gMS41KSk7CisgICAgUmVmUHRyPEdyYWRpZW50PiB1cHBlckdyYWRp
ZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAt
IDEuNSkgfSk7CiAgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTMz
LCAxMzMsIDEzMywgMTg4KSk7CiAgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwg
Q29sb3IoMTgsIDE4LCAxOCwgNTEpKTsKICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCh1cHBl
ckdyYWRpZW50LnJlbGVhc2VOb25OdWxsKCkpOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgLy8gMikgRHJhdyB0aGUg
cHJvZ3Jlc3MgYmFyLgogICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJlbmRlclBy
b2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKICAgICAgICAgZG91YmxlIGJhcldpZHRoID0g
cG9zaXRpb24gKiByZWN0LndpZHRoKCk7Ci0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSk7CisgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJE
YXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
NSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9n
cmVzc0JhckhlaWdodCAtIDEpIH0pOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuMCwgQ29sb3IoMTk1LCAyMTcsIDI0NykpOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDAuNDUsIENvbG9yKDExOCwgMTY0LCAyMjgpKTsKICAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjQ5LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7CkBAIC05MzgsNyArOTM4
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0KSk7CiAgICAg
ICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KGJhckdyYWRpZW50LnJlbGVhc2VOb25OdWxsKCkp
OwogCi0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyU3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSk7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyU3Ryb2tlR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQocmVjdC54
KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0p
OwogICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoOTUs
IDEwNywgMTgzKSk7CiAgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41
LCBDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOwogICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMzgsIDEwNCwgMTY2KSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNTAzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgRmxvYXRQb2ludCBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZQogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxk
R3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEpIGNvbnN0CiB7Ci0gICAgZ3JhZGll
bnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludChtX2F0dHJpYnV0
ZXMpLCBlbmRQb2ludChtX2F0dHJpYnV0ZXMpKTsKKyAgICBncmFkaWVudERhdGEtPmdyYWRpZW50
ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IHN0YXJ0UG9pbnQobV9h
dHRyaWJ1dGVzKSwgZW5kUG9pbnQobV9hdHRyaWJ1dGVzKSB9KTsKICAgICBncmFkaWVudERhdGEt
PmdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2QocGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlw
ZShtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpKTsKICAgICBhZGRTdG9wcyhncmFkaWVudERh
dGEsIG1fYXR0cmlidXRlcy5zdG9wcygpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmNwcAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMTEgKzYzLDcgQEAgZmxvYXQgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6
ZgogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQo
R3JhZGllbnREYXRhKiBncmFkaWVudERhdGEpIGNvbnN0CiB7Ci0gICAgZ3JhZGllbnREYXRhLT5n
cmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUodGhpcy0+Zm9jYWxQb2ludChtX2F0dHJpYnV0ZXMp
LAotICAgICAgICB0aGlzLT5mb2NhbFJhZGl1cyhtX2F0dHJpYnV0ZXMpLAotICAgICAgICB0aGlz
LT5jZW50ZXJQb2ludChtX2F0dHJpYnV0ZXMpLAotICAgICAgICB0aGlzLT5yYWRpdXMobV9hdHRy
aWJ1dGVzKSk7Ci0KKyAgICBncmFkaWVudERhdGEtPmdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShHcmFkaWVudDo6UmFkaWFsRGF0YSB7IHRoaXMtPmZvY2FsUG9pbnQobV9hdHRyaWJ1dGVzKSwg
dGhpcy0+Y2VudGVyUG9pbnQobV9hdHRyaWJ1dGVzKSwgdGhpcy0+Zm9jYWxSYWRpdXMobV9hdHRy
aWJ1dGVzKSwgdGhpcy0+cmFkaXVzKG1fYXR0cmlidXRlcyksIDEgfSk7CiAgICAgZ3JhZGllbnRE
YXRhLT5ncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKHBsYXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNW
R1R5cGUobV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKSk7CiAKICAgICBhZGRTdG9wcyhncmFk
aWVudERhdGEsIG1fYXR0cmlidXRlcy5zdG9wcygpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327350</attachid>
            <date>2017-11-19 14:03:43 -0800</date>
            <delta_ts>2017-11-19 15:06:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179595-20171119140342.patch</filename>
            <type>text/plain</type>
            <size>57432</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTAzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBAQAorMjAxNy0xMS0xOSAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENsZWFuIHVwIGdyYWRpZW50IGNvZGUg
aW4gcHJlcGFyYXRpb24gZm9yIGNvbmljIGdyYWRpZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgLSBTd2l0Y2hlcyBHcmFkaWVudCB0byB1c2UgYSBWYXJp
ZW50IHdpdGggdHlwZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHMgYW5kIG1ha2VzIHRoZSAKKyAgICAg
ICAgICBwb2ludHMgLyByYWRpaSBpbW11dGFibGUuCisgICAgICAgIC0gUmVwbGFjZXMgQ1NTR3Jh
ZGllbnRWYWx1ZTo6YWRkU3RvcHMgd2l0aCB0ZW1wbGF0ZSBmdW5jdGlvbiBDU1NHcmFkaWVudFZh
bHVlOjpjb21wdXRlU3RvcHMKKyAgICAgICAgICB3aGljaCBkaXNwYXRjaGVzIHRvIGEgaGVscGVy
IGFkb3B0b3Igc3RydWN0IHdoaWNoIGlzIHBhc3NlZCBpbiBmb3IgZ3JhZGllbnQgdHlwZSBzcGVj
aWZpYworICAgICAgICAgIHZhbHVlcywgcmF0aGVyIHRoYW4gc3dpdGNoaW5nIG9uIHR5cGUgaW4g
dGhlIGZ1bmN0aW9uIGl0c2VsZi4gSW4gYWRkaXRpb24sIHRoZSBmdW5jdGlvbiBubworICAgICAg
ICAgIGxvbmdlciBtdXRhdGVzIGEgR3JhZGllbnQsIGJ1dCByYXRoZXIgbXV0YXRlcyB0eXBlIHNw
ZWNpZmljIHRoZSBkYXRhIHN0cnVjdCAoZS5nLiBMaW5lYXIgb3IKKyAgICAgICAgICBSYWRpYWwg
Zm9yIG5vdykuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lYXJHcmFkaWVudEFkYXB0b3I6OkxpbmVhckdyYWRpZW50QWRhcHRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSYWRpYWxHcmFkaWVudEFkYXB0b3I6OlJhZGlhbEdyYWRpZW50
QWRhcHRvcik6CisKKyAgICAgICAgICAgIEFkZCBoZWxwZXIgc3RydWN0cyBmb3IgdGhlIG5vdyB0
ZW1wbGF0aXplZCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMgdGhhdAorICAgICAgICAg
ICAgaW1wbGVtZW50IHR5cGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAoV2Vi
Q29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKToKKyAgICAgICAgCisgICAgICAg
ICAgICBSZW5hbWVkIGZyb20gYWRkU3RvcHMuIE5vdyB0YWtlcyBhIEdyYWRpZW50QWRhcHRvciB3
cmFwcGVyIHdoaWNoIGFic3RyYWN0cyBvdXQKKyAgICAgICAgICAgIHRoZSBncmFkaWVudCB0eXBl
IHNwZWNpZmljIGZ1bmN0aW9ubGl0eS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NM
aW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KToKKyAgICAgICAgCisgICAg
ICAgICAgICBVcGRhdGUgdG8gY2FsbCBjb21wdXRlU3RvcHMgYW5kIHVzZSBuZXcgR3JhZGllbnQg
Y3JlYXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFs
dWUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBzaWduYXR1cmUgZm9y
IGNvbXB1dGVTdG9wcy4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3Jh
ZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRp
ZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBHcmFkaWVudCBj
cmVhdGUgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5
Rm9yQ2FudmFzR3JhZGllbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBnZXQg
Z3JhZGllbnQgcG9pbnQgLyByYWRpaSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkYXRhIGFjY2Vzc29y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OkdyYWRpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRh
dGUgY29uc3RydWN0b3JzIHRvIHRoZSBuZXcgZGF0YSBzdHJ1Y3RzLgorICAgICAgICAKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50Ojp0eXBlIGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAg
ICBBZGQgaGVscGVyIHRvIGdldCB0aGUgdHlwZSBvZiB0aGUgdmFyaWVudCwgbmVlZCBmb3IgaW5z
cGVjdG9yIGNvZGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFkanVz
dFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
OmlzWmVyb1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc2ggY29u
c3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSB0byBzd2l0Y2ggb24gdGhlIHVuZGVy
bHlpbmcgdmFyaWFudCB0byBnZXQgZGF0YSB2YWx1ZXMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6CisgICAgICAgIAorICAgICAgICAgICAgU2lt
cGxpZnkgYnkgaGF2aW5nIG9uZSBhZGRDb2xvclN0b3AgY2FsbCB0aGUgb3RoZXIuCisgICAgICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3BzKToK
KyAgICAgICAgCisgICAgICAgICAgICBBZGRlZC4gUmVwbGFjZXMgc2V0U3RvcHNTb3J0ZWQuIFVz
ZWQgbm93IHRoYXQgQ1NTR3JhZGllbnRWYWx1ZSBjb21wdXRlcyBhbmQgc29ydHMKKyAgICAgICAg
ICAgIGl0cyBjb2xvciBzdG9wcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGdyYWRpZW50LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpjcmVhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlcGxhY2UgY3JlYXRlIGZ1
bmN0aW9ucyB3aXRoIG9uZXMgdGhhdCB0YWtlIGRhdGEgc3RydWN0cy4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZGF0YSBjb25zdCk6CisKKyAgICAgICAgICAgIEFkZCBh
Y2Nlc3NvciBmb3IgdGhlIHVuZGVybHlpbmcgdmFyaWFudC4KKworICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OmlzUmFkaWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgCisgICAgICAgICAg
ICBSZXBsYWNlZCBieSB0eXBlIGFjY2Vzc29yLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpwMCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6cDEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFAw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c3RhcnRSYWRpdXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmVuZFJhZGl1cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0U3RhcnRSYWRpdXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldEVuZFJhZGl1cyk6IERlbGV0ZWQuCisgICAg
ICAgIAorICAgICAgICAgICAgUG9pbnQgYW5kIHJhZGlpIGFyZSBub3cgaW1tdXRhYmxlLgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTdG9wc1NvcnRlZCk6IERlbGV0
ZWQuCisgICAgICAgIAorICAgICAgICAgICAgUmVwbGFjZWQgYnkgc2V0U29ydGVkQ29sb3JTdG9w
cyBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNzQ29udGV4dCBieSBy
ZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBsYXRm
b3JtR3JhZGllbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8gc3dpdGNoIG9uIHRoZSB1bmRl
cmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAgICAgUGFzcyB0aGUgR3JhcGhpY3ND
b250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhZGllbnRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgbnVsbHB0ci4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgIAorICAgICAgICAg
ICAgUGFzcyB0aGUgR3JhcGhpY3NDb250ZXh0IGJ5IHJlZmVyZW5jZS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGFpbnQpOgorCisgICAgICAgICAgICBVcGRhdGUgdG8g
c3dpdGNoIG9uIHRoZSB1bmRlcmx5aW5nIHZhcmlhbnQgdG8gZ2V0IGRhdGEgdmFsdWVzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAKKyAgICAgICAgICAgIFBhc3MgdGhlIEdyYXBoaWNz
Q29udGV4dCBieSByZWZlcmVuY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50
OjpnZW5lcmF0ZUdyYWRpZW50KToKKworICAgICAgICAgICAgVXBkYXRlIHRvIHN3aXRjaCBvbiB0
aGUgdW5kZXJseWluZyB2YXJpYW50IHRvIGdldCBkYXRhIHZhbHVlcy4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgCisgICAgICAgICAgICBQYXNzIHRo
ZSBHcmFwaGljc0NvbnRleHQgYnkgcmVmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyYWRpZW50
IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgZm9yIG5ldyBHcmFkaWVudCBj
cmVhdGUgZnVuY3Rpb24gc2lnbmF0dXJlLgorCiAyMDE3LTExLTE4ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogcmVnaXN0cmF0aW9u
IGluIFdlYkNvcmU6OlNXU2VydmVySm9iUXVldWU6OnNjcmlwdENvbnRleHRTdGFydGVkKFNlcnZp
Y2VXb3JrZXJJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmNwcAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNTcgKzEzNSwxNTMgQEAgc3RhdGlj
IGlubGluZSBDb2xvciBpbnRlcnBvbGF0ZShjb25zdCBDbwogICAgIHJldHVybiBDb2xvcihyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKLXZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3Rv
cHMoR3JhZGllbnQmIGdyYWRpZW50LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQorY2xhc3MgTGluZWFyR3Jh
ZGllbnRBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMaW5lYXJHcmFkaWVudEFkYXB0
ZXIoR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisg
ICAgeworICAgIH0KKworICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5wb2ludDA7IH0KKyAgICBGbG9hdFBvaW50IGVuZFBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLnBvaW50MTsgfQorICAgIGZsb2F0IG1heEV4dGVudChmbG9hdCwgZmxvYXQpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKworICAgIHZvaWQgbm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNP
dXRzaWRlUmFuZ2UoVmVjdG9yPEdyYWRpZW50U3RvcD4mIHN0b3BzKQorICAgIHsKKyAgICAgICAg
ZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wcy5maXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQg
bGFzdE9mZnNldCA9IHN0b3BzLmxhc3QoKS5vZmZzZXQ7CisgICAgICAgIGlmIChmaXJzdE9mZnNl
dCAhPSBsYXN0T2Zmc2V0KSB7CisgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQg
LSBmaXJzdE9mZnNldDsKKworICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisg
ICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAoc3RvcC5vZmZzZXQgLSBmaXJzdE9mZnNldCkg
LyBzY2FsZTsKKworICAgICAgICAgICAgYXV0byBwMCA9IG1fZGF0YS5wb2ludDA7CisgICAgICAg
ICAgICBhdXRvIHAxID0gbV9kYXRhLnBvaW50MTsKKyAgICAgICAgICAgIG1fZGF0YS5wb2ludDAg
PSB7IHAwLngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngoKSAtIHAwLngoKSksIHAwLnkoKSArIGZp
cnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAwLnkoKSkgfTsKKyAgICAgICAgICAgIG1fZGF0YS5wb2lu
dDEgPSB7IHAxLngoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEu
eSgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS55KCkgLSBwMC55KCkpIH07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBUaGVyZSdzIGEgc2luZ2xlIHBvc2l0aW9uIHRoYXQgaXMg
b3V0c2lkZSB0aGUgc2NhbGUsIGNsYW1wIHRoZSBwb3NpdGlvbnMgdG8gMS4KKyAgICAgICAgICAg
IGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQorICAgICAgICAgICAgICAgIHN0b3Aub2Zmc2V0ID0g
MTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFkaWVudDo6TGluZWFyRGF0
YSYgbV9kYXRhOworfTsKKworY2xhc3MgUmFkaWFsR3JhZGllbnRBZGFwdGVyIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBSYWRpYWxHcmFkaWVudEFkYXB0ZXIoR3JhZGllbnQ6OlJhZGlhbERhdGEm
IGRhdGEpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIEZsb2F0
UG9pbnQgc3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5wb2ludDA7IH0KKyAgICBG
bG9hdFBvaW50IGVuZFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnBvaW50MCArIEZsb2F0
U2l6ZSB7IG1fZGF0YS5lbmRSYWRpdXMsIDAgfTsgfQorCisgICAgLy8gUmFkaWFsIGdyYWRpZW50
cyBtYXkgbmVlZCB0byBleHRlbmQgZnVydGhlciB0aGFuIHRoZSBlbmRwb2ludHMsIGJlY2F1c2Ug
dGhleSBoYXZlCisgICAgLy8gdG8gcmVwZWF0IG91dCB0byB0aGUgY29ybmVycyBvZiB0aGUgYm94
LgorICAgIGZsb2F0IG1heEV4dGVudChmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQsIGZsb2F0IGdy
YWRpZW50TGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1heExlbmd0aEZvclJlcGVh
dCA+IGdyYWRpZW50TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50TGVuZ3RoID4g
MCA/IG1heExlbmd0aEZvclJlcGVhdCAvIGdyYWRpZW50TGVuZ3RoIDogMDsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgdm9pZCBub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNp
ZGVSYW5nZShWZWN0b3I8R3JhZGllbnRTdG9wPiYgc3RvcHMpCisgICAgeworICAgICAgICBhdXRv
IG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOworCisgICAgICAgIC8vIFJhdGhlciB0aGFuIHNjYWxp
bmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5jYXRlIHRoZW0sIHNvIG9ubHkgc2NhbGUgYWNjb3Jk
aW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50LgorICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IDA7
CisgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wcy5sYXN0KCkub2Zmc2V0OworICAgICAg
ICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKKworICAgICAgICAvLyBS
ZXNldCBwb2ludHMgYmVsb3cgMCB0byB0aGUgZmlyc3QgdmlzaWJsZSBjb2xvci4KKyAgICAgICAg
c2l6ZV90IGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gbnVtU3RvcHM7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3Bz
W2ldLm9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5k
ZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID4gMCkgeworICAgICAgICAg
ICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3Ra
ZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldCA+IDApIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBw
cmV2T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRl
ckluZGV4XS5vZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0
aW9uID0gLXByZXZPZmZzZXQgLyAobmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVt
dWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCisgICAg
ICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNbZmlyc3RaZXJvT3JH
cmVhdGVySW5kZXggLSAxXS5jb2xvciwgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLmNv
bG9yLCBpbnRlclN0b3BQcm9wb3J0aW9uKTsKKworICAgICAgICAgICAgICAgIC8vIENsYW1wIHRo
ZSBwb3NpdGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
c3RvcHNbaV0uY29sb3IgPSBibGVuZGVkQ29sb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBbGwgc3RvcHMgYXJlIGJlbG93IDA7
IGp1c3QgY2xhbXAgdGhlbS4KKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHN0b3Bz
W2ldLm9mZnNldCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGF1dG8mIHN0b3AgOiBzdG9wcykKKyAgICAgICAgICAgIHN0b3Aub2Zmc2V0IC89IHNjYWxlOwor
CisgICAgICAgIG1fZGF0YS5zdGFydFJhZGl1cyAqPSBzY2FsZTsKKyAgICAgICAgbV9kYXRhLmVu
ZFJhZGl1cyAqPSBzY2FsZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhZGllbnQ6OlJhZGlh
bERhdGEmIG1fZGF0YTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4K
K0dyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3Bz
KEdyYWRpZW50QWRhcHRlciYgZ3JhZGllbnQsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpCiB7CiAgICAgaWYg
KG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRp
ZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKICAgICAgICAgc29ydFN0
b3BzSWZOZWVkZWQoKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9w
cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3Am
IHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXpl
KCkpOwogCisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgICAg
IGZsb2F0IG9mZnNldDsKICAgICAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24tPmlzUGVyY2Vu
dGFnZSgpKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKLSAgICAgICAgICAgIGdyYWRp
ZW50LmFkZENvbG9yU3RvcChvZmZzZXQsIHN0b3AubV9yZXNvbHZlZENvbG9yKTsKKyAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBvZmZzZXQsIHN0b3AubV9yZXNvbHZlZENvbG9y
IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlIGJhY2sgZW5kIGFscmVhZHkgc29ydGVk
IHRoZSBzdG9wcy4KLSAgICAgICAgZ3JhZGllbnQuc2V0U3RvcHNTb3J0ZWQodHJ1ZSk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBzaXplX3Qg
bnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsKLQogICAgIFZlY3RvcjxHcmFkaWVudFN0b3A+IHN0
b3BzKG51bVN0b3BzKTsKIAotICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gMDsKLSAgICBib29s
IGNvbXB1dGVkR3JhZGllbnRMZW5ndGggPSBmYWxzZTsKKyAgICBhdXRvIGdyYWRpZW50U3RhcnQg
PSBncmFkaWVudC5zdGFydFBvaW50KCk7CisgICAgYXV0byBncmFkaWVudEVuZCA9IGdyYWRpZW50
LmVuZFBvaW50KCk7CiAKLSAgICBGbG9hdFBvaW50IGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC5w
MCgpOwotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7Ci0gICAgaWYgKGlzTGluZWFyR3JhZGll
bnRWYWx1ZSgpKQotICAgICAgICBncmFkaWVudEVuZCA9IGdyYWRpZW50LnAxKCk7Ci0gICAgZWxz
ZSBpZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgIGdyYWRpZW50RW5kID0gZ3Jh
ZGllbnRTdGFydCArIEZsb2F0U2l6ZShncmFkaWVudC5lbmRSYWRpdXMoKSwgMCk7CisgICAgYXV0
byBncmFkaWVudFNpemUgPSBncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQ7CisgICAgZmxvYXQg
Z3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICBjb25zdCBDU1NH
cmFkaWVudENvbG9yU3RvcCYgc3RvcCA9IG1fc3RvcHNbaV07CisgICAgICAgIGF1dG8mIHN0b3Ag
PSBtX3N0b3BzW2ldOwogCiAgICAgICAgIHN0b3BzW2ldLmlzTWlkcG9pbnQgPSBzdG9wLmlzTWlk
cG9pbnQ7CiAgICAgICAgIHN0b3BzW2ldLmNvbG9yID0gc3RvcC5tX3Jlc29sdmVkQ29sb3I7CiAK
ICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbikgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHBvc2l0aW9uVmFsdWUgPSAqc3RvcC5tX3Bvc2l0aW9uOworICAgICAgICAg
ICAgYXV0byYgcG9zaXRpb25WYWx1ZSA9ICpzdG9wLm1fcG9zaXRpb247CiAgICAgICAgICAgICBp
ZiAocG9zaXRpb25WYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICBzdG9wc1tp
XS5vZmZzZXQgPSBwb3NpdGlvblZhbHVlLmZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKSAvIDEwMDsKICAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uVmFsdWUu
aXNMZW5ndGgoKSB8fCBwb3NpdGlvblZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkg
fHwgcG9zaXRpb25WYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb21wdXRlZEdyYWRpZW50TGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEZsb2F0U2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50
RW5kKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUu
ZGlhZ29uYWxMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZmxv
YXQgbGVuZ3RoOwogICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHBvc2l0aW9uVmFsdWUuY29tcHV0ZUxlbmd0
aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwpAQCAtMzQyLDI2ICs0MzgsMTQgQEAgdm9pZCBDU1NH
cmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudAogICAgIGlmIChtX3JlcGVhdGluZyAmJiBu
dW1TdG9wcyA+IDEpIHsKICAgICAgICAgLy8gSWYgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIHBvc2l0
aW9ucyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY29sb3Itc3RvcHMgaXMgMCwKICAgICAgICAgLy8g
dGhlIGdyYWRpZW50IGRlZmluZXMgYSBzb2xpZC1jb2xvciBpbWFnZSB3aXRoIHRoZSBjb2xvciBv
ZiB0aGUgbGFzdCBjb2xvci1zdG9wIGluIHRoZSBydWxlLgotICAgICAgICBmbG9hdCBncmFkaWVu
dFJhbmdlID0gc3RvcHNbbnVtU3RvcHMgLSAxXS5vZmZzZXQgLSBzdG9wc1swXS5vZmZzZXQ7Cisg
ICAgICAgIGZsb2F0IGdyYWRpZW50UmFuZ2UgPSBzdG9wcy5sYXN0KCkub2Zmc2V0IC0gc3RvcHMu
Zmlyc3QoKS5vZmZzZXQ7CiAgICAgICAgIGlmICghZ3JhZGllbnRSYW5nZSkgewogICAgICAgICAg
ICAgc3RvcHMuZmlyc3QoKS5vZmZzZXQgPSAwOwogICAgICAgICAgICAgc3RvcHMuZmlyc3QoKS5j
b2xvciA9IHN0b3BzLmxhc3QoKS5jb2xvcjsKICAgICAgICAgICAgIHN0b3BzLnNocmluaygxKTsK
ICAgICAgICAgICAgIG51bVN0b3BzID0gMTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZsb2F0IG1heEV4dGVudCA9IDE7Ci0KLSAgICAgICAgICAgIC8vIFJhZGlhbCBncmFkaWVudHMg
bWF5IG5lZWQgdG8gZXh0ZW5kIGZ1cnRoZXIgdGhhbiB0aGUgZW5kcG9pbnRzLCBiZWNhdXNlIHRo
ZXkgaGF2ZQotICAgICAgICAgICAgLy8gdG8gcmVwZWF0IG91dCB0byB0aGUgY29ybmVycyBvZiB0
aGUgYm94LgotICAgICAgICAgICAgaWYgKGlzUmFkaWFsR3JhZGllbnRWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb21wdXRlZEdyYWRpZW50TGVuZ3RoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEZsb2F0U2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50RW5k
KTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlh
Z29uYWxMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
bWF4TGVuZ3RoRm9yUmVwZWF0ID4gZ3JhZGllbnRMZW5ndGgpCi0gICAgICAgICAgICAgICAgICAg
IG1heEV4dGVudCA9IGdyYWRpZW50TGVuZ3RoID4gMCA/IG1heExlbmd0aEZvclJlcGVhdCAvIGdy
YWRpZW50TGVuZ3RoIDogMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsb2F0IG1heEV4
dGVudCA9IGdyYWRpZW50Lm1heEV4dGVudChtYXhMZW5ndGhGb3JSZXBlYXQsIGdyYWRpZW50TGVu
Z3RoKTsKIAogICAgICAgICAgICAgc2l6ZV90IG9yaWdpbmFsTnVtU3RvcHMgPSBudW1TdG9wczsK
ICAgICAgICAgICAgIHNpemVfdCBvcmlnaW5hbEZpcnN0U3RvcEluZGV4ID0gMDsKQEAgLTQwNyw3
NiArNDkxLDE2IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAg
ICAgICAgfQogICAgIH0KIAotICAgIG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwotCiAgICAgLy8g
SWYgdGhlIGdyYWRpZW50IGdvZXMgb3V0c2lkZSB0aGUgMC0xIHJhbmdlLCBub3JtYWxpemUgaXQg
YnkgbW92aW5nIHRoZSBlbmRwb2ludHMsIGFuZCBhZGp1c3RpbmcgdGhlIHN0b3BzLgotICAgIGlm
IChudW1TdG9wcyA+IDEgJiYgKHN0b3BzWzBdLm9mZnNldCA8IDAgfHwgc3RvcHNbbnVtU3RvcHMg
LSAxXS5vZmZzZXQgPiAxKSkgewotICAgICAgICBpZiAoaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkp
IHsKLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gc3RvcHNbMF0ub2Zmc2V0OwotICAg
ICAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzW251bVN0b3BzIC0gMV0ub2Zmc2V0Owot
ICAgICAgICAgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IGxhc3RPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKLQotICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gKHN0b3BzW2ldLm9mZnNldCAtIGZpcnN0T2Zmc2V0
KSAvIHNjYWxlOwotCi0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMCA9IGdyYWRpZW50LnAw
KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMSA9IGdyYWRpZW50LnAxKCk7Ci0gICAg
ICAgICAgICAgICAgZ3JhZGllbnQuc2V0UDAoRmxvYXRQb2ludChwMC54KCkgKyBmaXJzdE9mZnNl
dCAqIChwMS54KCkgLSBwMC54KCkpLCBwMC55KCkgKyBmaXJzdE9mZnNldCAqIChwMS55KCkgLSBw
MC55KCkpKSk7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0UDEoRmxvYXRQb2ludChwMS54
KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLngoKSAtIHAwLngoKSksIHAxLnkoKSArIChsYXN0
T2Zmc2V0IC0gMSkgKiAocDEueSgpIC0gcDAueSgpKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIGEgc2luZ2xlIHBvc2l0aW9uIHRoYXQgaXMgb3V0
c2lkZSB0aGUgc2NhbGUsIGNsYW1wIHRoZSBwb3NpdGlvbnMgdG8gMS4KLSAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHN0b3BzW2ldLm9mZnNldCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpIHsKLSAgICAgICAgICAgIC8vIFJhdGhlciB0aGFu
IHNjYWxpbmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5jYXRlIHRoZW0sIHNvIG9ubHkgc2NhbGUg
YWNjb3JkaW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50LgotICAgICAgICAgICAgZmxvYXQgZmlyc3RP
ZmZzZXQgPSAwOwotICAgICAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzW251bVN0b3Bz
IC0gMV0ub2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmly
c3RPZmZzZXQ7Ci0KLSAgICAgICAgICAgIC8vIFJlc2V0IHBvaW50cyBiZWxvdyAwIHRvIHRoZSBm
aXJzdCB2aXNpYmxlIGNvbG9yLgotICAgICAgICAgICAgc2l6ZV90IGZpcnN0WmVyb09yR3JlYXRl
ckluZGV4ID0gbnVtU3RvcHM7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bVN0b3BzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RvcHNbaV0ub2Zmc2V0ID49IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiBzdG9w
c1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAx
XS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tm
aXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IGludGVyU3RvcFByb3BvcnRpb24gPSAtcHJldk9mZnNldCAvIChuZXh0T2Zmc2V0IC0gcHJl
dk9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVycG9s
YXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQgZG8g
cHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIENvbG9yIGJsZW5kZWRDb2xv
ciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0uY29sb3IsIHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGhlIHBvc2l0aW9ucyB0byAwIGFuZCBzZXQg
dGhlIGNvbG9yLgotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
cnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3BzW2ldLm9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5jb2xv
ciA9IGJsZW5kZWRDb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFsbCBzdG9wcyBhcmUgYmVsb3cgMDsg
anVzdCBjbGFtcCB0aGVtLgotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzdG9wc1tpXS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKQotICAg
ICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCAvPSBzY2FsZTsKLQotICAgICAgICAgICAgZ3Jh
ZGllbnQuc2V0U3RhcnRSYWRpdXMoZ3JhZGllbnQuc3RhcnRSYWRpdXMoKSAqIHNjYWxlKTsKLSAg
ICAgICAgICAgIGdyYWRpZW50LnNldEVuZFJhZGl1cyhncmFkaWVudC5lbmRSYWRpdXMoKSAqIHNj
YWxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1TdG9wczsgaSsrKQotICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3Aoc3RvcHNbaV0ub2Zm
c2V0LCBzdG9wc1tpXS5jb2xvcik7CisgICAgaWYgKHN0b3BzLnNpemUoKSA+IDEgJiYgKHN0b3Bz
LmZpcnN0KCkub2Zmc2V0IDwgMCB8fCBzdG9wcy5sYXN0KCkub2Zmc2V0ID4gMSkpCisgICAgICAg
IGdyYWRpZW50Lm5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRzT3V0c2lkZVJhbmdlKHN0b3BzKTsK
KyAgICAKKyAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdG9wcy5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3Rv
cCA6IHN0b3BzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgc3RvcC5vZmZzZXQs
IHN0b3AuY29sb3IgfSk7CiAKLSAgICBncmFkaWVudC5zZXRTdG9wc1NvcnRlZCh0cnVlKTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoY29u
c3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplLCBib29sIGlzSG9yaXpv
bnRhbCkKQEAgLTYyNCw3ICs2NDgsNyBAQCBTdHJpbmcgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6
Y3VzdG9tQ1NTCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zdG9wcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xv
clN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICAgICAgYXV0byYgc3RvcCA9IG1fc3Rv
cHNbaV07CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCkpOwogICAgICAgICAgICAg
aWYgKHN0b3AubV9wb3NpdGlvbikgewpAQCAtODAxLDE0ICs4MjUsMTQgQEAgUmVmPEdyYWRpZW50
PiBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLQogICAgIH0KIAotICAgIFJlZjxH
cmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIHNlY29uZFBv
aW50KTsKLQotICAgIC8vIE5vdyBhZGQgdGhlIHN0b3BzLgotICAgIGFkZFN0b3BzKGdyYWRpZW50
LCBjb252ZXJzaW9uRGF0YSwgMSk7CisgICAgR3JhZGllbnQ6OkxpbmVhckRhdGEgZGF0YSB7IGZp
cnN0UG9pbnQsIHNlY29uZFBvaW50IH07CisgICAgTGluZWFyR3JhZGllbnRBZGFwdGVyIGFkYXB0
ZXIgeyBkYXRhIH07CisgICAgYXV0byBzdG9wcyA9IGNvbXB1dGVTdG9wcyhhZGFwdGVyLCBjb252
ZXJzaW9uRGF0YSwgMSk7CiAKKyAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShX
VEZNb3ZlKGRhdGEpKTsKKyAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3Zl
KHN0b3BzKSk7CiAgICAgcmV0dXJuIGdyYWRpZW50OwogfQogCkBAIC0xMjEzLDE4ICsxMjM3LDE5
IEBAIFJlZjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3IKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZp
cnN0UG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzLCBhc3BlY3RS
YXRpbyk7Ci0KLSAgICAvLyBhZGRTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVh
dGluZyBncmFkaWVudHMuCisgICAgLy8gY29tcHV0ZVN0b3BzKCkgb25seSB1c2VzIG1heEV4dGVu
dCBmb3IgcmVwZWF0aW5nIGdyYWRpZW50cy4KICAgICBmbG9hdCBtYXhFeHRlbnQgPSAwOwogICAg
IGlmIChtX3JlcGVhdGluZykgewogICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKICAgICAgICAg
bWF4RXh0ZW50ID0gZGlzdGFuY2VUb0ZhcnRoZXN0Q29ybmVyKHNlY29uZFBvaW50LCBzaXplLCBj
b3JuZXIpOwogICAgIH0KIAotICAgIC8vIE5vdyBhZGQgdGhlIHN0b3BzLgotICAgIGFkZFN0b3Bz
KGdyYWRpZW50LCBjb252ZXJzaW9uRGF0YSwgbWF4RXh0ZW50KTsKKyAgICBHcmFkaWVudDo6UmFk
aWFsRGF0YSBkYXRhIHsgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNv
bmRSYWRpdXMsIGFzcGVjdFJhdGlvIH07CisgICAgUmFkaWFsR3JhZGllbnRBZGFwdGVyIGFkYXB0
ZXIgeyBkYXRhIH07CisgICAgYXV0byBzdG9wcyA9IGNvbXB1dGVTdG9wcyhhZGFwdGVyLCBjb252
ZXJzaW9uRGF0YSwgbWF4RXh0ZW50KTsKIAorICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6
Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3Bz
KFdURk1vdmUoc3RvcHMpKTsKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKQEAgLTEzMjYsNyAr
MTM1MSw3IEBAIFN0cmluZyBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1QKIFJlZjxH
cmFkaWVudD4gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVt
ZW50JiwgY29uc3QgRmxvYXRTaXplJikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAg
IHJldHVybiBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQgeyB9LCBGbG9hdFBvaW50IHsgfSk7
CisgICAgcmV0dXJuIEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyB9KTsK
IH0KIAogYm9vbCBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NDb25pY0dy
YWRpZW50VmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2luY2x1
ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBHcmFkaWVudDsK
IGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGVudW0gQ1NTR3JhZGllbnRUeXBlIHsKQEAgLTEwOSw3
ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYWRkU3RvcHMo
R3JhZGllbnQmLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgZmxvYXQgbWF4TGVu
Z3RoRm9yUmVwZWF0ID0gMCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVy
PgorICAgIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgY29tcHV0ZVN0b3BzKEdyYWRpZW50QWRh
cHRlciYsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBmbG9hdCBtYXhMZW5ndGhG
b3JSZXBlYXQpOwogCiAgICAgLy8gUmVzb2x2ZSBwb2ludHMvcmFkaWkgdG8gZnJvbnQgZW5kIHZh
bHVlcy4KICAgICBGbG9hdFBvaW50IGNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSos
IENTU1ByaW1pdGl2ZVZhbHVlKiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIGNv
bnN0IEZsb2F0U2l6ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmNwcAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIs
MTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRp
ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKLSAgICA6IG1f
Z3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShwMCwgcDEpKQorICAgIDogbV9ncmFkaWVudChHcmFk
aWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgcDAsIHAxIH0pKQogewogfQogCiBD
YW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0
IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCi0gICAgOiBtX2dyYWRpZW50KEdy
YWRpZW50OjpjcmVhdGUocDAsIHIwLCBwMSwgcjEpKQorICAgIDogbV9ncmFkaWVudChHcmFkaWVu
dDo6Y3JlYXRlKEdyYWRpZW50OjpSYWRpYWxEYXRhIHsgcDAsIHAxLCByMCwgcjEsIDEgfSkpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMu
Y3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDIzICs1OTEsMzAgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlYwogCiBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJy
YXlGb3JDYW52YXNHcmFkaWVudChjb25zdCBDYW52YXNHcmFkaWVudCYgY2FudmFzR3JhZGllbnQp
CiB7Ci0gICAgY29uc3QgR3JhZGllbnQmIGdyYWRpZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGll
bnQoKTsKLSAgICBib29sIGlzUmFkaWFsID0gZ3JhZGllbnQuaXNSYWRpYWwoKTsKKyAgICBjb25z
dCBhdXRvJiBncmFkaWVudCA9IGNhbnZhc0dyYWRpZW50LmdyYWRpZW50KCk7CiAKLSAgICBTdHJp
bmcgdHlwZSA9IGlzUmFkaWFsID8gQVNDSUlMaXRlcmFsKCJyYWRpYWwtZ3JhZGllbnQiKSA6IEFT
Q0lJTGl0ZXJhbCgibGluZWFyLWdyYWRpZW50Iik7CisgICAgU3RyaW5nIHR5cGUgPSBncmFkaWVu
dC50eXBlKCkgPT0gR3JhZGllbnQ6OlR5cGU6OlJhZGlhbCA/IEFTQ0lJTGl0ZXJhbCgicmFkaWFs
LWdyYWRpZW50IikgOiBBU0NJSUxpdGVyYWwoImxpbmVhci1ncmFkaWVudCIpOwogCiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGZsb2F0Pj4gcGFyYW1ldGVycyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1ldGVycy0+
YWRkSXRlbShncmFkaWVudC5wMCgpLngoKSk7Ci0gICAgcGFyYW1ldGVycy0+YWRkSXRlbShncmFk
aWVudC5wMCgpLnkoKSk7Ci0gICAgaWYgKGlzUmFkaWFsKQotICAgICAgICBwYXJhbWV0ZXJzLT5h
ZGRJdGVtKGdyYWRpZW50LnN0YXJ0UmFkaXVzKCkpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0o
Z3JhZGllbnQucDEoKS54KCkpOwotICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZ3JhZGllbnQucDEo
KS55KCkpOwotICAgIGlmIChpc1JhZGlhbCkKLSAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShn
cmFkaWVudC5lbmRSYWRpdXMoKSk7CisgICAgV1RGOjpzd2l0Y2hPbihncmFkaWVudC5kYXRhKCks
CisgICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRh
KSB7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLngoKSk7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLnkoKSk7CisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQxLngoKSk7CisgICAgICAgICAgICBw
YXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQxLnkoKSk7CisgICAgICAgIH0sCisgICAgICAg
IFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLngoKSk7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLnkoKSk7CisgICAgICAgICAgICBwYXJh
bWV0ZXJzLT5hZGRJdGVtKGRhdGEuc3RhcnRSYWRpdXMpOworICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLnBvaW50MS55KCkpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShk
YXRhLmVuZFJhZGl1cyk7CisgICAgICAgIH0KKyAgICApOwogCiAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3RvclZhbHVlPj4gc3RvcHMgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT46OmNyZWF0ZSgpOwotICAgIGZvciAoY29uc3Qg
R3JhZGllbnQ6OkNvbG9yU3RvcCYgY29sb3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgeworICAg
IGZvciAoYXV0byYgY29sb3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgewogICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+PiBzdG9wID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+OjpjcmVhdGUoKTsKICAgICAg
ICAgc3RvcC0+YWRkSXRlbShjb2xvclN0b3Aub2Zmc2V0KTsKICAgICAgICAgc3RvcC0+YWRkSXRl
bShpbmRleEZvckRhdGEoY29sb3JTdG9wLmNvbG9yLmNzc1RleHQoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkocmV2aXNpb24gMjI1
MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwzMCArMzYsMjQgQEAgdXNpbmcgV1RGOjpwYWlySW50SGFzaDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFkaWVudDo6R3JhZGllbnQoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQotICAgIDogbV9yYWRpYWwoZmFsc2UpCi0g
ICAgLCBtX3AwKHAwKQotICAgICwgbV9wMShwMSkKLSAgICAsIG1fcjAoMCkKLSAgICAsIG1fcjEo
MCkKLSAgICAsIG1fYXNwZWN0UmF0aW8oMSkKLSAgICAsIG1fc3RvcHNTb3J0ZWQoZmFsc2UpCi0g
ICAgLCBtX3NwcmVhZE1ldGhvZChTcHJlYWRNZXRob2RQYWQpCi0gICAgLCBtX2NhY2hlZEhhc2go
MCkKK1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShMaW5lYXJEYXRhJiYgZGF0YSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7Cit9CisK
K1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShSYWRpYWxEYXRhJiYgZGF0YSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7Cit9CisKK0dy
YWRpZW50OjpHcmFkaWVudChMaW5lYXJEYXRhJiYgZGF0YSkKKyAgICA6IG1fZGF0YShXVEZNb3Zl
KGRhdGEpKQogewogICAgIHBsYXRmb3JtSW5pdCgpOwogfQogCi1HcmFkaWVudDo6R3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxv
YXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvKQotICAgIDogbV9yYWRpYWwodHJ1ZSkKLSAgICAsIG1f
cDAocDApCi0gICAgLCBtX3AxKHAxKQotICAgICwgbV9yMChyMCkKLSAgICAsIG1fcjEocjEpCi0g
ICAgLCBtX2FzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKQotICAgICwgbV9zdG9wc1NvcnRlZChmYWxz
ZSkKLSAgICAsIG1fc3ByZWFkTWV0aG9kKFNwcmVhZE1ldGhvZFBhZCkKLSAgICAsIG1fY2FjaGVk
SGFzaCgwKQorR3JhZGllbnQ6OkdyYWRpZW50KFJhZGlhbERhdGEmJiBkYXRhKQorICAgIDogbV9k
YXRhKFdURk1vdmUoZGF0YSkpCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC02OSwzOSAr
NjMsNjEgQEAgR3JhZGllbnQ6On5HcmFkaWVudCgpCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiB9
CiAKLXZvaWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRT
aXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykK
K2F1dG8gR3JhZGllbnQ6OnR5cGUoKSBjb25zdCAtPiBUeXBlCiB7Ci0gICAgaWYgKG1fcmFkaWFs
KQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9kYXRhLAorICAg
ICAgICBbXSAoY29uc3QgTGluZWFyRGF0YSYpIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlOjpM
aW5lYXI7CisgICAgICAgIH0sCisgICAgICAgIFtdIChjb25zdCBSYWRpYWxEYXRhJikgeworICAg
ICAgICAgICAgcmV0dXJuIFR5cGU6OlJhZGlhbDsKKyAgICAgICAgfQorICAgICk7Cit9CiAKK3Zv
aWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiBz
aXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykKK3sKICAg
ICBpZiAoc3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghc3Bh
Y2luZy5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcDAueCgpID09IG1f
cDEueCgpKSB7Ci0gICAgICAgIHNpemUuc2V0V2lkdGgoMSk7Ci0gICAgICAgIHNyY1JlY3Quc2V0
V2lkdGgoMSk7Ci0gICAgICAgIHNyY1JlY3Quc2V0WCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAobV9wMC55KCkgIT0gbV9wMS55KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNpemUuc2V0SGVpZ2h0KDEpOwotICAgIHNyY1JlY3Quc2V0SGVpZ2h0KDEpOwotICAgIHNyY1Jl
Y3Quc2V0WSgwKTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25z
dCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBpZiAoZGF0YS5wb2ludDAueCgpID09
IGRhdGEucG9pbnQxLngoKSkgeworICAgICAgICAgICAgICAgIHNpemUuc2V0V2lkdGgoMSk7Cisg
ICAgICAgICAgICAgICAgc3JjUmVjdC5zZXRXaWR0aCgxKTsKKyAgICAgICAgICAgICAgICBzcmNS
ZWN0LnNldFgoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRhdGEucG9pbnQwLnkoKSAhPSBkYXRhLnBvaW50MS55KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBzaXplLnNldEhlaWdodCgxKTsKKyAgICAg
ICAgICAgIHNyY1JlY3Quc2V0SGVpZ2h0KDEpOworICAgICAgICAgICAgc3JjUmVjdC5zZXRZKDAp
OworICAgICAgICB9LAorICAgICAgICBbXSAoY29uc3QgUmFkaWFsRGF0YSYpIHsKKyAgICAgICAg
fQorICAgICk7Cit9CisKK2Jvb2wgR3JhZGllbnQ6OmlzWmVyb1NpemUoKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgW10gKGNvbnN0IExpbmVhckRh
dGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnBvaW50MC54KCkgPT0gZGF0YS5w
b2ludDEueCgpICYmIGRhdGEucG9pbnQwLnkoKSA9PSBkYXRhLnBvaW50MS55KCk7CisgICAgICAg
IH0sCisgICAgICAgIFtdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZGF0YS5wb2ludDAueCgpID09IGRhdGEucG9pbnQxLngoKSAmJiBkYXRhLnBvaW50MC55
KCkgPT0gZGF0YS5wb2ludDEueSgpICYmIGRhdGEuc3RhcnRSYWRpdXMgPT0gZGF0YS5lbmRSYWRp
dXM7CisgICAgICAgIH0KKyAgICApOwogfQogCiB2b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3Ao
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9zdG9wcy5hcHBlbmQo
Q29sb3JTdG9wKG9mZnNldCwgY29sb3IpKTsKLQotICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsK
LSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLQotICAgIGludmFsaWRhdGVIYXNoKCk7CisgICAgYWRk
Q29sb3JTdG9wKHsgb2Zmc2V0LCBjb2xvciB9KTsKIH0KIAogdm9pZCBHcmFkaWVudDo6YWRkQ29s
b3JTdG9wKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3ApCkBAIC0xMDksOCArMTI1LDE4
IEBAIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWUKICAgICBtX3N0b3Bz
LmFwcGVuZChzdG9wKTsKIAogICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsKKwogICAgIHBsYXRm
b3JtRGVzdHJveSgpOworICAgIGludmFsaWRhdGVIYXNoKCk7Cit9CisKK3ZvaWQgR3JhZGllbnQ6
OnNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYgc3RvcHMpCit7CisgICAgbV9z
dG9wcyA9IFdURk1vdmUoc3RvcHMpOworCisgICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7CiAKKyAg
ICBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICBpbnZhbGlkYXRlSGFzaCgpOwogfQogCkBAIC0xMzAs
NyArMTU2LDYgQEAgdm9pZCBHcmFkaWVudDo6c29ydFN0b3BzSWZOZWNlc3NhcnkoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9w
cy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLQogICAgIGludmFsaWRhdGVIYXNoKCk7CiB9CiAKQEAg
LTE3MywxNCArMTk4LDE0IEBAIHVuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIG1fY2FjaGVkSGFzaDsKIAogICAgIHN0cnVjdCB7Ci0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgICAgIEZsb2F0UG9pbnQg
cDA7Ci0gICAgICAgIEZsb2F0UG9pbnQgcDE7Ci0gICAgICAgIGZsb2F0IHIwOwotICAgICAgICBm
bG9hdCByMTsKKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7CisgICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzOwor
ICAgICAgICBmbG9hdCBlbmRSYWRpdXM7CiAgICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvOwogICAg
ICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Q7Ci0gICAgICAgIGJvb2wgcmFk
aWFsOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
OwogICAgIH0gcGFyYW1ldGVyczsKIAogICAgIC8vIFN0cmluZ0hhc2hlciByZXF1aXJlcyB0aGF0
IHRoZSBtZW1vcnkgaXQgaGFzaGVzIGJlIGEgbXVsdGlwbGUgb2YgdHdvIGluIHNpemUuCkBAIC0x
OTAsMTQgKzIxNSwyNyBAQCB1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CiAgICAgLy8g
RW5zdXJlIHRoYXQgYW55IHBhZGRpbmcgaW4gdGhlIHN0cnVjdCBpcyB6ZXJvLWZpbGxlZCwgc28g
aXQgd2lsbCBub3QgYWZmZWN0IHRoZSBoYXNoIHZhbHVlLgogICAgIG1lbXNldCgmcGFyYW1ldGVy
cywgMCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKICAgICAKLSAgICBwYXJhbWV0ZXJzLmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbiA9IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAg
IHBhcmFtZXRlcnMucDAgPSBtX3AwOwotICAgIHBhcmFtZXRlcnMucDEgPSBtX3AxOwotICAgIHBh
cmFtZXRlcnMucjAgPSBtX3IwOwotICAgIHBhcmFtZXRlcnMucjEgPSBtX3IxOwotICAgIHBhcmFt
ZXRlcnMuYXNwZWN0UmF0aW8gPSBtX2FzcGVjdFJhdGlvOworICAgIFdURjo6c3dpdGNoT24obV9k
YXRhLAorICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOworICAgICAgICAgICAg
cGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50MTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
c3RhcnRSYWRpdXMgPSAwOworICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSAwOwor
ICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IDA7CisgICAgICAgICAgICBwYXJh
bWV0ZXJzLnR5cGUgPSBUeXBlOjpMaW5lYXI7CisgICAgICAgIH0sCisgICAgICAgIFsmcGFyYW1l
dGVyc10gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
cG9pbnQwID0gZGF0YS5wb2ludDA7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MSA9IGRh
dGEucG9pbnQxOworICAgICAgICAgICAgcGFyYW1ldGVycy5zdGFydFJhZGl1cyA9IGRhdGEuc3Rh
cnRSYWRpdXM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmVuZFJhZGl1cyA9IGRhdGEuZW5kUmFk
aXVzOworICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IGRhdGEuYXNwZWN0UmF0
aW87CisgICAgICAgICAgICBwYXJhbWV0ZXJzLnR5cGUgPSBUeXBlOjpSYWRpYWw7CisgICAgICAg
IH0KKyAgICApOworCiAgICAgcGFyYW1ldGVycy5zcHJlYWRNZXRob2QgPSBtX3NwcmVhZE1ldGhv
ZDsKLSAgICBwYXJhbWV0ZXJzLnJhZGlhbCA9IG1fcmFkaWFsOworICAgIHBhcmFtZXRlcnMuZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247
CiAKICAgICB1bnNpZ25lZCBwYXJhbWV0ZXJzSGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eSgmcGFyYW1ldGVycywgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKICAgICB1bnNpZ25lZCBzdG9wSGFz
aCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXpl
KCkgKiBzaXplb2YoQ29sb3JTdG9wKSk7CkBAIC0yMDcsNCArMjQ1LDQgQEAgdW5zaWduZWQgR3Jh
ZGllbnQ6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CiB9CiAKLX0gLy9u
YW1lc3BhY2UKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjMgKzI1LDIwIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEdyYWRpZW50X2gKLSNkZWZpbmUgR3JhZGllbnRf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5
cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFu
dC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShDRykKLQogdHlwZWRlZiBz
dHJ1Y3QgQ0dDb250ZXh0KiBDR0NvbnRleHRSZWY7Ci0KIHR5cGVkZWYgc3RydWN0IENHR3JhZGll
bnQqIENHR3JhZGllbnRSZWY7CiB0eXBlZGVmIENHR3JhZGllbnRSZWYgUGxhdGZvcm1HcmFkaWVu
dDsKLQogI2VsaWYgVVNFKERJUkVDVDJEKQogaW50ZXJmYWNlIElEMkQxQnJ1c2g7CiBpbnRlcmZh
Y2UgSUQyRDFSZW5kZXJUYXJnZXQ7CkBAIC01NSwxNTIgKzUyLDEwOCBAQCB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtR3JhZGllbnQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENv
bG9yOwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0K
LSAgICBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRpZW50PiB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9h
dFJlY3Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIEdyYWRpZW50IDogcHVibGlj
IFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsKK3B1YmxpYzoKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRD
b2xvciAtIEEgY29sb3Igc3RvcCBuZWVkcyBhIG5vdGlvbiBvZiBjb2xvciBzcGFjZS4KKyAgICBz
dHJ1Y3QgQ29sb3JTdG9wIHsKKyAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OworICAgICAgICBD
b2xvciBjb2xvcjsKKworICAgICAgICBDb2xvclN0b3AoKSA9IGRlZmF1bHQ7CisgICAgICAgIENv
bG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgICAgIDog
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgY29sb3IoY29sb3IpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KHAwLCBwMSkpOwogICAgICAg
ICB9Ci0gICAgICAgIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50
JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNw
ZWN0UmF0aW8gPSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBHcmFkaWVudChwMCwgcjAsIHAxLCByMSwgYXNwZWN0UmF0aW8pKTsKLSAgICAgICAgfQotICAg
ICAgICBXRUJDT1JFX0VYUE9SVCB+R3JhZGllbnQoKTsKLQotICAgICAgICBzdHJ1Y3QgQ29sb3JT
dG9wOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChjb25zdCBDb2xv
clN0b3AmKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQs
IGNvbnN0IENvbG9yJik7CisgICAgfTsKIAotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7
CisgICAgdXNpbmcgQ29sb3JTdG9wVmVjdG9yID0gVmVjdG9yPENvbG9yU3RvcCwgMj47CiAKLSAg
ICAgICAgYm9vbCBpc1JhZGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWFsOyB9Ci0gICAgICAg
IGJvb2wgaXNaZXJvU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcDAueCgpID09IG1fcDEueCgpICYm
IG1fcDAueSgpID09IG1fcDEueSgpICYmICghbV9yYWRpYWwgfHwgbV9yMCA9PSBtX3IxKTsgfQor
ICAgIHN0cnVjdCBMaW5lYXJEYXRhIHsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgIH07CiAKLSAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcDAoKSBjb25zdCB7IHJldHVybiBtX3AwOyB9Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsgfQorICAgIHN0cnVjdCBSYWRpYWxEYXRhIHsKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDA7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAg
ICAgICBmbG9hdCBzdGFydFJhZGl1czsKKyAgICAgICAgZmxvYXQgZW5kUmFkaXVzOworICAgICAg
ICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8g
aGVpZ2h0LgorICAgIH07CiAKLSAgICAgICAgdm9pZCBzZXRQMChjb25zdCBGbG9hdFBvaW50JiBw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wMCA9PSBwKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9wMCA9IHA7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGludmFsaWRhdGVIYXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2V0UDEoY29uc3QgRmxvYXRQb2ludCYgcCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1fcDEgPT0gcCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fcDEgPSBwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnZh
bGlkYXRlSGFzaCgpOwotICAgICAgICB9CisgICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8TGluZWFy
RGF0YSwgUmFkaWFsRGF0YT47CiAKLSAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXMoKSBjb25zdCB7
IHJldHVybiBtX3IwOyB9Ci0gICAgICAgIGZsb2F0IGVuZFJhZGl1cygpIGNvbnN0IHsgcmV0dXJu
IG1fcjE7IH0KKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBMaW5lYXIsIFJhZGlhbCB9OwogCi0gICAg
ICAgIHZvaWQgc2V0U3RhcnRSYWRpdXMoZmxvYXQgcikKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1fcjAgPT0gcikKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgc3RhdGljIFJlZjxH
cmFkaWVudD4gY3JlYXRlKExpbmVhckRhdGEmJik7CisgICAgc3RhdGljIFJlZjxHcmFkaWVudD4g
Y3JlYXRlKFJhZGlhbERhdGEmJik7CiAKLSAgICAgICAgICAgIG1fcjAgPSByOworICAgIFdFQkNP
UkVfRVhQT1JUIH5HcmFkaWVudCgpOwogCi0gICAgICAgICAgICBpbnZhbGlkYXRlSGFzaCgpOwot
ICAgICAgICB9CisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRFbmRS
YWRpdXMoZmxvYXQgcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcjEgPT0gcikKLSAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIGJv
b2wgaXNaZXJvU2l6ZSgpIGNvbnN0OwogCi0gICAgICAgICAgICBtX3IxID0gcjsKKyAgICBjb25z
dCBEYXRhJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKLSAgICAgICAgICAgIGlu
dmFsaWRhdGVIYXNoKCk7Ci0gICAgICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENv
bG9yU3RvcChjb25zdCBDb2xvclN0b3AmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENv
bG9yU3RvcChmbG9hdCwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHNldFNvcnRlZENvbG9yU3Rv
cHMoQ29sb3JTdG9wVmVjdG9yJiYpOwogCi0gICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29u
c3QgeyByZXR1cm4gbV9hc3BlY3RSYXRpbzsgfQorICAgIGNvbnN0IENvbG9yU3RvcFZlY3RvciYg
c3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzOyB9CiAKLSNpZiBVU0UoV0lOR0RJKQotICAg
ICAgICBjb25zdCBWZWN0b3I8Q29sb3JTdG9wLCAyPiYgZ2V0U3RvcHMoKSBjb25zdDsKLSNlbHNl
Ci0gICAgICAgIFBsYXRmb3JtR3JhZGllbnQgcGxhdGZvcm1HcmFkaWVudCgpOwotI2VuZGlmCisg
ICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOworICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0
aG9kOyB9CiAKLSAgICAgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBBIGNvbG9yIHN0b3Ag
bmVlZHMgYSBub3Rpb24gb2YgY29sb3Igc3BhY2UuCi0gICAgICAgIHN0cnVjdCBDb2xvclN0b3Ag
ewotICAgICAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0KLSAgICAgICAgICAgIENvbG9yU3RvcCgpIHsgfQotICAgICAgICAgICAgQ29sb3JTdG9w
KGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICAgICAgICAgIDogb2Zm
c2V0KG9mZnNldCkKLSAgICAgICAgICAgICAgICAsIGNvbG9yKGNvbG9yKQotICAgICAgICAgICAg
ICAgIHsgfQotICAgICAgICB9OwotCi0gICAgICAgIGNvbnN0IFZlY3RvcjxDb2xvclN0b3AsIDI+
JiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KLQotICAgICAgICB2b2lkIHNldFN0
b3BzU29ydGVkKGJvb2wgcykgeyBtX3N0b3BzU29ydGVkID0gczsgfQotICAgICAgICAKLSAgICAg
ICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwotICAgICAgICBH
cmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSB7IHJldHVybiBtX3NwcmVhZE1ldGhv
ZDsgfQotICAgICAgICB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwotICAgICAgICAvLyBRdCBh
bmQgQ0cgdHJhbnNmb3JtIHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX2dyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsgfQorICAgIC8vIENHIG5lZWRzIHRvIHRyYW5zZm9ybSB0aGUgZ3Jh
ZGllbnQgYXQgZHJhdyB0aW1lLgorICAgIHZvaWQgc2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7CisgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4g
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAotICAgICAgICB2b2lkIGZpbGwoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZvaWQgYWRqdXN0UGFy
YW1ldGVyc0ZvclRpbGVkRHJhd2luZyhGbG9hdFNpemUmLCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcpOworICAgIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxv
YXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAotICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUhhc2goKSB7
IG1fY2FjaGVkSGFzaCA9IDA7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgdm9p
ZCBpbnZhbGlkYXRlSGFzaCgpIHsgbV9jYWNoZWRIYXNoID0gMDsgfQogCiAjaWYgVVNFKENHKQot
ICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7Ci0gICAgICAgIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2
b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIFBs
YXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVu
ZGVyVGFyZ2V0Kik7CisgICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50
SWZOZWNlc3NhcnkoSUQyRDFSZW5kZXJUYXJnZXQqKTsKICNlbGlmIFVTRShDQUlSTykKLSAgICAg
ICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFs
cGhhKTsKKyAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQg
Z2xvYmFsQWxwaGEpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICBXRUJDT1JFX0VY
UE9SVCBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
OwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0aW8pOwotCi0gICAgICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gbnVsbHB0cjsgfQotICAgICAgICB2
b2lkIHBsYXRmb3JtRGVzdHJveSgpOworcHJpdmF0ZToKKyAgICBHcmFkaWVudChMaW5lYXJEYXRh
JiYpOworICAgIEdyYWRpZW50KFJhZGlhbERhdGEmJik7CisKKyAgICBQbGF0Zm9ybUdyYWRpZW50
IHBsYXRmb3JtR3JhZGllbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVu
dCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgICAgIHZv
aWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5
KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJ
RDJEMVJlbmRlclRhcmdldCopOworICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRl
clRhcmdldCopOwogI2VuZGlmCiAKLSAgICAgICAgLy8gS2VlcCBhbnkgcGFyYW1ldGVycyByZWxl
dmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRoIHRoZSBzdHJ1Y3R1cmUgaW4gR3JhZGllbnQ6
Omhhc2goKS4KLSAgICAgICAgYm9vbCBtX3JhZGlhbDsKLSAgICAgICAgRmxvYXRQb2ludCBtX3Aw
OwotICAgICAgICBGbG9hdFBvaW50IG1fcDE7Ci0gICAgICAgIGZsb2F0IG1fcjA7Ci0gICAgICAg
IGZsb2F0IG1fcjE7Ci0gICAgICAgIGZsb2F0IG1fYXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRp
Y2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KLSAgICAgICAgbXV0YWJsZSBWZWN0b3I8Q29s
b3JTdG9wLCAyPiBtX3N0b3BzOwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9zdG9wc1NvcnRlZDsK
LSAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKKyAgICBEYXRhIG1f
ZGF0YTsKIAotICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaDsKKyAgICBtdXRh
YmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOworICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29y
dGVkIHsgZmFsc2UgfTsKKyAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7
IFNwcmVhZE1ldGhvZFBhZCB9OworICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbjsKIAotICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7Ci0g
ICAgfTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaCB7IDAgfTsKIAotfSAvL25h
bWVzcGFjZQorICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFkaWVudDsKK307CiAKLSNlbmRpZgor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTIs
NyArODUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ3JhZGllbnQuZmlsbCh0aGlzLCByZWN0KTsKKyAg
ICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDE0
IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIGNhaXJvX3BhdHRlcm5fdCog
R3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0g
ICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudDsKLSAgICBpZiAobV9yYWRpYWwpCi0gICAgICAg
IGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKG1fcDAueCgpLCBtX3AwLnko
KSwgbV9yMCwgbV9wMS54KCksIG1fcDEueSgpLCBtX3IxKTsKLSAgICBlbHNlCi0gICAgICAgIGdy
YWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKG1fcDAueCgpLCBtX3AwLnkoKSwg
bV9wMS54KCksIG1fcDEueSgpKTsKKyAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RG
Ojpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkg
LT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9j
cmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50
MS54KCksIGRhdGEucG9pbnQxLnkoKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3Qg
UmFkaWFsRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgICAgICByZXR1
cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2lu
dDAueSgpLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnko
KSwgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICB9CisgICAgKTsKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKICAgICAgICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRl
ZCgpKSB7CkBAIC03OCwxNCArODEsMTQgQEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3Jl
YXRlUGxhdGZvcgogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotdm9pZCBHcmFkaWVudDo6Zmls
bChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcGxhdGZvcm1HcmFkaWVudCA9
IGFkb3B0UmVmKGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMS4wKSk7CiAKLSAgICBjb250ZXh0LT5z
YXZlKCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBD
YWlybzo6ZmlsbFJlY3QoKmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBwbGF0Zm9y
bUdyYWRpZW50LmdldCgpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgY29udGV4dC5z
YXZlKCk7CisgICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIENh
aXJvOjpmaWxsUmVjdCgqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcGxhdGZvcm1H
cmFkaWVudC5nZXQoKSk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYWRpZW50Q0cuY3BwCShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEdyYWRpZW50OjpwbGF0Zm9y
bURlc3Ryb3koKQogewogICAgIENHR3JhZGllbnRSZWxlYXNlKG1fZ3JhZGllbnQpOwotICAgIG1f
Z3JhZGllbnQgPSAwOworICAgIG1fZ3JhZGllbnQgPSBudWxscHRyOwogfQogCiBDR0dyYWRpZW50
UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKQEAgLTkyLDQzICs5Miw0NSBAQCBDR0dy
YWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50CiAgICAgcmV0dXJuIG1fZ3JhZGll
bnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGNvbnRleHQtPmNsaXAo
cmVjdCk7CisgICAgY29udGV4dC5jbGlwKHJlY3QpOwogICAgIHBhaW50KGNvbnRleHQpOwogfQog
Ci12b2lkIEdyYWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdy
YWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQ0dDb250ZXh0
UmVmIGN0eCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHBhaW50KGN0eCk7Cisg
ICAgcGFpbnQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhZGllbnQ6
OnBhaW50KENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBDR0dyYWRpZW50RHJhd2luZ09wdGlvbnMg
ZXh0ZW5kT3B0aW9ucyA9IGtDR0dyYWRpZW50RHJhd3NCZWZvcmVTdGFydExvY2F0aW9uIHwga0NH
R3JhZGllbnREcmF3c0FmdGVyRW5kTG9jYXRpb247Ci0gICAgaWYgKCFtX3JhZGlhbCkgewotICAg
ICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQoY29udGV4dCwgcGxhdGZvcm1HcmFkaWVu
dCgpLCBtX3AwLCBtX3AxLCBleHRlbmRPcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGJvb2wgbmVlZFNjYWxpbmcgPSBhc3BlY3RSYXRpbygpICE9IDE7Ci0gICAgaWYgKG5l
ZWRTY2FsaW5nKSB7Ci0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAg
ICAgIC8vIFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZl
ciBzY2FsZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCi0gICAgICAgIC8vIGZvciB3aGljaCBt
X3AwID09IG1fcDEuCi0gICAgICAgIEFTU0VSVChtX3AwID09IG1fcDEpOwotICAgICAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgbV9wMC54KCksIG1fcDAueSgpKTsKLSAgICAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgMSAvIGFzcGVjdFJhdGlvKCkpOwotICAgICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLW1fcDAueCgpLCAtbV9wMC55KCkpOwot
ICAgIH0KIAotICAgIENHQ29udGV4dERyYXdSYWRpYWxHcmFkaWVudChjb250ZXh0LCBwbGF0Zm9y
bUdyYWRpZW50KCksIG1fcDAsIG1fcjAsIG1fcDEsIG1fcjEsIGV4dGVuZE9wdGlvbnMpOwotCi0g
ICAgaWYgKG5lZWRTY2FsaW5nKQotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRl
eHQpOworICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAorICAgICAgICBbJl0gKGNvbnN0IExpbmVh
ckRhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMaW5lYXJHcmFkaWVudChw
bGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgZGF0YS5wb2ludDAsIGRhdGEucG9p
bnQxLCBleHRlbmRPcHRpb25zKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSYWRp
YWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBib29sIG5lZWRTY2FsaW5nID0gZGF0YS5hc3Bl
Y3RSYXRpbyAhPSAxOworICAgICAgICAgICAgaWYgKG5lZWRTY2FsaW5nKSB7CisgICAgICAgICAg
ICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOworICAgICAgICAgICAg
ICAgIC8vIFNjYWxlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQuIFdlIG9ubHkgZXZl
ciBzY2FsZSBub24tZGVwcmVjYXRlZCBncmFkaWVudHMsCisgICAgICAgICAgICAgICAgLy8gZm9y
IHdoaWNoIHBvaW50MCA9PSBwb2ludDEuCisgICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEucG9p
bnQwID09IGRhdGEucG9pbnQxKTsKKyAgICAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0ocGxhdGZvcm1Db250ZXh0LCBkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSk7Cisg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0LCAxLCAxIC8g
ZGF0YS5hc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCwgLWRhdGEucG9pbnQwLngoKSwgLWRhdGEucG9pbnQwLnkoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdSYWRpYWxHcmFkaWVudChw
bGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgZGF0YS5wb2ludDAsIGRhdGEuc3Rh
cnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cywgZXh0ZW5kT3B0aW9ucyk7CisK
KyAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKKyAgICAgICAgICAgICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCk7CisgICAgICAgIH0KKyAgICApOwogfQogCi19
IC8vbmFtZXNwYWNlCit9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNp
b24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3Rh
dGUuZmlsbEdyYWRpZW50LT5wYWludCh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CkBAIC04
NDgsNyArODQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAog
ICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7
CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250
ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlz
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODk2LDcgKzg5Niw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVjdCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnQt
PmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudC0+cGFpbnQodGhpcyk7CisgICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFp
bnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzIzLDcg
KzEzMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAg
ICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRy
YW5zZm9ybSgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KHRo
aXMpOworICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYyICs3OCw3OCBA
QCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgICAgIG1fZ3Jh
ZGllbnQgPSBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChtX3JhZGlhbCkgewotICAgICAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gcDEoKSAtIHAwKCk7Ci0gICAgICAgIElEMkQxUmFkaWFsR3JhZGll
bnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICBmbG9hdCByYWRpdXNY
ID0gZW5kUmFkaXVzKCkgKyBvZmZzZXQud2lkdGgoKTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWSA9
IHJhZGl1c1ggLyBtX2FzcGVjdFJhdGlvOwotICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3Jl
YXRlUmFkaWFsR3JhZGllbnRCcnVzaCgKLSAgICAgICAgICAgIEQyRDE6OlJhZGlhbEdyYWRpZW50
QnJ1c2hQcm9wZXJ0aWVzKHAwKCksIEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9mZnNl
dC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAotICAgICAgICAgICAgRDJEMTo6QnJ1c2hQ
cm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAm
cmFkaWFsR3JhZGllbnQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICAgICAgbV9ncmFkaWVudCA9IHJhZGlhbEdyYWRpZW50OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIElEMkQxTGluZWFyR3JhZGllbnRCcnVzaCogbGluZWFyR3JhZGllbnQgPSBudWxscHRyOwot
ICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlTGluZWFyR3JhZGllbnRCcnVzaCgKLSAg
ICAgICAgICAgIEQyRDE6OkxpbmVhckdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKHAwKCksIHAxKCkp
LAotICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxl
Y3Rpb24uZ2V0KCksCi0gICAgICAgICAgICAmbGluZWFyR3JhZGllbnQpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgbV9ncmFkaWVudCA9IGxpbmVhckdy
YWRpZW50OwotICAgIH0KKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChj
b25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50
QnJ1c2gqIGxpbmVhckdyYWRpZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGhyID0gcmVuZGVy
VGFyZ2V0LT5DcmVhdGVMaW5lYXJHcmFkaWVudEJydXNoKAorICAgICAgICAgICAgICAgIEQyRDE6
OkxpbmVhckdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSks
CisgICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENv
bGxlY3Rpb24uZ2V0KCksCisgICAgICAgICAgICAgICAgJmxpbmVhckdyYWRpZW50KTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICAgICAgbV9ncmFk
aWVudCA9IGxpbmVhckdyYWRpZW50OworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJh
ZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBkYXRhLnBv
aW50MSAtIGRhdGEucG9pbnQwOworICAgICAgICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNo
KiByYWRpYWxHcmFkaWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBmbG9hdCByYWRpdXNYID0g
ZGF0YS5lbmRSYWRpdXMgKyBvZmZzZXQud2lkdGgoKTsKKyAgICAgICAgICAgIGZsb2F0IHJhZGl1
c1kgPSByYWRpdXNYIC8gZGF0YS5hc3BlY3RSYXRpbzsKKyAgICAgICAgICAgIGhyID0gcmVuZGVy
VGFyZ2V0LT5DcmVhdGVSYWRpYWxHcmFkaWVudEJydXNoKAorICAgICAgICAgICAgICAgIEQyRDE6
OlJhZGlhbEdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKHAwKCksIEQyRDE6OlBvaW50MkYob2Zmc2V0
LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAorICAgICAgICAg
ICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdl
dCgpLAorICAgICAgICAgICAgICAgICZyYWRpYWxHcmFkaWVudCk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgICAgIG1fZ3JhZGllbnQgPSByYWRp
YWxHcmFkaWVudDsKKyAgICAgICAgfQorICAgICk7CiAKICAgICBoYXNoKCk7CiB9CiAKLXZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gZDJkQ29udGV4dCA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwotCi0gICAgYm9vbCBuZWVkU2NhbGluZyA9IGFzcGVjdFJhdGlvKCkg
IT0gMTsKLSAgICBpZiAobmVlZFNjYWxpbmcpIHsKLSAgICAgICAgY29udGV4dC0+c2F2ZSgpOwot
ICAgICAgICAvLyBTY2FsZSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50LiBXZSBvbmx5
IGV2ZXIgc2NhbGUgbm9uLWRlcHJlY2F0ZWQgZ3JhZGllbnRzLAotICAgICAgICAvLyBmb3Igd2hp
Y2ggbV9wMCA9PSBtX3AxLgotICAgICAgICBBU1NFUlQobV9wMCA9PSBtX3AxKTsKLQotICAgICAg
ICBEMkQxX01BVFJJWF8zWDJfRiBjdG0gPSB7IH07Ci0gICAgICAgIGQyZENvbnRleHQtPkdldFRy
YW5zZm9ybSgmY3RtKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGN0bSk7
Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV9wMCk7Ci0gICAgICAgIHRyYW5zZm9ybS5z
Y2FsZU5vblVuaWZvcm0oMS4wLCAxLjAgLyBhc3BlY3RSYXRpbygpKTsKLSAgICAgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgtbV9wMCk7Ci0KLSAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3Jt
KGN0bSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCi0g
ICAgICAgIGdlbmVyYXRlR3JhZGllbnQoZDJkQ29udGV4dCk7Ci0KLSAgICBkMmRDb250ZXh0LT5T
ZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKLQotICAgIGNvbnN0IEQyRDFfUkVD
VF9GIGQyZFJlY3QgPSByZWN0OwotICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJl
Y3QsIG1fZ3JhZGllbnQpOworICAgIGF1dG8gZDJkQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCk7CiAKLSAgICBpZiAobmVlZFNjYWxpbmcpCi0gICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBMaW5l
YXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFk
aWVudCkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOworCisg
ICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9f
KTsKKworICAgICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CisgICAg
ICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsK
KyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICBib29sIG5lZWRTY2FsaW5nID0gZGF0YS5hc3BlY3RSYXRpbyAhPSAxOworICAgICAg
ICAgICAgaWYgKG5lZWRTY2FsaW5nKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5zYXZlKCk7
CisgICAgICAgICAgICAgICAgLy8gU2NhbGUgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBncmFkaWVu
dC4gV2Ugb25seSBldmVyIHNjYWxlIG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cywKKyAgICAgICAg
ICAgICAgICAvLyBmb3Igd2hpY2ggbV9wMCA9PSBtX3AxLgorICAgICAgICAgICAgICAgIEFTU0VS
VChkYXRhLnBvaW50MCA9PSBkYXRhLnBvaW50MSk7CisKKyAgICAgICAgICAgICAgICBEMkQxX01B
VFJJWF8zWDJfRiBjdG0gPSB7IH07CisgICAgICAgICAgICAgICAgZDJkQ29udGV4dC0+R2V0VHJh
bnNmb3JtKCZjdG0pOworCisgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bShjdG0pOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGF0YS5wb2ludDAp
OworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oMS4wLCAxLjAgLyBk
YXRhLmFzcGVjdFJhdGlvKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1k
YXRhLnBvaW50MCk7CisKKyAgICAgICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUcmFuc2Zvcm0o
Y3RtKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwg
IW1fZ3JhZGllbnQpCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0
KTsKKworICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBf
X0xJTkVfXyk7CisKKyAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0
OworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9ncmFk
aWVudCk7CisKKyAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgfQorICAgICk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDIyNTAzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtODk3LDcgKzg5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jl
c3NCYXIoY28KICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKIAogICAg
IGNvbnN0IGZsb2F0IHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gPSByZWN0LnkoKSArIHZlcnRp
Y2FsT2Zmc2V0OwotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSk7CisgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3Qu
eCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVy
dGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7CiAgICAg
c3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDB4OGQsIDB4OGQsIDB4OGQp
KTsKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIENvbG9yKDB4ZWUsIDB4
ZWUsIDB4ZWUpKTsKICAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIENvbG9y
KDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChib3JkZXIsIHJvdW5kZWRDb3JuZXJSYWRpdXMsIHJv
dW5kZWRDb3JuZXJSYWRpdXMsIHJvdW5kZWRDb3JuZXJSYWRpdXMsIHJvdW5kZWRDb3JuZXJSYWRp
dXMpKTsKIAogICAgIGZsb2F0IHVwcGVyR3JhZGllbnRIZWlnaHQgPSBwcm9ncmVzc0JhckhlaWdo
dCAvIDIuOwotICAgIFJlZlB0cjxHcmFkaWVudD4gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50Ojpj
cmVhdGUoRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
NSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBl
ckdyYWRpZW50SGVpZ2h0IC0gMS41KSk7CisgICAgUmVmUHRyPEdyYWRpZW50PiB1cHBlckdyYWRp
ZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAt
IDEuNSkgfSk7CiAgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTMz
LCAxMzMsIDEzMywgMTg4KSk7CiAgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwg
Q29sb3IoMTgsIDE4LCAxOCwgNTEpKTsKICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCh1cHBl
ckdyYWRpZW50LnJlbGVhc2VOb25OdWxsKCkpOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgLy8gMikgRHJhdyB0aGUg
cHJvZ3Jlc3MgYmFyLgogICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJlbmRlclBy
b2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKICAgICAgICAgZG91YmxlIGJhcldpZHRoID0g
cG9zaXRpb24gKiByZWN0LndpZHRoKCk7Ci0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSk7CisgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJE
YXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
NSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9n
cmVzc0JhckhlaWdodCAtIDEpIH0pOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuMCwgQ29sb3IoMTk1LCAyMTcsIDI0NykpOwogICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDAuNDUsIENvbG9yKDExOCwgMTY0LCAyMjgpKTsKICAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjQ5LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7CkBAIC05MzgsNyArOTM4
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0KSk7CiAgICAg
ICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KGJhckdyYWRpZW50LnJlbGVhc2VOb25OdWxsKCkp
OwogCi0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyU3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSk7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gYmFyU3Ryb2tlR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQocmVjdC54
KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0p
OwogICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoOTUs
IDEwNywgMTgzKSk7CiAgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41
LCBDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOwogICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMzgsIDEwNCwgMTY2KSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDIyNTAzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgRmxvYXRQb2ludCBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZQogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxk
R3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEpIGNvbnN0CiB7Ci0gICAgZ3JhZGll
bnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludChtX2F0dHJpYnV0
ZXMpLCBlbmRQb2ludChtX2F0dHJpYnV0ZXMpKTsKKyAgICBncmFkaWVudERhdGEtPmdyYWRpZW50
ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IHN0YXJ0UG9pbnQobV9h
dHRyaWJ1dGVzKSwgZW5kUG9pbnQobV9hdHRyaWJ1dGVzKSB9KTsKICAgICBncmFkaWVudERhdGEt
PmdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2QocGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlw
ZShtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpKTsKICAgICBhZGRTdG9wcyhncmFkaWVudERh
dGEsIG1fYXR0cmlidXRlcy5zdG9wcygpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmNwcAkocmV2aXNpb24gMjI1MDMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMTEgKzYzLDcgQEAgZmxvYXQgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6
ZgogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQo
R3JhZGllbnREYXRhKiBncmFkaWVudERhdGEpIGNvbnN0CiB7Ci0gICAgZ3JhZGllbnREYXRhLT5n
cmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUodGhpcy0+Zm9jYWxQb2ludChtX2F0dHJpYnV0ZXMp
LAotICAgICAgICB0aGlzLT5mb2NhbFJhZGl1cyhtX2F0dHJpYnV0ZXMpLAotICAgICAgICB0aGlz
LT5jZW50ZXJQb2ludChtX2F0dHJpYnV0ZXMpLAotICAgICAgICB0aGlzLT5yYWRpdXMobV9hdHRy
aWJ1dGVzKSk7Ci0KKyAgICBncmFkaWVudERhdGEtPmdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShHcmFkaWVudDo6UmFkaWFsRGF0YSB7IHRoaXMtPmZvY2FsUG9pbnQobV9hdHRyaWJ1dGVzKSwg
dGhpcy0+Y2VudGVyUG9pbnQobV9hdHRyaWJ1dGVzKSwgdGhpcy0+Zm9jYWxSYWRpdXMobV9hdHRy
aWJ1dGVzKSwgdGhpcy0+cmFkaXVzKG1fYXR0cmlidXRlcyksIDEgfSk7CiAgICAgZ3JhZGllbnRE
YXRhLT5ncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKHBsYXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNW
R1R5cGUobV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKSk7CiAKICAgICBhZGRTdG9wcyhncmFk
aWVudERhdGEsIG1fYXR0cmlidXRlcy5zdG9wcygpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>