<?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>165368</bug_id>
          
          <creation_ts>2016-12-04 11:00:37 -0800</creation_ts>
          <short_desc>[CSS Parser] Eliminate in-place lowercasing in the parser.</short_desc>
          <delta_ts>2016-12-04 16:36:11 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1256183</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 11:00:37 -0800</bug_when>
    <thetext>[CSS Parser] Eliminate in-place lowercasing in the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256184</commentid>
    <comment_count>1</comment_count>
      <attachid>296090</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 11:11:27 -0800</bug_when>
    <thetext>Created attachment 296090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256185</commentid>
    <comment_count>2</comment_count>
      <attachid>296091</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 11:13:25 -0800</bug_when>
    <thetext>Created attachment 296091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256186</commentid>
    <comment_count>3</comment_count>
      <attachid>296092</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 11:42:23 -0800</bug_when>
    <thetext>Created attachment 296092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256194</commentid>
    <comment_count>4</comment_count>
      <attachid>296097</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 12:26:21 -0800</bug_when>
    <thetext>Created attachment 296097
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256213</commentid>
    <comment_count>5</comment_count>
      <attachid>296097</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-04 14:18:36 -0800</bug_when>
    <thetext>Comment on attachment 296097
Patch

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

Looks great!

&gt; Source/WebCore/css/CSSSelector.cpp:89
&gt; +    AtomicString value(m_data.m_value);
&gt; +    if (m_data.m_value)
&gt; +        m_data.m_value-&gt;deref();

Instead of the three lines above, we should write this:

    AtomicString value { adoptRef(m_data.m_value) };

This avoids some reference count churn.

&gt; Source/WebCore/css/CSSSelector.cpp:90
&gt; +    m_data.m_rareData = &amp;RareData::create(value).leakRef();

Should use WTFMove on the AtomicString value to pass in to avoid a little reference count churn:

    m_data.m_rareData = &amp;RareData::create(WTFMove(value)).leakRef();

&gt; Source/WebCore/css/CSSSelector.cpp:826
&gt; +CSSSelector::RareData::RareData(const AtomicString&amp; value)

Should take AtomicString&amp;&amp; instead of AtomicString. Avoid one round of reference count churn.

&gt; Source/WebCore/css/CSSSelector.h:245
&gt; +        void setValue(const AtomicString&amp;, bool matchLowerCase = false);

I think this needs a different name because &quot;match lower case&quot; sounds like &quot;should I match some lower case thing&quot;. I suggest the name shouldConvertToLowercaseForMatching. But maybe you can find a great name that is shorter.

&gt; Source/WebCore/css/CSSSelector.h:353
&gt; +            static Ref&lt;RareData&gt; create(const AtomicString&amp; value) { return adoptRef(*new RareData(value)); }

Should be AtomicString&amp;&amp; instead of const AtomicString&amp; and then use WTFMove inside the call to the constructor.

&gt; Source/WebCore/css/CSSSelector.h:374
&gt; +            RareData(const AtomicString&amp; value);

Should be AtomicString&amp;&amp;. No need for the name &quot;value&quot;. Should be marked explicit.

&gt; Source/WebCore/css/CSSSelector.h:468
&gt; +    

Should not add the stray space here.

&gt; Source/WebCore/css/CSSSelector.h:473
&gt; +    if (matchLowerCase &amp;&amp; !m_hasRareData &amp;&amp; !isASCIILowerCSSIdentifier(value))
&gt; +        createRareData();

Here’s how I would write this:

    AtomicString matchingValue = matchLowerCase ? value.convertToASCIILowercase() : value;
    if (!m_hasRareData &amp;&amp; matchingValue != value)
        createRareData();

Here’s why: convertToASCIILowercase is already optimized for the case where there are no uppercase characters, and so it should be fast in that case, possibly even faster than isASCIILowerCSSIdentifier. And in the case where we already have rare data, this was something we were going to do below anyway. Then below it would be this:

    m_data.m_rareData-&gt;m_matchingValue = WTFMove(matchingValue);

Doing that avoids adding reference count churn just because we had a temporary AtomicString.

&gt; Source/WebCore/css/MediaQueryExp.cpp:296
&gt;      : m_mediaFeature(feature)
&gt;      , m_isValid(false)
&gt;  {
&gt; +    if (!isASCIILowerCSSIdentifier(m_mediaFeature))
&gt; +        m_mediaFeature = m_mediaFeature.convertToASCIILowercase();

Calling isASCIILowerCSSIdentifier isn’t an effective optimization. AtomicString::convertToASCIILowercase already has a fast path for when nothing is uppercase. It should just be written like this:

    : m_mediaFeature(feature.convertToASCIILowercase())

No need for the if statement.

&gt; Source/WebCore/css/parser/CSSParserIdioms.h:67
&gt; +inline bool isASCIILowerCSSIdentifier(const AtomicString&amp; value)

This function should just be named containsASCIIUppercase. We might also want to make version with a fast case for 8 bit; this version checks 8-bit every time through the loop.

But more importantly, if you take my advice above, then you don’t need this function at all.

&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:2127
&gt; +    if (context.isHTMLDocument &amp;&amp; !isASCIILowerCSSIdentifier(attrName))
&gt; +        attrName = attrName.convertToASCIILowercase();

Again, the isASCIILowerCSSIdentifier check here is not an optimization. Just write this:

    if (context.isHTMLDocument)
        attrName = attrName.convertToASCIILowercase();

But it’s a tiny bit annoying that we did toAtomicString on a string that could have contained uppercase; there is a chance we will be destroying that AtomicString we made because we make the lowercase one instead. If we care to tighten that case we could probably add a CSSParserToken function that produces a possibly-lowercased AtomicString efficiently and never has to allocate two strings. But that’s probably overdoing it.

&gt; Source/WebCore/css/parser/CSSSelectorParser.cpp:513
&gt; +    auto lowerValue = token.value().toAtomicString();
&gt; +    if (!isASCIILowerCSSIdentifier(lowerValue))
&gt; +        lowerValue.convertToASCIILowercase();
&gt; +    auto value = StringView(lowerValue);

No reason to use AtomicString here, and isASCIILowerCSSIdentifier is not an optimization. So this should be just this:

    auto lowercasedValue = token.value().toString().convertToASCIILowercase();
    auto value = StringView { lowercasedValue };

Same thought as above about the extra temporary string here; the token class could be taught to make a string that is already lowercased rather than doing it after allocating a String. This will be slower than the old code that lowercased in place when uppercase characters are involved, because that code would never allocate two strings.

&gt; Source/WebCore/css/parser/CSSSelectorParser.cpp:523
&gt; +        auto tokenString = value.toString();
&gt;          if (!tokenString.startsWithIgnoringASCIICase(&quot;host&quot;)) {
&gt;              newValue = value.toString() + &quot;(&quot;;
&gt;              value = newValue;

This code allocates a lot of unnecessary strings. This version allocates no StringImpl when it doesn&apos;t start with &quot;host&quot; and allocates only one StringImpl when it does. The old code allocated 1 and 3 StringImpl in those cases!

    if (!value.startsWithIgnoringASCIICase(StringVIew { &quot;host&quot; })) {
        newValue = makeString(value, &apos;(&apos;);
        value = newValue;
    }

And if we have some reason to wait to optimize it even tighter, we could easily write a startsWithLettersIgnoringASCIICase function that takes a StringView and then we could have written:

    if (!startsLettersWithIgnoringASCIICase(value, &quot;host&quot;)) {
        newValue = makeString(value, &apos;(&apos;);
        value = newValue;
    }

But that seems like maybe premature optimization whereas the other one above just seems like common sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256215</commentid>
    <comment_count>6</comment_count>
      <attachid>296097</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-04 14:20:23 -0800</bug_when>
    <thetext>Comment on attachment 296097
Patch

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

&gt;&gt; Source/WebCore/css/CSSSelector.h:245
&gt;&gt; +        void setValue(const AtomicString&amp;, bool matchLowerCase = false);
&gt; 
&gt; I think this needs a different name because &quot;match lower case&quot; sounds like &quot;should I match some lower case thing&quot;. I suggest the name shouldConvertToLowercaseForMatching. But maybe you can find a great name that is shorter.

Maybe matchLowerCase is not so bad. Or maybe matchAsLowerCase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256221</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 14:58:58 -0800</bug_when>
    <thetext>Note that the code involving the &quot;host&quot; check and all that is just temporary and can be removed once we have gotten rid of the old parser. I still made your suggested change to it, but it&apos;s living on borrowed time anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256229</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-12-04 16:36:11 -0800</bug_when>
    <thetext>Fixed in r209314.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296090</attachid>
            <date>2016-12-04 11:11:27 -0800</date>
            <delta_ts>2016-12-04 11:13:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165368-20161204131052.patch</filename>
            <type>text/plain</type>
            <size>19732</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE2LTEyLTA0ICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgUGFyc2VyXSBFbGltaW5hdGUg
aW4tcGxhY2UgbG93ZXJjYXNpbmcgaW4gdGhlIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTM2OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdGhlIGluLXBsYWNlIGxvd2VyY2Fz
aW5nIHRoYXQgdGhlIHBhcnNlciBkb2VzIHdpdGggbmV3CisgICAgICAgIG1lY2hhbmlzbXMuIElu
LXBsYWNlIGxvd2VyY2FzaW5nIHJ1aW5zIHNlcmlhbGl6YXRpb24gYW5kIGRvZXNuJ3QKKyAgICAg
ICAgd29yayBvbiBDU1MgcGFyc2VkIGZyb20gc3RhdGljIHN0cmluZ3MuIEl0IGFsc28gaGFzIHRo
ZSBzaWRlIGVmZmVjdAorICAgICAgICBvZiBtdXRhdGluZyBzdHJpbmdzIHBhc3NlZCBpbiBmcm9t
IEphdmFTY3JpcHQgbGlrZSBmb3IgcXVlcnlTZWxlY3RvckFsbC4KKworICAgICAgICBGb3IgY2xh
c3MvaWQgc2VsZWN0b3JzLCB3ZSBub3cgY2hlY2sgaWYgdGhlIHN0cmluZyBpcyBsb3dlcmNhc2Ug
b3Igbm90LgorICAgICAgICBJZiBpdCBjb250YWlucyB1cHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVy
cywgdGhlbiB3ZSBhbGxvY2F0ZSB0aGUgUmFyZURhdGEKKyAgICAgICAgZm9yIHRoZSBzZWxlY3Rv
ci4gUmFyZURhdGEgbm93IGhhcyB0d28gZmllbGRzIGluc3RlYWQgb2Ygb25lIGZvciB0aGUgdmFs
dWUsCisgICAgICAgIGEgbWF0Y2hpbmcgdmFsdWUgKGFsbCBsb3dlcmNhc2UgaW4gcXVpcmtzIG1v
ZGUpLCBhbmQgYSBzZXJpYWxpemluZyB2YWx1ZSAodGhlCisgICAgICAgIG9yaWdpbmFsIHN0cmlu
ZykuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGF0IHRoZSBDU1NTZWxlY3RvciBsZXZlbCwgdGhlIG9s
ZAorICAgICAgICBwYXJzZXIgaGFzIGJlZW4gcGF0Y2hlZCBhcyB3ZWxsIGZvciB0aGVzZSBjYXNl
cy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgaW4tcGxhY2UgbG93ZXJjYXNpbmcgd2FzIGRvbmUg
Zm9yIHBzZXVkby1lbGVtZW50cywgZm9yCisgICAgICAgIG1lZGlhIHF1ZXJ5IGZlYXR1cmVzLCBh
bmQgZm9yIGF0dHIoKS4gSW4gYWxsIG9mIHRoZXNlIGNhc2VzIHdlIGRvCisgICAgICAgIGxvd2Vy
Y2FzZSBjb252ZXJ0aW5nIGJ5IGZpcnN0IGNoZWNraW5nIGlmIGl0J3MgbmVlZGVkLiBTZXJpYWxp
emF0aW9uIHdpbGwKKyAgICAgICAgbm90IHJldGFpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGluIHRo
ZXNlIGNhc2VzLCBzbyB3ZSBtYXkgd2FudCB0byByZXZpc2l0CisgICAgICAgIHRoZXNlIGNhc2Vz
IGluIHRoZSBmdXR1cmUgYW5kIGFwcGx5IGEgc29sdXRpb24gc2ltaWxhciB0byB3aGF0IHdlIGRp
ZCBmb3IKKyAgICAgICAgc2VsZWN0b3JzLgorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5p
bjoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpzZWxlY3RvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRh
OjpSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6On5S
YXJlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXJpYWxpemluZ1ZhbHVlKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeUV4cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUGFyc2VySWRpb21zLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FTQ0lJTG93ZXJDU1NJ
ZGVudGlmaWVyKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJUb2tlbjo6Y29udmVydFRvQVNDSUlMb3dlcmNh
c2VJblBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2Vu
Lmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQXR0cik6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8pOgorICAgICAgICAqIGNzcy9wYXJzZXIvTWVk
aWFRdWVyeVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5UGFyc2VyOjpy
ZWFkRmVhdHVyZSk6CisKIDIwMTYtMTItMDQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBhIGJ1aWxkIGJyZWFrIG9uIEVGTCBzaW5jZSByMjA5
MzAzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCShyZXZpc2lvbiAyMDkzMDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjE0LDkgKzEyMTQsNyBAQCBzcGVjaWZpZXI6CiAgICAgSURTRUwgewogICAgICAgICAkJCA9
IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpJZCk7Ci0gICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NN
b2RlKQotICAgICAgICAgICAgJDEuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0g
ICAgICAgICQkLT5zZXRWYWx1ZSgkMSk7CisgICAgICAgICQkLT5zZXRWYWx1ZSgkMSwgcGFyc2Vy
LT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSk7CiAgICAgfQogICB8IEhFWCB7CiAg
ICAgICAgIGlmICgkMVswXSA+PSAnMCcgJiYgJDFbMF0gPD0gJzknKQpAQCAtMTIyNCw5ICsxMjIy
LDcgQEAgc3BlY2lmaWVyOgogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICQkID0gbmV3IENT
U1BhcnNlclNlbGVjdG9yOwogICAgICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpJ
ZCk7Ci0gICAgICAgICAgICBpZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtz
TW9kZSkKLSAgICAgICAgICAgICAgICAkMS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2Uo
KTsKLSAgICAgICAgICAgICQkLT5zZXRWYWx1ZSgkMSk7CisgICAgICAgICAgICAkJC0+c2V0VmFs
dWUoJDEsIHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpOwogICAgICAg
ICB9CiAgICAgfQogICB8IGNsYXNzCkBAIC0xMjM4LDkgKzEyMzQsNyBAQCBjbGFzczoKICAgICAn
LicgSURFTlQgewogICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAg
JCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpDbGFzcyk7Ci0gICAgICAgIGlmIChwYXJzZXItPm1f
Y29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKQotICAgICAgICAgICAgJDIuY29udmVydFRv
QVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgICAgICQkLT5zZXRWYWx1ZSgkMik7CisgICAg
ICAgICQkLT5zZXRWYWx1ZSgkMiwgcGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtz
TW9kZSk7CiAgICAgfQogICA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAko
cmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsMTAgQEAgdm9pZCBDU1NTZWxlY3Rvcjo6Y3JlYXRl
UmFyZURhdGEoKQogICAgIGlmIChtX2hhc1JhcmVEYXRhKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gTW92ZSB0aGUgdmFsdWUgdG8gdGhlIHJhcmUgZGF0YSBzdHVjdHVyZS4KLSAgICBtX2RhdGEu
bV9yYXJlRGF0YSA9ICZSYXJlRGF0YTo6Y3JlYXRlKGFkb3B0UmVmKG1fZGF0YS5tX3ZhbHVlKSku
bGVha1JlZigpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2RhdGEubV92YWx1ZSk7CisgICAg
aWYgKG1fZGF0YS5tX3ZhbHVlKQorICAgICAgICBtX2RhdGEubV92YWx1ZS0+ZGVyZWYoKTsKKyAg
ICBtX2RhdGEubV9yYXJlRGF0YSA9ICZSYXJlRGF0YTo6Y3JlYXRlKHZhbHVlKS5sZWFrUmVmKCk7
CiAgICAgbV9oYXNSYXJlRGF0YSA9IHRydWU7CiB9CiAKQEAgLTQwNiwxMCArNDA5LDEwIEBAIFN0
cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KGNvbnN0IFMKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBpZiAoY3MtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAg
ICAgICBzdHIuYXBwZW5kKCcjJyk7Ci0gICAgICAgICAgICBzZXJpYWxpemVJZGVudGlmaWVyKGNz
LT52YWx1ZSgpLCBzdHIpOworICAgICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+c2Vy
aWFsaXppbmdWYWx1ZSgpLCBzdHIpOwogICAgICAgICB9IGVsc2UgaWYgKGNzLT5tYXRjaCgpID09
IENTU1NlbGVjdG9yOjpDbGFzcykgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgnLicpOwotICAg
ICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+dmFsdWUoKSwgc3RyKTsKKyAgICAgICAg
ICAgIHNlcmlhbGl6ZUlkZW50aWZpZXIoY3MtPnNlcmlhbGl6aW5nVmFsdWUoKSwgc3RyKTsKICAg
ICAgICAgfSBlbHNlIGlmIChjcy0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
IHsKICAgICAgICAgICAgIHN3aXRjaCAoY3MtPnBzZXVkb0NsYXNzVHlwZSgpKSB7CiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNjU5LDcgKzY2Miw3IEBAIFN0cmluZyBDU1NTZWxlY3Rv
cjo6c2VsZWN0b3JUZXh0KGNvbnN0IFMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZExpdGVyYWwoIjo6Iik7Ci0g
ICAgICAgICAgICAgICAgc3RyLmFwcGVuZChjcy0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
c3RyLmFwcGVuZChjcy0+c2VyaWFsaXppbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChjcy0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAgICAgICAgICAgICBz
dHIuYXBwZW5kKCdbJyk7CkBAIC02OTYsNyArNjk5LDcgQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpz
ZWxlY3RvclRleHQoY29uc3QgUwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChjcy0+bWF0Y2goKSAhPSBDU1NTZWxlY3Rvcjo6U2V0KSB7
Ci0gICAgICAgICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGNzLT52YWx1ZSgpLCBzdHIpOworICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZVN0cmluZyhjcy0+c2VyaWFsaXppbmdWYWx1ZSgpLCBzdHIp
OwogICAgICAgICAgICAgICAgIGlmIChjcy0+YXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUlu
c2Vuc2l0aXZlKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0ci5hcHBlbmRMaXRlcmFsKCIgaV0i
KTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC04MjAsOCArODIzLDkgQEAgaW50IENTU1NlbGVj
dG9yOjpudGhCKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhLm1fcmFyZURhdGEtPm1fYjsKIH0K
IAotQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmlu
Z0ltcGw+IHZhbHVlKQotICAgIDogbV92YWx1ZSh2YWx1ZS5sZWFrUmVmKCkpCitDU1NTZWxlY3Rv
cjo6UmFyZURhdGE6OlJhcmVEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgOiBt
X21hdGNoaW5nVmFsdWUodmFsdWUpCisgICAgLCBtX3NlcmlhbGl6aW5nVmFsdWUodmFsdWUpCiAg
ICAgLCBtX2EoMCkKICAgICAsIG1fYigwKQogICAgICwgbV9hdHRyaWJ1dGUoYW55UU5hbWUoKSkK
QEAgLTgzMSw4ICs4MzUsNiBAQCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OlJhcmVEYXRhKFBhc3NS
ZWZQCiAKIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6flJhcmVEYXRhKCkKIHsKLSAgICBpZiAobV92
YWx1ZSkKLSAgICAgICAgbV92YWx1ZS0+ZGVyZWYoKTsKIH0KIAogLy8gYSBoZWxwZXIgZnVuY3Rp
b24gZm9yIHBhcnNpbmcgbnRoLWFyZ3VtZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9y
LmgJKHJldmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CkBAIC0yMzMsNiArMjM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ0xvd2VyY2FzZUxvY2FsTmFtZSgpIGNvbnN0OwogCiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzZXJpYWxpemluZ1ZhbHVlKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0OwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSgpIGNvbnN0OwogICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGFyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5t
X3JhcmVEYXRhLT5tX2FyZ3VtZW50IDogbnVsbEF0b207IH0KQEAgLTI0MCw3ICsyNDIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+KiBs
YW5nQXJndW1lbnRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5t
X3JhcmVEYXRhLT5tX2xhbmdBcmd1bWVudExpc3QuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgICAg
IGNvbnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSA6IG51
bGxwdHI7IH0KIAotICAgICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
ICAgICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgbWF0Y2hMb3dl
ckNhc2UgPSBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRo
ZXNlIHR3byBtZXRob2RzIGNhbiBnbyBhd2F5IG9uY2UgdGhlIG9sZCBwYXJzZXIgaXMgZ29uZS4K
ICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wpOwpA
QCAtMzQ4LDEzICszNTAsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDU1NTZWxl
Y3RvciYgb3BlcmF0b3I9KGNvbnN0IENTU1NlbGVjdG9yJik7CiAKICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UmFyZURhdGE+IHsKLSAgICAgICAgICAgIHN0YXRp
YyBSZWY8UmFyZURhdGE+IGNyZWF0ZShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJhcmVEYXRhKHZhbHVlKSk7IH0KKyAgICAgICAgICAg
IHN0YXRpYyBSZWY8UmFyZURhdGE+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IFJhcmVEYXRhKHZhbHVlKSk7IH0KICAgICAgICAgICAgIH5S
YXJlRGF0YSgpOwogCiAgICAgICAgICAgICBib29sIHBhcnNlTnRoKCk7CiAgICAgICAgICAgICBi
b29sIG1hdGNoTnRoKGludCBjb3VudCk7CiAKLSAgICAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwq
IG1fdmFsdWU7IC8vIFBsYWluIHBvaW50ZXIgdG8ga2VlcCB0aGluZ3MgdW5pZm9ybSB3aXRoIHRo
ZSB1bmlvbi4KKyAgICAgICAgICAgIC8vIEZvciBxdWlya3MgbW9kZSwgY2xhc3MgYW5kIGlkIGFy
ZSBjYXNlLWluc2Vuc2l0aXZlLiBJbiB0aGUgY2FzZSB3aGVyZSB1cHBlcmNhc2UKKyAgICAgICAg
ICAgIC8vIGxldHRlcnMgYXJlIHVzZWQgaW4gcXVpcmtzIG1vZGUsIHxtX21hdGNoaW5nVmFsdWV8
IGhvbGRzIHRoZSBsb3dlcmNhc2UgY2xhc3MvaWQKKyAgICAgICAgICAgIC8vIGFuZCB8bV9zZXJp
YWxpemluZ1ZhbHVlfCBob2xkcyB0aGUgb3JpZ2luYWwgc3RyaW5nLgorICAgICAgICAgICAgQXRv
bWljU3RyaW5nIG1fbWF0Y2hpbmdWYWx1ZTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBtX3Nl
cmlhbGl6aW5nVmFsdWU7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBtX2E7IC8vIFVz
ZWQgZm9yIDpudGgtKgogICAgICAgICAgICAgaW50IG1fYjsgLy8gVXNlZCBmb3IgOm50aC0qCiAg
ICAgICAgICAgICBRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOyAvLyB1c2VkIGZvciBhdHRyaWJ1
dGUgc2VsZWN0b3IKQEAgLTM2NCw3ICszNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PiBtX3NlbGVjdG9yTGlzdDsg
Ly8gVXNlZCBmb3IgOm1hdGNoZXMoKSBhbmQgOm5vdCgpLgogICAgICAgICAKICAgICAgICAgcHJp
dmF0ZToKLSAgICAgICAgICAgIFJhcmVEYXRhKFBhc3NSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4g
dmFsdWUpOworICAgICAgICAgICAgUmFyZURhdGEoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7
CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgY3JlYXRlUmFyZURhdGEoKTsKIApAQCAtNDU4LDIy
ICs0NjUsMjQgQEAgaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6OmlzQXR0cmlidXRlU2VsZQogICAg
ICAgICB8fCBtYXRjaCgpID09IENTU1NlbGVjdG9yOjpCZWdpbgogICAgICAgICB8fCBtYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpFbmQ7CiB9Ci0KLWlubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIAoraW5saW5lIHZvaWQgQ1NTU2Vs
ZWN0b3I6OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wgbWF0Y2hMb3dl
ckNhc2UpCiB7CiAgICAgQVNTRVJUKG1hdGNoKCkgIT0gVGFnKTsKKyAgICBpZiAobWF0Y2hMb3dl
ckNhc2UgJiYgIW1faGFzUmFyZURhdGEgJiYgIWlzQVNDSUlMb3dlckNTU0lkZW50aWZpZXIodmFs
dWUpKQorICAgICAgICBjcmVhdGVSYXJlRGF0YSgpOworICAgIAogICAgIC8vIE5lZWQgdG8gZG8g
cmVmIGNvdW50aW5nIG1hbnVhbGx5IGZvciB0aGUgdW5pb24uCi0gICAgaWYgKG1faGFzUmFyZURh
dGEpIHsKLSAgICAgICAgaWYgKG1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlKQotICAgICAgICAg
ICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUtPmRlcmVmKCk7Ci0gICAgICAgIG1fZGF0YS5t
X3JhcmVEYXRhLT5tX3ZhbHVlID0gdmFsdWUuaW1wbCgpOwotICAgICAgICBtX2RhdGEubV9yYXJl
RGF0YS0+bV92YWx1ZS0+cmVmKCk7CisgICAgaWYgKCFtX2hhc1JhcmVEYXRhKSB7CisgICAgICAg
IGlmIChtX2RhdGEubV92YWx1ZSkKKyAgICAgICAgICAgIG1fZGF0YS5tX3ZhbHVlLT5kZXJlZigp
OworICAgICAgICBtX2RhdGEubV92YWx1ZSA9IHZhbHVlLmltcGwoKTsKKyAgICAgICAgbV9kYXRh
Lm1fdmFsdWUtPnJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2RhdGEu
bV92YWx1ZSkKLSAgICAgICAgbV9kYXRhLm1fdmFsdWUtPmRlcmVmKCk7Ci0gICAgbV9kYXRhLm1f
dmFsdWUgPSB2YWx1ZS5pbXBsKCk7Ci0gICAgbV9kYXRhLm1fdmFsdWUtPnJlZigpOworCisgICAg
bV9kYXRhLm1fcmFyZURhdGEtPm1fbWF0Y2hpbmdWYWx1ZSA9IG1hdGNoTG93ZXJDYXNlID8gdmFs
dWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IHZhbHVlOworICAgIG1fZGF0YS5tX3JhcmVE
YXRhLT5tX3NlcmlhbGl6aW5nVmFsdWUgPSB2YWx1ZTsKIH0KIAogaW5saW5lIENTU1NlbGVjdG9y
OjpDU1NTZWxlY3RvcigpCkBAIC01NjcsOSArNTc2LDIxIEBAIGlubGluZSBjb25zdCBBdG9taWNT
dHJpbmcmIENTU1NlbGVjdG9yOjoKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIENTU1NlbGVj
dG9yOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1hdGNoKCkgIT0gVGFnKTsKKyAgICBp
ZiAobV9oYXNSYXJlRGF0YSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5tX3JhcmVEYXRhLT5tX21h
dGNoaW5nVmFsdWU7CisKKyAgICAvLyBBdG9taWNTdHJpbmcgaXMgcmVhbGx5IGp1c3QgYW4gQXRv
bWljU3RyaW5nSW1wbCogc28gdGhlIGNhc3QgYmVsb3cgaXMgc2FmZS4KKyAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nKj4oJm1fZGF0YS5tX3ZhbHVlKTsKK30K
KworaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU2VsZWN0b3I6OnNlcmlhbGl6aW5nVmFs
dWUoKSBjb25zdAoreworICAgIEFTU0VSVChtYXRjaCgpICE9IFRhZyk7CisgICAgaWYgKG1faGFz
UmFyZURhdGEpCisgICAgICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZXJpYWxpemlu
Z1ZhbHVlOworICAgIAogICAgIC8vIEF0b21pY1N0cmluZyBpcyByZWFsbHkganVzdCBhbiBBdG9t
aWNTdHJpbmdJbXBsKiBzbyB0aGUgY2FzdCBiZWxvdyBpcyBzYWZlLgotICAgIC8vIEZJWE1FOiBQ
ZXJoYXBzIGNhbGwgc2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBhY2NlcHQgQXRvbWljU3RyaW5n
SW1wbD8KLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nKj4o
bV9oYXNSYXJlRGF0YSA/ICZtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSA6ICZtX2RhdGEubV92
YWx1ZSk7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+
KCZtX2RhdGEubV92YWx1ZSk7CiB9CiAKIGlubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRBdHRy
aWJ1dGVWYWx1ZU1hdGNoaW5nSXNDYXNlSW5zZW5zaXRpdmUoYm9vbCBpc0Nhc2VJbnNlbnNpdGl2
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAJKHJldmlzaW9uIDIwODk5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkyLDYgKzI5Miw5IEBAIE1lZGlhUXVlcnlFeHByZXNzaW9uOjpNZWRpYVF1ZXJ5RXhw
cmVzc2kKICAgICA6IG1fbWVkaWFGZWF0dXJlKGZlYXR1cmUpCiAgICAgLCBtX2lzVmFsaWQoZmFs
c2UpCiB7CisgICAgaWYgKCFpc0FTQ0lJTG93ZXJDU1NJZGVudGlmaWVyKG1fbWVkaWFGZWF0dXJl
KSkKKyAgICAgICAgbV9tZWRpYUZlYXR1cmUgPSBtX21lZGlhRmVhdHVyZS5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOworICAgIAogICAgIC8vIENyZWF0ZSB2YWx1ZSBmb3IgbWVkaWEgcXVlcnkg
ZXhwcmVzc2lvbiB0aGF0IG11c3QgaGF2ZSAxIG9yIG1vcmUgdmFsdWVzLgogICAgIGlmICghdG9r
ZW5MaXN0LnNpemUoKSAmJiBpc0ZlYXR1cmVWYWxpZFdpdGhvdXRWYWx1ZShtX21lZGlhRmVhdHVy
ZSkpIHsKICAgICAgICAgLy8gVmFsaWQsIGNyZWF0ZXMgYSBNZWRpYVF1ZXJ5RXhwIHdpdGggYW4g
J2ludmFsaWQnIE1lZGlhUXVlcnlFeHBWYWx1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXJJZGlvbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlcklkaW9tcy5oCShyZXZpc2lvbiAyMDg5OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlcklkaW9tcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw0
ICs2NCwxMyBAQCBib29sIGlzVmFsdWVBbGxvd2VkSW5Nb2RlKHVuc2lnbmVkIHNob3J0CiAKIFVS
TCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwp
OwogCitpbmxpbmUgYm9vbCBpc0FTQ0lJTG93ZXJDU1NJZGVudGlmaWVyKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIodmFsdWVbaV0pKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Cisg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlclRva2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlclRva2VuLmNwcAkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
NiwyMyArNDc2LDQgQEAgdm9pZCBDU1NQYXJzZXJUb2tlbjo6c2VyaWFsaXplKFN0cmluZ0J1aQog
ICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElO
RSBzdGF0aWMgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRvQVNDSUlMb3dl
cihjaGFyYWN0ZXJzW2ldKTsKLX0KLQotLy8gRklYTUUtTkVXUEFSU0VSOiBXb3VsZCBsaWtlIHRv
IGdldCByaWQgb2YgdGhpcyBvcGVyYXRpb24uIEJsaW5rIHVzZXMgSFRNTFBhcnNlciBzdGF0aWMg
bG93ZXJjYXNlCi0vLyBzdHJpbmcgaGFzaGluZywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCBjb2Rl
IGluIG91ciBIVE1MUGFyc2VyLgotdm9pZCBDU1NQYXJzZXJUb2tlbjo6Y29udmVydFRvQVNDSUlM
b3dlcmNhc2VJblBsYWNlKCkKLXsKLSAgICBpZiAoIWhhc1N0cmluZ0JhY2tpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdmFsdWVJczhCaXQpCi0gICAgICAgIFdlYkNvcmU6OmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZShzdGF0aWNfY2FzdDxMQ2hhcio+KG1fdmFsdWVE
YXRhQ2hhclJhdyksIG1fdmFsdWVMZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgV2ViQ29yZTo6
Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKHN0YXRpY19jYXN0PFVDaGFyKj4obV92YWx1
ZURhdGFDaGFyUmF3KSwgbV92YWx1ZUxlbmd0aCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmgJKHJl
dmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVG9r
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIFN0cmluZ1ZpZXcoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihtX3ZhbHVlRGF0YUNo
YXJSYXcpLCBtX3ZhbHVlTGVuZ3RoKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlSW5QbGFjZSgpOwotCiAgICAgVUNoYXIgZGVsaW1pdGVyKCkgY29uc3Q7CiAgICAg
TnVtZXJpY1NpZ24gbnVtZXJpY1NpZ24oKSBjb25zdDsKICAgICBOdW1lcmljVmFsdWVUeXBlIG51
bWVyaWNWYWx1ZVR5cGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQYXJzZXJWYWx1ZXMuaAkocmV2aXNpb24gMjA5MDg1KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIx
OCw3IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvcj4gcmVsZWFz
ZVNlbGVjdG9yKCkgeyByZXR1cm4gV1RGTW92ZShtX3NlbGVjdG9yKTsgfQogCi0gICAgdm9pZCBz
ZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVl
KHZhbHVlKTsgfQorICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBtYXRjaExvd2VyQ2FzZSA9IGZhbHNlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVl
LCBtYXRjaExvd2VyQ2FzZSk7IH0KICAgICAKICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoZXNl
IHR3byBtZXRob2RzIGNhbiBnbyBhd2F5IG9uY2Ugb2xkIHBhcnNlciBpcyBnb25lLgogICAgIHZv
aWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGlzQ2FzZUlu
c2Vuc2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZSh2YWx1ZSwgaXNDYXNlSW5zZW5z
aXRpdmUpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcAkocmV2aXNpb24gMjA5MzAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMjIsMTAgKzIx
MjIsMTAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUF0dHIoQ1NTUAogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBDU1NQYXJzZXJUb2tlbiB0b2tlbiA9IGFyZ3Mu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICBpZiAoY29udGV4dC5pc0hUTUxEb2N1
bWVudCkKLSAgICAgICAgdG9rZW4uY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Cisg
ICAgYXV0byBhdHRyTmFtZSA9IHRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsKKyAgICBp
ZiAoY29udGV4dC5pc0hUTUxEb2N1bWVudCAmJiAhaXNBU0NJSUxvd2VyQ1NTSWRlbnRpZmllcihh
dHRyTmFtZSkpCisgICAgICAgIGF0dHJOYW1lID0gYXR0ck5hbWUuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKTsKIAotICAgIFN0cmluZyBhdHRyTmFtZSA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmco
KTsKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyMDkyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVj
dG9yUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDEwICszODksNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlCiAgICAgLy8gRklYTUUtTkVXUEFSU0VS
OiBBdm9pZCBoYXZpbmcgdG8gZG8gdGhpcywgYnV0IHRoZSBvbGQgcGFyc2VyIGRvZXMgYW5kIHdl
IG5lZWQKICAgICAvLyB0byBiZSBjb21wYXRpYmxlIGZvciBub3cuCiAgICAgQ1NTUGFyc2VyVG9r
ZW4gdG9rZW4gPSByYW5nZS5jb25zdW1lKCk7Ci0gICAgaWYgKG1fY29udGV4dC5tb2RlID09IEhU
TUxRdWlya3NNb2RlKQotICAgICAgICB0b2tlbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxh
Y2UoKTsKLSAgICBzZWxlY3Rvci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmlu
ZygpKTsKLQorICAgIHNlbGVjdG9yLT5zZXRWYWx1ZSh0b2tlbi52YWx1ZSgpLnRvQXRvbWljU3Ry
aW5nKCksIG1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKTsKICAgICByZXR1cm4gc2Vs
ZWN0b3I7CiB9CiAKQEAgLTQwOSw5ICs0MDYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+IENTU1NlCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBBdm9pZCBoYXZpbmcgdG8g
ZG8gdGhpcywgYnV0IHRoZSBvbGQgcGFyc2VyIGRvZXMgYW5kIHdlIG5lZWQKICAgICAvLyB0byBi
ZSBjb21wYXRpYmxlIGZvciBub3cuCiAgICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSByYW5nZS5j
b25zdW1lKCk7Ci0gICAgaWYgKG1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKQotICAg
ICAgICB0b2tlbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLSAgICBzZWxlY3Rv
ci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpKTsKKyAgICBzZWxlY3Rv
ci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpLCBtX2NvbnRleHQubW9k
ZSA9PSBIVE1MUXVpcmtzTW9kZSk7CiAKICAgICByZXR1cm4gc2VsZWN0b3I7CiB9CkBAIC01MTIs
MTcgKzUwNywxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlCiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yOwogICAgIAot
ICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogV291bGQgbGlrZSB0byBlbGltaW5hdGUgdGhpcy4KLSAg
ICBjb25zdF9jYXN0PENTU1BhcnNlclRva2VuJj4odG9rZW4pLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlSW5QbGFjZSgpOwotICAgIAotICAgIFN0cmluZ1ZpZXcgdmFsdWUgPSB0b2tlbi52YWx1ZSgp
OworICAgIGF1dG8gbG93ZXJWYWx1ZSA9IHRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsK
KyAgICBpZiAoIWlzQVNDSUlMb3dlckNTU0lkZW50aWZpZXIobG93ZXJWYWx1ZSkpCisgICAgICAg
IGxvd2VyVmFsdWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAgICBhdXRvIHZhbHVlID0g
U3RyaW5nVmlldyhsb3dlclZhbHVlKTsKICAgICAKICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFdl
IGNhbid0IGNoYW5nZSB0aGUgcHNldWRvY2xhc3MvZWxlbWVudCBtYXBzIHRoYXQgdGhlIG9sZCBw
YXJzZXIKICAgICAvLyB1c2VzIHdpdGhvdXQgYnJlYWtpbmcgaXQ7IHRoaXMgaGFjayBhbGxvd3Mg
ZnVuY3Rpb24gc2VsZWN0b3JzIHRvIHdvcmsuIFdoZW4gdGhlIG5ldwogICAgIC8vIHBhcnNlciB0
dXJucyBvbiwgd2UgY2FuIHBhdGNoIHRoZSBtYXAgYW5kIHJlbW92ZSB0aGlzIGNvZGUuCiAgICAg
U3RyaW5nIG5ld1ZhbHVlOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbiAm
JiBjb2xvbnMgPT0gMSkgewotICAgICAgICBTdHJpbmcgdG9rZW5TdHJpbmcgPSB2YWx1ZS50b1N0
cmluZygpOworICAgICAgICBhdXRvIHRva2VuU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKICAg
ICAgICAgaWYgKCF0b2tlblN0cmluZy5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoImhvc3Qi
KSkgewogICAgICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpICsgIigiOwogICAg
ICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvTWVkaWFRdWVyeVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9NZWRpYVF1ZXJ5UGFyc2VyLmNwcAkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9NZWRpYVF1ZXJ5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY2LDEzICsxNjYsMTEgQEAgdm9pZCBNZWRpYVF1ZXJ5UGFyc2VyOjpyZWFkRmVhdHVyZVN0
YXJ0KAogdm9pZCBNZWRpYVF1ZXJ5UGFyc2VyOjpyZWFkRmVhdHVyZShDU1NQYXJzZXJUb2tlblR5
cGUgdHlwZSwgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuKQogewogICAgIGlmICh0eXBlID09
IElkZW50VG9rZW4pIHsKLSAgICAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBGaW5kIGEgd2F5IHRv
IGF2b2lkIHRoaXMuCi0gICAgICAgIGNvbnN0X2Nhc3Q8Q1NTUGFyc2VyVG9rZW4mPih0b2tlbiku
Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7CiAgICAgICAgIG1fbWVkaWFRdWVyeURh
dGEuc2V0TWVkaWFGZWF0dXJlKHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIG1f
c3RhdGUgPSBSZWFkRmVhdHVyZUNvbG9uOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0YXRlID0g
U2tpcFVudGlsQ29tbWE7Ci19Cit9dG8KIAogdm9pZCBNZWRpYVF1ZXJ5UGFyc2VyOjpyZWFkRmVh
dHVyZUNvbG9uKENTU1BhcnNlclRva2VuVHlwZSB0eXBlLCBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4pCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296091</attachid>
            <date>2016-12-04 11:13:25 -0800</date>
            <delta_ts>2016-12-04 11:42:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165368-20161204131250.patch</filename>
            <type>text/plain</type>
            <size>19587</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE2LTEyLTA0ICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgUGFyc2VyXSBFbGltaW5hdGUg
aW4tcGxhY2UgbG93ZXJjYXNpbmcgaW4gdGhlIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTM2OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdGhlIGluLXBsYWNlIGxvd2VyY2Fz
aW5nIHRoYXQgdGhlIHBhcnNlciBkb2VzIHdpdGggbmV3CisgICAgICAgIG1lY2hhbmlzbXMuIElu
LXBsYWNlIGxvd2VyY2FzaW5nIHJ1aW5zIHNlcmlhbGl6YXRpb24gYW5kIGRvZXNuJ3QKKyAgICAg
ICAgd29yayBvbiBDU1MgcGFyc2VkIGZyb20gc3RhdGljIHN0cmluZ3MuIEl0IGFsc28gaGFzIHRo
ZSBzaWRlIGVmZmVjdAorICAgICAgICBvZiBtdXRhdGluZyBzdHJpbmdzIHBhc3NlZCBpbiBmcm9t
IEphdmFTY3JpcHQgbGlrZSBmb3IgcXVlcnlTZWxlY3RvckFsbC4KKworICAgICAgICBGb3IgY2xh
c3MvaWQgc2VsZWN0b3JzLCB3ZSBub3cgY2hlY2sgaWYgdGhlIHN0cmluZyBpcyBsb3dlcmNhc2Ug
b3Igbm90LgorICAgICAgICBJZiBpdCBjb250YWlucyB1cHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVy
cywgdGhlbiB3ZSBhbGxvY2F0ZSB0aGUgUmFyZURhdGEKKyAgICAgICAgZm9yIHRoZSBzZWxlY3Rv
ci4gUmFyZURhdGEgbm93IGhhcyB0d28gZmllbGRzIGluc3RlYWQgb2Ygb25lIGZvciB0aGUgdmFs
dWUsCisgICAgICAgIGEgbWF0Y2hpbmcgdmFsdWUgKGFsbCBsb3dlcmNhc2UgaW4gcXVpcmtzIG1v
ZGUpLCBhbmQgYSBzZXJpYWxpemluZyB2YWx1ZSAodGhlCisgICAgICAgIG9yaWdpbmFsIHN0cmlu
ZykuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGF0IHRoZSBDU1NTZWxlY3RvciBsZXZlbCwgdGhlIG9s
ZAorICAgICAgICBwYXJzZXIgaGFzIGJlZW4gcGF0Y2hlZCBhcyB3ZWxsIGZvciB0aGVzZSBjYXNl
cy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgaW4tcGxhY2UgbG93ZXJjYXNpbmcgd2FzIGRvbmUg
Zm9yIHBzZXVkby1lbGVtZW50cywgZm9yCisgICAgICAgIG1lZGlhIHF1ZXJ5IGZlYXR1cmVzLCBh
bmQgZm9yIGF0dHIoKS4gSW4gYWxsIG9mIHRoZXNlIGNhc2VzIHdlIGRvCisgICAgICAgIGxvd2Vy
Y2FzZSBjb252ZXJ0aW5nIGJ5IGZpcnN0IGNoZWNraW5nIGlmIGl0J3MgbmVlZGVkLiBTZXJpYWxp
emF0aW9uIHdpbGwKKyAgICAgICAgbm90IHJldGFpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGluIHRo
ZXNlIGNhc2VzLCBzbyB3ZSBtYXkgd2FudCB0byByZXZpc2l0CisgICAgICAgIHRoZXNlIGNhc2Vz
IGluIHRoZSBmdXR1cmUgYW5kIGFwcGx5IGEgc29sdXRpb24gc2ltaWxhciB0byB3aGF0IHdlIGRp
ZCBmb3IKKyAgICAgICAgc2VsZWN0b3JzLgorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5p
bjoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpzZWxlY3RvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRh
OjpSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6On5S
YXJlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXJpYWxpemluZ1ZhbHVlKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeUV4cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUGFyc2VySWRpb21zLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FTQ0lJTG93ZXJDU1NJ
ZGVudGlmaWVyKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJUb2tlbjo6Y29udmVydFRvQVNDSUlMb3dlcmNh
c2VJblBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2Vu
Lmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQXR0cik6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8pOgorICAgICAgICAqIGNzcy9wYXJzZXIvTWVk
aWFRdWVyeVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5UGFyc2VyOjpy
ZWFkRmVhdHVyZSk6CisKIDIwMTYtMTItMDQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBhIGJ1aWxkIGJyZWFrIG9uIEVGTCBzaW5jZSByMjA5
MzAzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCShyZXZpc2lvbiAyMDkzMDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjE0LDkgKzEyMTQsNyBAQCBzcGVjaWZpZXI6CiAgICAgSURTRUwgewogICAgICAgICAkJCA9
IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpJZCk7Ci0gICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NN
b2RlKQotICAgICAgICAgICAgJDEuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0g
ICAgICAgICQkLT5zZXRWYWx1ZSgkMSk7CisgICAgICAgICQkLT5zZXRWYWx1ZSgkMSwgcGFyc2Vy
LT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSk7CiAgICAgfQogICB8IEhFWCB7CiAg
ICAgICAgIGlmICgkMVswXSA+PSAnMCcgJiYgJDFbMF0gPD0gJzknKQpAQCAtMTIyNCw5ICsxMjIy
LDcgQEAgc3BlY2lmaWVyOgogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICQkID0gbmV3IENT
U1BhcnNlclNlbGVjdG9yOwogICAgICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpJ
ZCk7Ci0gICAgICAgICAgICBpZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtz
TW9kZSkKLSAgICAgICAgICAgICAgICAkMS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2Uo
KTsKLSAgICAgICAgICAgICQkLT5zZXRWYWx1ZSgkMSk7CisgICAgICAgICAgICAkJC0+c2V0VmFs
dWUoJDEsIHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpOwogICAgICAg
ICB9CiAgICAgfQogICB8IGNsYXNzCkBAIC0xMjM4LDkgKzEyMzQsNyBAQCBjbGFzczoKICAgICAn
LicgSURFTlQgewogICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAg
JCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpDbGFzcyk7Ci0gICAgICAgIGlmIChwYXJzZXItPm1f
Y29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKQotICAgICAgICAgICAgJDIuY29udmVydFRv
QVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgICAgICQkLT5zZXRWYWx1ZSgkMik7CisgICAg
ICAgICQkLT5zZXRWYWx1ZSgkMiwgcGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtz
TW9kZSk7CiAgICAgfQogICA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAko
cmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsMTAgQEAgdm9pZCBDU1NTZWxlY3Rvcjo6Y3JlYXRl
UmFyZURhdGEoKQogICAgIGlmIChtX2hhc1JhcmVEYXRhKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gTW92ZSB0aGUgdmFsdWUgdG8gdGhlIHJhcmUgZGF0YSBzdHVjdHVyZS4KLSAgICBtX2RhdGEu
bV9yYXJlRGF0YSA9ICZSYXJlRGF0YTo6Y3JlYXRlKGFkb3B0UmVmKG1fZGF0YS5tX3ZhbHVlKSku
bGVha1JlZigpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2RhdGEubV92YWx1ZSk7CisgICAg
aWYgKG1fZGF0YS5tX3ZhbHVlKQorICAgICAgICBtX2RhdGEubV92YWx1ZS0+ZGVyZWYoKTsKKyAg
ICBtX2RhdGEubV9yYXJlRGF0YSA9ICZSYXJlRGF0YTo6Y3JlYXRlKHZhbHVlKS5sZWFrUmVmKCk7
CiAgICAgbV9oYXNSYXJlRGF0YSA9IHRydWU7CiB9CiAKQEAgLTQwNiwxMCArNDA5LDEwIEBAIFN0
cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KGNvbnN0IFMKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBpZiAoY3MtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAg
ICAgICBzdHIuYXBwZW5kKCcjJyk7Ci0gICAgICAgICAgICBzZXJpYWxpemVJZGVudGlmaWVyKGNz
LT52YWx1ZSgpLCBzdHIpOworICAgICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+c2Vy
aWFsaXppbmdWYWx1ZSgpLCBzdHIpOwogICAgICAgICB9IGVsc2UgaWYgKGNzLT5tYXRjaCgpID09
IENTU1NlbGVjdG9yOjpDbGFzcykgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgnLicpOwotICAg
ICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+dmFsdWUoKSwgc3RyKTsKKyAgICAgICAg
ICAgIHNlcmlhbGl6ZUlkZW50aWZpZXIoY3MtPnNlcmlhbGl6aW5nVmFsdWUoKSwgc3RyKTsKICAg
ICAgICAgfSBlbHNlIGlmIChjcy0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
IHsKICAgICAgICAgICAgIHN3aXRjaCAoY3MtPnBzZXVkb0NsYXNzVHlwZSgpKSB7CiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNjU5LDcgKzY2Miw3IEBAIFN0cmluZyBDU1NTZWxlY3Rv
cjo6c2VsZWN0b3JUZXh0KGNvbnN0IFMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZExpdGVyYWwoIjo6Iik7Ci0g
ICAgICAgICAgICAgICAgc3RyLmFwcGVuZChjcy0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
c3RyLmFwcGVuZChjcy0+c2VyaWFsaXppbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChjcy0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAgICAgICAgICAgICBz
dHIuYXBwZW5kKCdbJyk7CkBAIC02OTYsNyArNjk5LDcgQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpz
ZWxlY3RvclRleHQoY29uc3QgUwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChjcy0+bWF0Y2goKSAhPSBDU1NTZWxlY3Rvcjo6U2V0KSB7
Ci0gICAgICAgICAgICAgICAgc2VyaWFsaXplU3RyaW5nKGNzLT52YWx1ZSgpLCBzdHIpOworICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZVN0cmluZyhjcy0+c2VyaWFsaXppbmdWYWx1ZSgpLCBzdHIp
OwogICAgICAgICAgICAgICAgIGlmIChjcy0+YXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUlu
c2Vuc2l0aXZlKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0ci5hcHBlbmRMaXRlcmFsKCIgaV0i
KTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC04MjAsOCArODIzLDkgQEAgaW50IENTU1NlbGVj
dG9yOjpudGhCKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhLm1fcmFyZURhdGEtPm1fYjsKIH0K
IAotQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmlu
Z0ltcGw+IHZhbHVlKQotICAgIDogbV92YWx1ZSh2YWx1ZS5sZWFrUmVmKCkpCitDU1NTZWxlY3Rv
cjo6UmFyZURhdGE6OlJhcmVEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgOiBt
X21hdGNoaW5nVmFsdWUodmFsdWUpCisgICAgLCBtX3NlcmlhbGl6aW5nVmFsdWUodmFsdWUpCiAg
ICAgLCBtX2EoMCkKICAgICAsIG1fYigwKQogICAgICwgbV9hdHRyaWJ1dGUoYW55UU5hbWUoKSkK
QEAgLTgzMSw4ICs4MzUsNiBAQCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OlJhcmVEYXRhKFBhc3NS
ZWZQCiAKIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6flJhcmVEYXRhKCkKIHsKLSAgICBpZiAobV92
YWx1ZSkKLSAgICAgICAgbV92YWx1ZS0+ZGVyZWYoKTsKIH0KIAogLy8gYSBoZWxwZXIgZnVuY3Rp
b24gZm9yIHBhcnNpbmcgbnRoLWFyZ3VtZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9y
LmgJKHJldmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CkBAIC0yMzMsNiArMjM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ0xvd2VyY2FzZUxvY2FsTmFtZSgpIGNvbnN0OwogCiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzZXJpYWxpemluZ1ZhbHVlKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0OwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSgpIGNvbnN0OwogICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGFyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5t
X3JhcmVEYXRhLT5tX2FyZ3VtZW50IDogbnVsbEF0b207IH0KQEAgLTI0MCw3ICsyNDIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+KiBs
YW5nQXJndW1lbnRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5t
X3JhcmVEYXRhLT5tX2xhbmdBcmd1bWVudExpc3QuZ2V0KCkgOiBudWxscHRyOyB9CiAgICAgICAg
IGNvbnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSA6IG51
bGxwdHI7IH0KIAotICAgICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
ICAgICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgbWF0Y2hMb3dl
ckNhc2UgPSBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRo
ZXNlIHR3byBtZXRob2RzIGNhbiBnbyBhd2F5IG9uY2UgdGhlIG9sZCBwYXJzZXIgaXMgZ29uZS4K
ICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wpOwpA
QCAtMzQ4LDEzICszNTAsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDU1NTZWxl
Y3RvciYgb3BlcmF0b3I9KGNvbnN0IENTU1NlbGVjdG9yJik7CiAKICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UmFyZURhdGE+IHsKLSAgICAgICAgICAgIHN0YXRp
YyBSZWY8UmFyZURhdGE+IGNyZWF0ZShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJhcmVEYXRhKHZhbHVlKSk7IH0KKyAgICAgICAgICAg
IHN0YXRpYyBSZWY8UmFyZURhdGE+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IFJhcmVEYXRhKHZhbHVlKSk7IH0KICAgICAgICAgICAgIH5S
YXJlRGF0YSgpOwogCiAgICAgICAgICAgICBib29sIHBhcnNlTnRoKCk7CiAgICAgICAgICAgICBi
b29sIG1hdGNoTnRoKGludCBjb3VudCk7CiAKLSAgICAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwq
IG1fdmFsdWU7IC8vIFBsYWluIHBvaW50ZXIgdG8ga2VlcCB0aGluZ3MgdW5pZm9ybSB3aXRoIHRo
ZSB1bmlvbi4KKyAgICAgICAgICAgIC8vIEZvciBxdWlya3MgbW9kZSwgY2xhc3MgYW5kIGlkIGFy
ZSBjYXNlLWluc2Vuc2l0aXZlLiBJbiB0aGUgY2FzZSB3aGVyZSB1cHBlcmNhc2UKKyAgICAgICAg
ICAgIC8vIGxldHRlcnMgYXJlIHVzZWQgaW4gcXVpcmtzIG1vZGUsIHxtX21hdGNoaW5nVmFsdWV8
IGhvbGRzIHRoZSBsb3dlcmNhc2UgY2xhc3MvaWQKKyAgICAgICAgICAgIC8vIGFuZCB8bV9zZXJp
YWxpemluZ1ZhbHVlfCBob2xkcyB0aGUgb3JpZ2luYWwgc3RyaW5nLgorICAgICAgICAgICAgQXRv
bWljU3RyaW5nIG1fbWF0Y2hpbmdWYWx1ZTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBtX3Nl
cmlhbGl6aW5nVmFsdWU7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBtX2E7IC8vIFVz
ZWQgZm9yIDpudGgtKgogICAgICAgICAgICAgaW50IG1fYjsgLy8gVXNlZCBmb3IgOm50aC0qCiAg
ICAgICAgICAgICBRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOyAvLyB1c2VkIGZvciBhdHRyaWJ1
dGUgc2VsZWN0b3IKQEAgLTM2NCw3ICszNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PiBtX3NlbGVjdG9yTGlzdDsg
Ly8gVXNlZCBmb3IgOm1hdGNoZXMoKSBhbmQgOm5vdCgpLgogICAgICAgICAKICAgICAgICAgcHJp
dmF0ZToKLSAgICAgICAgICAgIFJhcmVEYXRhKFBhc3NSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4g
dmFsdWUpOworICAgICAgICAgICAgUmFyZURhdGEoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7
CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgY3JlYXRlUmFyZURhdGEoKTsKIApAQCAtNDU4LDIy
ICs0NjUsMjQgQEAgaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6OmlzQXR0cmlidXRlU2VsZQogICAg
ICAgICB8fCBtYXRjaCgpID09IENTU1NlbGVjdG9yOjpCZWdpbgogICAgICAgICB8fCBtYXRjaCgp
ID09IENTU1NlbGVjdG9yOjpFbmQ7CiB9Ci0KLWlubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIAoraW5saW5lIHZvaWQgQ1NTU2Vs
ZWN0b3I6OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wgbWF0Y2hMb3dl
ckNhc2UpCiB7CiAgICAgQVNTRVJUKG1hdGNoKCkgIT0gVGFnKTsKKyAgICBpZiAobWF0Y2hMb3dl
ckNhc2UgJiYgIW1faGFzUmFyZURhdGEgJiYgIWlzQVNDSUlMb3dlckNTU0lkZW50aWZpZXIodmFs
dWUpKQorICAgICAgICBjcmVhdGVSYXJlRGF0YSgpOworICAgIAogICAgIC8vIE5lZWQgdG8gZG8g
cmVmIGNvdW50aW5nIG1hbnVhbGx5IGZvciB0aGUgdW5pb24uCi0gICAgaWYgKG1faGFzUmFyZURh
dGEpIHsKLSAgICAgICAgaWYgKG1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlKQotICAgICAgICAg
ICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUtPmRlcmVmKCk7Ci0gICAgICAgIG1fZGF0YS5t
X3JhcmVEYXRhLT5tX3ZhbHVlID0gdmFsdWUuaW1wbCgpOwotICAgICAgICBtX2RhdGEubV9yYXJl
RGF0YS0+bV92YWx1ZS0+cmVmKCk7CisgICAgaWYgKCFtX2hhc1JhcmVEYXRhKSB7CisgICAgICAg
IGlmIChtX2RhdGEubV92YWx1ZSkKKyAgICAgICAgICAgIG1fZGF0YS5tX3ZhbHVlLT5kZXJlZigp
OworICAgICAgICBtX2RhdGEubV92YWx1ZSA9IHZhbHVlLmltcGwoKTsKKyAgICAgICAgbV9kYXRh
Lm1fdmFsdWUtPnJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2RhdGEu
bV92YWx1ZSkKLSAgICAgICAgbV9kYXRhLm1fdmFsdWUtPmRlcmVmKCk7Ci0gICAgbV9kYXRhLm1f
dmFsdWUgPSB2YWx1ZS5pbXBsKCk7Ci0gICAgbV9kYXRhLm1fdmFsdWUtPnJlZigpOworCisgICAg
bV9kYXRhLm1fcmFyZURhdGEtPm1fbWF0Y2hpbmdWYWx1ZSA9IG1hdGNoTG93ZXJDYXNlID8gdmFs
dWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IHZhbHVlOworICAgIG1fZGF0YS5tX3JhcmVE
YXRhLT5tX3NlcmlhbGl6aW5nVmFsdWUgPSB2YWx1ZTsKIH0KIAogaW5saW5lIENTU1NlbGVjdG9y
OjpDU1NTZWxlY3RvcigpCkBAIC01NjcsOSArNTc2LDIxIEBAIGlubGluZSBjb25zdCBBdG9taWNT
dHJpbmcmIENTU1NlbGVjdG9yOjoKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIENTU1NlbGVj
dG9yOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1hdGNoKCkgIT0gVGFnKTsKKyAgICBp
ZiAobV9oYXNSYXJlRGF0YSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS5tX3JhcmVEYXRhLT5tX21h
dGNoaW5nVmFsdWU7CisKKyAgICAvLyBBdG9taWNTdHJpbmcgaXMgcmVhbGx5IGp1c3QgYW4gQXRv
bWljU3RyaW5nSW1wbCogc28gdGhlIGNhc3QgYmVsb3cgaXMgc2FmZS4KKyAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nKj4oJm1fZGF0YS5tX3ZhbHVlKTsKK30K
KworaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgQ1NTU2VsZWN0b3I6OnNlcmlhbGl6aW5nVmFs
dWUoKSBjb25zdAoreworICAgIEFTU0VSVChtYXRjaCgpICE9IFRhZyk7CisgICAgaWYgKG1faGFz
UmFyZURhdGEpCisgICAgICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZXJpYWxpemlu
Z1ZhbHVlOworICAgIAogICAgIC8vIEF0b21pY1N0cmluZyBpcyByZWFsbHkganVzdCBhbiBBdG9t
aWNTdHJpbmdJbXBsKiBzbyB0aGUgY2FzdCBiZWxvdyBpcyBzYWZlLgotICAgIC8vIEZJWE1FOiBQ
ZXJoYXBzIGNhbGwgc2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBhY2NlcHQgQXRvbWljU3RyaW5n
SW1wbD8KLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nKj4o
bV9oYXNSYXJlRGF0YSA/ICZtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSA6ICZtX2RhdGEubV92
YWx1ZSk7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+
KCZtX2RhdGEubV92YWx1ZSk7CiB9CiAKIGlubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRBdHRy
aWJ1dGVWYWx1ZU1hdGNoaW5nSXNDYXNlSW5zZW5zaXRpdmUoYm9vbCBpc0Nhc2VJbnNlbnNpdGl2
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAJKHJldmlzaW9uIDIwODk5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkyLDYgKzI5Miw5IEBAIE1lZGlhUXVlcnlFeHByZXNzaW9uOjpNZWRpYVF1ZXJ5RXhw
cmVzc2kKICAgICA6IG1fbWVkaWFGZWF0dXJlKGZlYXR1cmUpCiAgICAgLCBtX2lzVmFsaWQoZmFs
c2UpCiB7CisgICAgaWYgKCFpc0FTQ0lJTG93ZXJDU1NJZGVudGlmaWVyKG1fbWVkaWFGZWF0dXJl
KSkKKyAgICAgICAgbV9tZWRpYUZlYXR1cmUgPSBtX21lZGlhRmVhdHVyZS5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOworICAgIAogICAgIC8vIENyZWF0ZSB2YWx1ZSBmb3IgbWVkaWEgcXVlcnkg
ZXhwcmVzc2lvbiB0aGF0IG11c3QgaGF2ZSAxIG9yIG1vcmUgdmFsdWVzLgogICAgIGlmICghdG9r
ZW5MaXN0LnNpemUoKSAmJiBpc0ZlYXR1cmVWYWxpZFdpdGhvdXRWYWx1ZShtX21lZGlhRmVhdHVy
ZSkpIHsKICAgICAgICAgLy8gVmFsaWQsIGNyZWF0ZXMgYSBNZWRpYVF1ZXJ5RXhwIHdpdGggYW4g
J2ludmFsaWQnIE1lZGlhUXVlcnlFeHBWYWx1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXJJZGlvbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlcklkaW9tcy5oCShyZXZpc2lvbiAyMDg5OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlcklkaW9tcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw0
ICs2NCwxMyBAQCBib29sIGlzVmFsdWVBbGxvd2VkSW5Nb2RlKHVuc2lnbmVkIHNob3J0CiAKIFVS
TCBjb21wbGV0ZVVSTChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwp
OwogCitpbmxpbmUgYm9vbCBpc0FTQ0lJTG93ZXJDU1NJZGVudGlmaWVyKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIodmFsdWVbaV0pKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Cisg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlclRva2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlclRva2VuLmNwcAkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
NiwyMyArNDc2LDQgQEAgdm9pZCBDU1NQYXJzZXJUb2tlbjo6c2VyaWFsaXplKFN0cmluZ0J1aQog
ICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElO
RSBzdGF0aWMgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRvQVNDSUlMb3dl
cihjaGFyYWN0ZXJzW2ldKTsKLX0KLQotLy8gRklYTUUtTkVXUEFSU0VSOiBXb3VsZCBsaWtlIHRv
IGdldCByaWQgb2YgdGhpcyBvcGVyYXRpb24uIEJsaW5rIHVzZXMgSFRNTFBhcnNlciBzdGF0aWMg
bG93ZXJjYXNlCi0vLyBzdHJpbmcgaGFzaGluZywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCBjb2Rl
IGluIG91ciBIVE1MUGFyc2VyLgotdm9pZCBDU1NQYXJzZXJUb2tlbjo6Y29udmVydFRvQVNDSUlM
b3dlcmNhc2VJblBsYWNlKCkKLXsKLSAgICBpZiAoIWhhc1N0cmluZ0JhY2tpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdmFsdWVJczhCaXQpCi0gICAgICAgIFdlYkNvcmU6OmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZShzdGF0aWNfY2FzdDxMQ2hhcio+KG1fdmFsdWVE
YXRhQ2hhclJhdyksIG1fdmFsdWVMZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgV2ViQ29yZTo6
Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKHN0YXRpY19jYXN0PFVDaGFyKj4obV92YWx1
ZURhdGFDaGFyUmF3KSwgbV92YWx1ZUxlbmd0aCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmgJKHJl
dmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVG9r
ZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIFN0cmluZ1ZpZXcoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihtX3ZhbHVlRGF0YUNo
YXJSYXcpLCBtX3ZhbHVlTGVuZ3RoKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlSW5QbGFjZSgpOwotCiAgICAgVUNoYXIgZGVsaW1pdGVyKCkgY29uc3Q7CiAgICAg
TnVtZXJpY1NpZ24gbnVtZXJpY1NpZ24oKSBjb25zdDsKICAgICBOdW1lcmljVmFsdWVUeXBlIG51
bWVyaWNWYWx1ZVR5cGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQYXJzZXJWYWx1ZXMuaAkocmV2aXNpb24gMjA5MDg1KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIx
OCw3IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvcj4gcmVsZWFz
ZVNlbGVjdG9yKCkgeyByZXR1cm4gV1RGTW92ZShtX3NlbGVjdG9yKTsgfQogCi0gICAgdm9pZCBz
ZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVl
KHZhbHVlKTsgfQorICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBtYXRjaExvd2VyQ2FzZSA9IGZhbHNlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVl
LCBtYXRjaExvd2VyQ2FzZSk7IH0KICAgICAKICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoZXNl
IHR3byBtZXRob2RzIGNhbiBnbyBhd2F5IG9uY2Ugb2xkIHBhcnNlciBpcyBnb25lLgogICAgIHZv
aWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGlzQ2FzZUlu
c2Vuc2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZSh2YWx1ZSwgaXNDYXNlSW5zZW5z
aXRpdmUpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcAkocmV2aXNpb24gMjA5MzAyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMjIsMTAgKzIx
MjIsMTAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUF0dHIoQ1NTUAogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBDU1NQYXJzZXJUb2tlbiB0b2tlbiA9IGFyZ3Mu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICBpZiAoY29udGV4dC5pc0hUTUxEb2N1
bWVudCkKLSAgICAgICAgdG9rZW4uY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Cisg
ICAgYXV0byBhdHRyTmFtZSA9IHRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsKKyAgICBp
ZiAoY29udGV4dC5pc0hUTUxEb2N1bWVudCAmJiAhaXNBU0NJSUxvd2VyQ1NTSWRlbnRpZmllcihh
dHRyTmFtZSkpCisgICAgICAgIGF0dHJOYW1lID0gYXR0ck5hbWUuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKTsKIAotICAgIFN0cmluZyBhdHRyTmFtZSA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmco
KTsKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyMDkyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVj
dG9yUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDEwICszODksNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlCiAgICAgLy8gRklYTUUtTkVXUEFSU0VS
OiBBdm9pZCBoYXZpbmcgdG8gZG8gdGhpcywgYnV0IHRoZSBvbGQgcGFyc2VyIGRvZXMgYW5kIHdl
IG5lZWQKICAgICAvLyB0byBiZSBjb21wYXRpYmxlIGZvciBub3cuCiAgICAgQ1NTUGFyc2VyVG9r
ZW4gdG9rZW4gPSByYW5nZS5jb25zdW1lKCk7Ci0gICAgaWYgKG1fY29udGV4dC5tb2RlID09IEhU
TUxRdWlya3NNb2RlKQotICAgICAgICB0b2tlbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxh
Y2UoKTsKLSAgICBzZWxlY3Rvci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmlu
ZygpKTsKLQorICAgIHNlbGVjdG9yLT5zZXRWYWx1ZSh0b2tlbi52YWx1ZSgpLnRvQXRvbWljU3Ry
aW5nKCksIG1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKTsKICAgICByZXR1cm4gc2Vs
ZWN0b3I7CiB9CiAKQEAgLTQwOSw5ICs0MDYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+IENTU1NlCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBBdm9pZCBoYXZpbmcgdG8g
ZG8gdGhpcywgYnV0IHRoZSBvbGQgcGFyc2VyIGRvZXMgYW5kIHdlIG5lZWQKICAgICAvLyB0byBi
ZSBjb21wYXRpYmxlIGZvciBub3cuCiAgICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSByYW5nZS5j
b25zdW1lKCk7Ci0gICAgaWYgKG1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKQotICAg
ICAgICB0b2tlbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLSAgICBzZWxlY3Rv
ci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpKTsKKyAgICBzZWxlY3Rv
ci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpLCBtX2NvbnRleHQubW9k
ZSA9PSBIVE1MUXVpcmtzTW9kZSk7CiAKICAgICByZXR1cm4gc2VsZWN0b3I7CiB9CkBAIC01MTIs
MTcgKzUwNywxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlCiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yOwogICAgIAot
ICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogV291bGQgbGlrZSB0byBlbGltaW5hdGUgdGhpcy4KLSAg
ICBjb25zdF9jYXN0PENTU1BhcnNlclRva2VuJj4odG9rZW4pLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlSW5QbGFjZSgpOwotICAgIAotICAgIFN0cmluZ1ZpZXcgdmFsdWUgPSB0b2tlbi52YWx1ZSgp
OworICAgIGF1dG8gbG93ZXJWYWx1ZSA9IHRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsK
KyAgICBpZiAoIWlzQVNDSUlMb3dlckNTU0lkZW50aWZpZXIobG93ZXJWYWx1ZSkpCisgICAgICAg
IGxvd2VyVmFsdWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAgICBhdXRvIHZhbHVlID0g
U3RyaW5nVmlldyhsb3dlclZhbHVlKTsKICAgICAKICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFdl
IGNhbid0IGNoYW5nZSB0aGUgcHNldWRvY2xhc3MvZWxlbWVudCBtYXBzIHRoYXQgdGhlIG9sZCBw
YXJzZXIKICAgICAvLyB1c2VzIHdpdGhvdXQgYnJlYWtpbmcgaXQ7IHRoaXMgaGFjayBhbGxvd3Mg
ZnVuY3Rpb24gc2VsZWN0b3JzIHRvIHdvcmsuIFdoZW4gdGhlIG5ldwogICAgIC8vIHBhcnNlciB0
dXJucyBvbiwgd2UgY2FuIHBhdGNoIHRoZSBtYXAgYW5kIHJlbW92ZSB0aGlzIGNvZGUuCiAgICAg
U3RyaW5nIG5ld1ZhbHVlOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbiAm
JiBjb2xvbnMgPT0gMSkgewotICAgICAgICBTdHJpbmcgdG9rZW5TdHJpbmcgPSB2YWx1ZS50b1N0
cmluZygpOworICAgICAgICBhdXRvIHRva2VuU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKICAg
ICAgICAgaWYgKCF0b2tlblN0cmluZy5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoImhvc3Qi
KSkgewogICAgICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpICsgIigiOwogICAg
ICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvTWVkaWFRdWVyeVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9NZWRpYVF1ZXJ5UGFyc2VyLmNwcAkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9NZWRpYVF1ZXJ5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY2LDggKzE2Niw2IEBAIHZvaWQgTWVkaWFRdWVyeVBhcnNlcjo6cmVhZEZlYXR1cmVTdGFy
dCgKIHZvaWQgTWVkaWFRdWVyeVBhcnNlcjo6cmVhZEZlYXR1cmUoQ1NTUGFyc2VyVG9rZW5UeXBl
IHR5cGUsIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbikKIHsKICAgICBpZiAodHlwZSA9PSBJ
ZGVudFRva2VuKSB7Ci0gICAgICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogRmluZCBhIHdheSB0byBh
dm9pZCB0aGlzLgotICAgICAgICBjb25zdF9jYXN0PENTU1BhcnNlclRva2VuJj4odG9rZW4pLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwogICAgICAgICBtX21lZGlhUXVlcnlEYXRh
LnNldE1lZGlhRmVhdHVyZSh0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCkpOwogICAgICAgICBtX3N0
YXRlID0gUmVhZEZlYXR1cmVDb2xvbjsKICAgICB9IGVsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296092</attachid>
            <date>2016-12-04 11:42:23 -0800</date>
            <delta_ts>2016-12-04 12:26:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165368-20161204134148.patch</filename>
            <type>text/plain</type>
            <size>21166</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE2LTEyLTA0ICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgUGFyc2VyXSBFbGltaW5hdGUg
aW4tcGxhY2UgbG93ZXJjYXNpbmcgaW4gdGhlIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTM2OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdGhlIGluLXBsYWNlIGxvd2VyY2Fz
aW5nIHRoYXQgdGhlIHBhcnNlciBkb2VzIHdpdGggbmV3CisgICAgICAgIG1lY2hhbmlzbXMuIElu
LXBsYWNlIGxvd2VyY2FzaW5nIHJ1aW5zIHNlcmlhbGl6YXRpb24gYW5kIGRvZXNuJ3QKKyAgICAg
ICAgd29yayBvbiBDU1MgcGFyc2VkIGZyb20gc3RhdGljIHN0cmluZ3MuIEl0IGFsc28gaGFzIHRo
ZSBzaWRlIGVmZmVjdAorICAgICAgICBvZiBtdXRhdGluZyBzdHJpbmdzIHBhc3NlZCBpbiBmcm9t
IEphdmFTY3JpcHQgbGlrZSBmb3IgcXVlcnlTZWxlY3RvckFsbC4KKworICAgICAgICBGb3IgY2xh
c3MvaWQgc2VsZWN0b3JzLCB3ZSBub3cgY2hlY2sgaWYgdGhlIHN0cmluZyBpcyBsb3dlcmNhc2Ug
b3Igbm90LgorICAgICAgICBJZiBpdCBjb250YWlucyB1cHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVy
cywgdGhlbiB3ZSBhbGxvY2F0ZSB0aGUgUmFyZURhdGEKKyAgICAgICAgZm9yIHRoZSBzZWxlY3Rv
ci4gUmFyZURhdGEgbm93IGhhcyB0d28gZmllbGRzIGluc3RlYWQgb2Ygb25lIGZvciB0aGUgdmFs
dWUsCisgICAgICAgIGEgbWF0Y2hpbmcgdmFsdWUgKGFsbCBsb3dlcmNhc2UgaW4gcXVpcmtzIG1v
ZGUpLCBhbmQgYSBzZXJpYWxpemluZyB2YWx1ZSAodGhlCisgICAgICAgIG9yaWdpbmFsIHN0cmlu
ZykuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGF0IHRoZSBDU1NTZWxlY3RvciBsZXZlbCwgdGhlIG9s
ZAorICAgICAgICBwYXJzZXIgaGFzIGJlZW4gcGF0Y2hlZCBhcyB3ZWxsIGZvciB0aGVzZSBjYXNl
cy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgaW4tcGxhY2UgbG93ZXJjYXNpbmcgd2FzIGRvbmUg
Zm9yIHBzZXVkby1lbGVtZW50cywgZm9yCisgICAgICAgIG1lZGlhIHF1ZXJ5IGZlYXR1cmVzLCBh
bmQgZm9yIGF0dHIoKS4gSW4gYWxsIG9mIHRoZXNlIGNhc2VzIHdlIGRvCisgICAgICAgIGxvd2Vy
Y2FzZSBjb252ZXJ0aW5nIGJ5IGZpcnN0IGNoZWNraW5nIGlmIGl0J3MgbmVlZGVkLiBTZXJpYWxp
emF0aW9uIHdpbGwKKyAgICAgICAgbm90IHJldGFpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGluIHRo
ZXNlIGNhc2VzLCBzbyB3ZSBtYXkgd2FudCB0byByZXZpc2l0CisgICAgICAgIHRoZXNlIGNhc2Vz
IGluIHRoZSBmdXR1cmUgYW5kIGFwcGx5IGEgc29sdXRpb24gc2ltaWxhciB0byB3aGF0IHdlIGRp
ZCBmb3IKKyAgICAgICAgc2VsZWN0b3JzLgorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5p
bjoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpzZWxlY3RvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRh
OjpSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6On5S
YXJlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXJpYWxpemluZ1ZhbHVlKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeUV4cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUGFyc2VySWRpb21zLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FTQ0lJTG93ZXJDU1NJ
ZGVudGlmaWVyKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJUb2tlbjo6Y29udmVydFRvQVNDSUlMb3dlcmNh
c2VJblBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2Vu
Lmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQXR0cik6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8pOgorICAgICAgICAqIGNzcy9wYXJzZXIvTWVk
aWFRdWVyeVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5UGFyc2VyOjpy
ZWFkRmVhdHVyZSk6CisKIDIwMTYtMTItMDQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBhIGJ1aWxkIGJyZWFrIG9uIEVGTCBzaW5jZSByMjA5
MzAzLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMwLDcgKzM1MzAs
NyBAQAogCQk5NDZEMzczQzFENkNERkMwMDA3NzA4NEYgLyogQ1NTVG9rZW5pemVySW5wdXRTdHJl
YW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQz
NzM4MUQ2Q0RGOTgwMDc3MDg0RiAvKiBDU1NUb2tlbml6ZXJJbnB1dFN0cmVhbS5oICovOyB9Owog
CQk5NDZEMzczRjFENkNFM0MyMDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW4uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3M0UxRDZDRTMxQTAw
NzcwODRGIC8qIENTU1BhcnNlclRva2VuLmNwcCAqLzsgfTsKIAkJOTQ2RDM3NDAxRDZDRTNDMjAw
NzcwODRGIC8qIENTU1BhcnNlclRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzczRDFENkNFMzFBMDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9r
ZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5
NDZEMzc0NDFENkNGN0IyMDA3NzA4NEYgLyogQ1NTUGFyc2VySWRpb21zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0MzFENkNGNzg4MDA3NzA4
NEYgLyogQ1NTUGFyc2VySWRpb21zLmggKi87IH07CisJCTk0NkQzNzQ0MUQ2Q0Y3QjIwMDc3MDg0
RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk0NkQzNzQzMUQ2Q0Y3ODgwMDc3MDg0RiAvKiBDU1NQYXJzZXJJZGlvbXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NDZE
Mzc0NTFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3NDExRDZDRjYzMjAwNzcw
ODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmNwcCAqLzsgfTsKIAkJOTQ2RDM3NDYxRDZEMDFENDAw
NzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXIuaCAqLzsgfTsKIAkJOTQ2RDM3NDkxRDZEMDYyODAwNzcwODRGIC8qIENTU01hcmt1
cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZE
Mzc0NzFENkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmNwcCAqLzsgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueS5pbgkocmV2aXNpb24gMjA5MzA0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueS5pbgkod29ya2luZyBjb3B5KQpAQCAtMTIxNCw5ICsxMjE0LDcg
QEAgc3BlY2lmaWVyOgogICAgIElEU0VMIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2Vs
ZWN0b3I7CiAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6SWQpOwotICAgICAgICBp
ZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKLSAgICAgICAgICAg
ICQxLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotICAgICAgICAkJC0+c2V0VmFs
dWUoJDEpOworICAgICAgICAkJC0+c2V0VmFsdWUoJDEsIHBhcnNlci0+bV9jb250ZXh0Lm1vZGUg
PT0gSFRNTFF1aXJrc01vZGUpOwogICAgIH0KICAgfCBIRVggewogICAgICAgICBpZiAoJDFbMF0g
Pj0gJzAnICYmICQxWzBdIDw9ICc5JykKQEAgLTEyMjQsOSArMTIyMiw3IEBAIHNwZWNpZmllcjoK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsK
ICAgICAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6SWQpOwotICAgICAgICAgICAg
aWYgKHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpCi0gICAgICAgICAg
ICAgICAgJDEuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgICAgICAgICAk
JC0+c2V0VmFsdWUoJDEpOworICAgICAgICAgICAgJCQtPnNldFZhbHVlKCQxLCBwYXJzZXItPm1f
Y29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKTsKICAgICAgICAgfQogICAgIH0KICAgfCBj
bGFzcwpAQCAtMTIzOCw5ICsxMjM0LDcgQEAgY2xhc3M6CiAgICAgJy4nIElERU5UIHsKICAgICAg
ICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICQkLT5zZXRNYXRjaChDU1NT
ZWxlY3Rvcjo6Q2xhc3MpOwotICAgICAgICBpZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBI
VE1MUXVpcmtzTW9kZSkKLSAgICAgICAgICAgICQyLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5Q
bGFjZSgpOwotICAgICAgICAkJC0+c2V0VmFsdWUoJDIpOworICAgICAgICAkJC0+c2V0VmFsdWUo
JDIsIHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpOwogICAgIH0KICAg
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwODk5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDEwIEBAIHZvaWQgQ1NTU2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKCkKICAgICBp
ZiAobV9oYXNSYXJlRGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIE1vdmUgdGhlIHZhbHVl
IHRvIHRoZSByYXJlIGRhdGEgc3R1Y3R1cmUuCi0gICAgbV9kYXRhLm1fcmFyZURhdGEgPSAmUmFy
ZURhdGE6OmNyZWF0ZShhZG9wdFJlZihtX2RhdGEubV92YWx1ZSkpLmxlYWtSZWYoKTsKKyAgICBB
dG9taWNTdHJpbmcgdmFsdWUobV9kYXRhLm1fdmFsdWUpOworICAgIGlmIChtX2RhdGEubV92YWx1
ZSkKKyAgICAgICAgbV9kYXRhLm1fdmFsdWUtPmRlcmVmKCk7CisgICAgbV9kYXRhLm1fcmFyZURh
dGEgPSAmUmFyZURhdGE6OmNyZWF0ZSh2YWx1ZSkubGVha1JlZigpOwogICAgIG1faGFzUmFyZURh
dGEgPSB0cnVlOwogfQogCkBAIC00MDYsMTAgKzQwOSwxMCBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6
OnNlbGVjdG9yVGV4dChjb25zdCBTCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGNz
LT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpJZCkgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgn
IycpOwotICAgICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+dmFsdWUoKSwgc3RyKTsK
KyAgICAgICAgICAgIHNlcmlhbGl6ZUlkZW50aWZpZXIoY3MtPnNlcmlhbGl6aW5nVmFsdWUoKSwg
c3RyKTsKICAgICAgICAgfSBlbHNlIGlmIChjcy0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xh
c3MpIHsKICAgICAgICAgICAgIHN0ci5hcHBlbmQoJy4nKTsKLSAgICAgICAgICAgIHNlcmlhbGl6
ZUlkZW50aWZpZXIoY3MtPnZhbHVlKCksIHN0cik7CisgICAgICAgICAgICBzZXJpYWxpemVJZGVu
dGlmaWVyKGNzLT5zZXJpYWxpemluZ1ZhbHVlKCksIHN0cik7CiAgICAgICAgIH0gZWxzZSBpZiAo
Y3MtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKGNzLT5wc2V1ZG9DbGFzc1R5cGUoKSkgewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTY1OSw3ICs2NjIsNyBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dChj
b25zdCBTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIHN0ci5hcHBlbmRMaXRlcmFsKCI6OiIpOwotICAgICAgICAgICAgICAgIHN0
ci5hcHBlbmQoY3MtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQoY3MtPnNl
cmlhbGl6aW5nVmFsdWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Mt
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgnWycpOwpA
QCAtNjk2LDcgKzY5OSw3IEBAIFN0cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KGNvbnN0
IFMKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoY3MtPm1hdGNoKCkgIT0gQ1NTU2VsZWN0b3I6OlNldCkgewotICAgICAgICAgICAgICAg
IHNlcmlhbGl6ZVN0cmluZyhjcy0+dmFsdWUoKSwgc3RyKTsKKyAgICAgICAgICAgICAgICBzZXJp
YWxpemVTdHJpbmcoY3MtPnNlcmlhbGl6aW5nVmFsdWUoKSwgc3RyKTsKICAgICAgICAgICAgICAg
ICBpZiAoY3MtPmF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZSgpKQogICAg
ICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kTGl0ZXJhbCgiIGldIik7CiAgICAgICAgICAgICAg
ICAgZWxzZQpAQCAtODIwLDggKzgyMyw5IEBAIGludCBDU1NTZWxlY3Rvcjo6bnRoQigpIGNvbnN0
CiAgICAgcmV0dXJuIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2I7CiB9CiAKLUNTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6UmFyZURhdGEoUGFzc1JlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiB2YWx1ZSkKLSAg
ICA6IG1fdmFsdWUodmFsdWUubGVha1JlZigpKQorQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJl
RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIDogbV9tYXRjaGluZ1ZhbHVlKHZh
bHVlKQorICAgICwgbV9zZXJpYWxpemluZ1ZhbHVlKHZhbHVlKQogICAgICwgbV9hKDApCiAgICAg
LCBtX2IoMCkKICAgICAsIG1fYXR0cmlidXRlKGFueVFOYW1lKCkpCkBAIC04MzEsOCArODM1LDYg
QEAgQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJlRGF0YShQYXNzUmVmUAogCiBDU1NTZWxlY3Rv
cjo6UmFyZURhdGE6On5SYXJlRGF0YSgpCiB7Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIG1f
dmFsdWUtPmRlcmVmKCk7CiB9CiAKIC8vIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzaW5nIG50
aC1hcmd1bWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCShyZXZpc2lvbiAyMDg5
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNTU1BhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMjMzLDYgKzIz
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdMb3dlcmNhc2VMb2NhbE5hbWUoKSBjb25zdDsKIAogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VyaWFsaXpp
bmdWYWx1ZSgpIGNvbnN0OwogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUo
KSBjb25zdDsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVDYW5vbmljYWxM
b2NhbE5hbWUoKSBjb25zdDsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1
bWVudCA6IG51bGxBdG9tOyB9CkBAIC0yNDAsNyArMjQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiogbGFuZ0FyZ3VtZW50TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9sYW5n
QXJndW1lbnRMaXN0LmdldCgpIDogbnVsbHB0cjsgfQogICAgICAgICBjb25zdCBDU1NTZWxlY3Rv
ckxpc3QqIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2Rh
dGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QuZ2V0KCkgOiBudWxscHRyOyB9CiAKLSAgICAg
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBzZXRW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIG1hdGNoTG93ZXJDYXNlID0gZmFsc2UpOwog
ICAgICAgICAKICAgICAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBUaGVzZSB0d28gbWV0aG9kcyBj
YW4gZ28gYXdheSBvbmNlIHRoZSBvbGQgcGFyc2VyIGlzIGdvbmUuCiAgICAgICAgIHZvaWQgc2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBib29sKTsKQEAgLTM0OCwxMyArMzUwLDE4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NTU2VsZWN0b3ImIG9wZXJhdG9yPShj
b25zdCBDU1NTZWxlY3RvciYpOwogCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFJhcmVEYXRhPiB7Ci0gICAgICAgICAgICBzdGF0aWMgUmVmPFJhcmVEYXRhPiBj
cmVhdGUoUGFzc1JlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSYXJlRGF0YSh2YWx1ZSkpOyB9CisgICAgICAgICAgICBzdGF0aWMgUmVmPFJhcmVE
YXRhPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSYXJlRGF0YSh2YWx1ZSkpOyB9CiAgICAgICAgICAgICB+UmFyZURhdGEoKTsKIAogICAg
ICAgICAgICAgYm9vbCBwYXJzZU50aCgpOwogICAgICAgICAgICAgYm9vbCBtYXRjaE50aChpbnQg
Y291bnQpOwogCi0gICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOyAvLyBQbGFp
biBwb2ludGVyIHRvIGtlZXAgdGhpbmdzIHVuaWZvcm0gd2l0aCB0aGUgdW5pb24uCisgICAgICAg
ICAgICAvLyBGb3IgcXVpcmtzIG1vZGUsIGNsYXNzIGFuZCBpZCBhcmUgY2FzZS1pbnNlbnNpdGl2
ZS4gSW4gdGhlIGNhc2Ugd2hlcmUgdXBwZXJjYXNlCisgICAgICAgICAgICAvLyBsZXR0ZXJzIGFy
ZSB1c2VkIGluIHF1aXJrcyBtb2RlLCB8bV9tYXRjaGluZ1ZhbHVlfCBob2xkcyB0aGUgbG93ZXJj
YXNlIGNsYXNzL2lkCisgICAgICAgICAgICAvLyBhbmQgfG1fc2VyaWFsaXppbmdWYWx1ZXwgaG9s
ZHMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBtX21hdGNo
aW5nVmFsdWU7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbV9zZXJpYWxpemluZ1ZhbHVlOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnQgbV9hOyAvLyBVc2VkIGZvciA6bnRoLSoKICAg
ICAgICAgICAgIGludCBtX2I7IC8vIFVzZWQgZm9yIDpudGgtKgogICAgICAgICAgICAgUXVhbGlm
aWVkTmFtZSBtX2F0dHJpYnV0ZTsgLy8gdXNlZCBmb3IgYXR0cmlidXRlIHNlbGVjdG9yCkBAIC0z
NjQsNyArMzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENTU1NlbGVjdG9yTGlzdD4gbV9zZWxlY3Rvckxpc3Q7IC8vIFVzZWQgZm9yIDptYXRj
aGVzKCkgYW5kIDpub3QoKS4KICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAg
ICBSYXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVlKTsKKyAgICAgICAg
ICAgIFJhcmVEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgICAgICB9OwogICAg
ICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhKCk7CiAKQEAgLTQ1OCwyMiArNDY1LDI0IEBAIGlubGlu
ZSBib29sIENTU1NlbGVjdG9yOjppc0F0dHJpYnV0ZVNlbGUKICAgICAgICAgfHwgbWF0Y2goKSA9
PSBDU1NTZWxlY3Rvcjo6QmVnaW4KICAgICAgICAgfHwgbWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
RW5kOwogfQotCi1pbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0VmFsdWUoY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKKyAgICAKK2lubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sIG1hdGNoTG93ZXJDYXNlKQogewogICAgIEFT
U0VSVChtYXRjaCgpICE9IFRhZyk7CisgICAgaWYgKG1hdGNoTG93ZXJDYXNlICYmICFtX2hhc1Jh
cmVEYXRhICYmICFpc0FTQ0lJTG93ZXJDU1NJZGVudGlmaWVyKHZhbHVlKSkKKyAgICAgICAgY3Jl
YXRlUmFyZURhdGEoKTsKKyAgICAKICAgICAvLyBOZWVkIHRvIGRvIHJlZiBjb3VudGluZyBtYW51
YWxseSBmb3IgdGhlIHVuaW9uLgotICAgIGlmIChtX2hhc1JhcmVEYXRhKSB7Ci0gICAgICAgIGlm
IChtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSkKLSAgICAgICAgICAgIG1fZGF0YS5tX3JhcmVE
YXRhLT5tX3ZhbHVlLT5kZXJlZigpOwotICAgICAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1
ZSA9IHZhbHVlLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUtPnJl
ZigpOworICAgIGlmICghbV9oYXNSYXJlRGF0YSkgeworICAgICAgICBpZiAobV9kYXRhLm1fdmFs
dWUpCisgICAgICAgICAgICBtX2RhdGEubV92YWx1ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9kYXRh
Lm1fdmFsdWUgPSB2YWx1ZS5pbXBsKCk7CisgICAgICAgIG1fZGF0YS5tX3ZhbHVlLT5yZWYoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9kYXRhLm1fdmFsdWUpCi0gICAgICAg
IG1fZGF0YS5tX3ZhbHVlLT5kZXJlZigpOwotICAgIG1fZGF0YS5tX3ZhbHVlID0gdmFsdWUuaW1w
bCgpOwotICAgIG1fZGF0YS5tX3ZhbHVlLT5yZWYoKTsKKworICAgIG1fZGF0YS5tX3JhcmVEYXRh
LT5tX21hdGNoaW5nVmFsdWUgPSBtYXRjaExvd2VyQ2FzZSA/IHZhbHVlLmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkgOiB2YWx1ZTsKKyAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZXJpYWxpemlu
Z1ZhbHVlID0gdmFsdWU7CiB9CiAKIGlubGluZSBDU1NTZWxlY3Rvcjo6Q1NTU2VsZWN0b3IoKQpA
QCAtNTY3LDkgKzU3NiwyMSBAQCBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3Rv
cjo6CiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3Rvcjo6dmFsdWUoKSBjb25z
dAogewogICAgIEFTU0VSVChtYXRjaCgpICE9IFRhZyk7CisgICAgaWYgKG1faGFzUmFyZURhdGEp
CisgICAgICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bV9tYXRjaGluZ1ZhbHVlOworCisg
ICAgLy8gQXRvbWljU3RyaW5nIGlzIHJlYWxseSBqdXN0IGFuIEF0b21pY1N0cmluZ0ltcGwqIHNv
IHRoZSBjYXN0IGJlbG93IGlzIHNhZmUuCisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNv
bnN0IEF0b21pY1N0cmluZyo+KCZtX2RhdGEubV92YWx1ZSk7Cit9CisKK2lubGluZSBjb25zdCBB
dG9taWNTdHJpbmcmIENTU1NlbGVjdG9yOjpzZXJpYWxpemluZ1ZhbHVlKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobWF0Y2goKSAhPSBUYWcpOworICAgIGlmIChtX2hhc1JhcmVEYXRhKQorICAgICAg
ICByZXR1cm4gbV9kYXRhLm1fcmFyZURhdGEtPm1fc2VyaWFsaXppbmdWYWx1ZTsKKyAgICAKICAg
ICAvLyBBdG9taWNTdHJpbmcgaXMgcmVhbGx5IGp1c3QgYW4gQXRvbWljU3RyaW5nSW1wbCogc28g
dGhlIGNhc3QgYmVsb3cgaXMgc2FmZS4KLSAgICAvLyBGSVhNRTogUGVyaGFwcyBjYWxsIHNpdGVz
IGNvdWxkIGJlIGNoYW5nZWQgdG8gYWNjZXB0IEF0b21pY1N0cmluZ0ltcGw/Ci0gICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+KG1faGFzUmFyZURhdGEgPyAm
bV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgOiAmbV9kYXRhLm1fdmFsdWUpOworICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdG9taWNTdHJpbmcqPigmbV9kYXRhLm1fdmFsdWUp
OwogfQogCiBpbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlVmFsdWVNYXRjaGlu
Z0lzQ2FzZUluc2Vuc2l0aXZlKGJvb2wgaXNDYXNlSW5zZW5zaXRpdmUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCShyZXZpc2lvbiAyMDg5OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw2ICsyOTIs
OSBAQCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3NpCiAgICAgOiBtX21l
ZGlhRmVhdHVyZShmZWF0dXJlKQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogeworICAgIGlmICgh
aXNBU0NJSUxvd2VyQ1NTSWRlbnRpZmllcihtX21lZGlhRmVhdHVyZSkpCisgICAgICAgIG1fbWVk
aWFGZWF0dXJlID0gbV9tZWRpYUZlYXR1cmUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAg
ICAKICAgICAvLyBDcmVhdGUgdmFsdWUgZm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb24gdGhhdCBt
dXN0IGhhdmUgMSBvciBtb3JlIHZhbHVlcy4KICAgICBpZiAoIXRva2VuTGlzdC5zaXplKCkgJiYg
aXNGZWF0dXJlVmFsaWRXaXRob3V0VmFsdWUobV9tZWRpYUZlYXR1cmUpKSB7CiAgICAgICAgIC8v
IFZhbGlkLCBjcmVhdGVzIGEgTWVkaWFRdWVyeUV4cCB3aXRoIGFuICdpbnZhbGlkJyBNZWRpYVF1
ZXJ5RXhwVmFsdWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySWRp
b21zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJ
ZGlvbXMuaAkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXJJZGlvbXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNCArNjQsMTMgQEAgYm9vbCBp
c1ZhbHVlQWxsb3dlZEluTW9kZSh1bnNpZ25lZCBzaG9ydAogCiBVUkwgY29tcGxldGVVUkwoY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJsKTsKIAoraW5saW5lIGJvb2wg
aXNBU0NJSUxvd2VyQ1NTSWRlbnRpZmllcihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKHZhbHVlW2ldKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tl
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJU
b2tlbi5jcHAJKHJldmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyVG9rZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsMjMgKzQ3Niw0IEBAIHZv
aWQgQ1NTUGFyc2VyVG9rZW46OnNlcmlhbGl6ZShTdHJpbmdCdWkKICAgICB9CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgY29u
dmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyc1tpXSk7
Ci19Ci0KLS8vIEZJWE1FLU5FV1BBUlNFUjogV291bGQgbGlrZSB0byBnZXQgcmlkIG9mIHRoaXMg
b3BlcmF0aW9uLiBCbGluayB1c2VzIEhUTUxQYXJzZXIgc3RhdGljIGxvd2VyY2FzZQotLy8gc3Ry
aW5nIGhhc2hpbmcsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQgY29kZSBpbiBvdXIgSFRNTFBhcnNl
ci4KLXZvaWQgQ1NTUGFyc2VyVG9rZW46OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgp
Ci17Ci0gICAgaWYgKCFoYXNTdHJpbmdCYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3ZhbHVlSXM4Qml0KQotICAgICAgICBXZWJDb3JlOjpjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2Uoc3RhdGljX2Nhc3Q8TENoYXIqPihtX3ZhbHVlRGF0YUNoYXJSYXcpLCBtX3Zh
bHVlTGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlSW5QbGFjZShzdGF0aWNfY2FzdDxVQ2hhcio+KG1fdmFsdWVEYXRhQ2hhclJhdyksIG1f
dmFsdWVMZW5ndGgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlbi5oCShyZXZpc2lvbiAyMDg5OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMSw4ICsxMjEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJpbmdWaWV3
KHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4obV92YWx1ZURhdGFDaGFyUmF3KSwgbV92YWx1ZUxl
bmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2Uo
KTsKLQogICAgIFVDaGFyIGRlbGltaXRlcigpIGNvbnN0OwogICAgIE51bWVyaWNTaWduIG51bWVy
aWNTaWduKCkgY29uc3Q7CiAgICAgTnVtZXJpY1ZhbHVlVHlwZSBudW1lcmljVmFsdWVUeXBlKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVz
LmgJKHJldmlzaW9uIDIwOTA4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IHJlbGVhc2VTZWxlY3RvcigpIHsgcmV0
dXJuIFdURk1vdmUobV9zZWxlY3Rvcik7IH0KIAotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICB2
b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wgbWF0Y2hMb3dlckNh
c2UgPSBmYWxzZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSwgbWF0Y2hMb3dlckNhc2Up
OyB9CiAgICAgCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBUaGVzZSB0d28gbWV0aG9kcyBjYW4g
Z28gYXdheSBvbmNlIG9sZCBwYXJzZXIgaXMgZ29uZS4KICAgICB2b2lkIHNldEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSwgYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSkgeyBtX3Nl
bGVjdG9yLT5zZXRBdHRyaWJ1dGUodmFsdWUsIGlzQ2FzZUluc2Vuc2l0aXZlKTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHJl
dmlzaW9uIDIwOTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIyLDEwICsyMTIyLDEwIEBAIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVBdHRyKENTU1AKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIHRv
a2VuLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOworICAgIGF1dG8gYXR0ck5hbWUg
PSB0b2tlbi52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCk7CisgICAgaWYgKGNvbnRleHQuaXNIVE1M
RG9jdW1lbnQgJiYgIWlzQVNDSUlMb3dlckNTU0lkZW50aWZpZXIoYXR0ck5hbWUpKQorICAgICAg
ICBhdHRyTmFtZSA9IGF0dHJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAKLSAgICBT
dHJpbmcgYXR0ck5hbWUgPSB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCk7CiAgICAgaWYgKCFhcmdz
LmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5MjU1
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4OSwxMCArMzg5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPiBDU1NTZQogICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogQXZvaWQgaGF2aW5nIHRv
IGRvIHRoaXMsIGJ1dCB0aGUgb2xkIHBhcnNlciBkb2VzIGFuZCB3ZSBuZWVkCiAgICAgLy8gdG8g
YmUgY29tcGF0aWJsZSBmb3Igbm93LgogICAgIENTU1BhcnNlclRva2VuIHRva2VuID0gcmFuZ2Uu
Y29uc3VtZSgpOwotICAgIGlmIChtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKLSAg
ICAgICAgdG9rZW4uY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgc2VsZWN0
b3ItPnNldFZhbHVlKHRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSk7Ci0KKyAgICBzZWxl
Y3Rvci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpLCBtX2NvbnRleHQu
bW9kZSA9PSBIVE1MUXVpcmtzTW9kZSk7CiAgICAgcmV0dXJuIHNlbGVjdG9yOwogfQogCkBAIC00
MDksOSArNDA2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQog
ICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogQXZvaWQgaGF2aW5nIHRvIGRvIHRoaXMsIGJ1dCB0aGUg
b2xkIHBhcnNlciBkb2VzIGFuZCB3ZSBuZWVkCiAgICAgLy8gdG8gYmUgY29tcGF0aWJsZSBmb3Ig
bm93LgogICAgIENTU1BhcnNlclRva2VuIHRva2VuID0gcmFuZ2UuY29uc3VtZSgpOwotICAgIGlm
IChtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKLSAgICAgICAgdG9rZW4uY29udmVy
dFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgc2VsZWN0b3ItPnNldFZhbHVlKHRva2Vu
LnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSk7CisgICAgc2VsZWN0b3ItPnNldFZhbHVlKHRva2Vu
LnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSwgbV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01v
ZGUpOwogCiAgICAgcmV0dXJuIHNlbGVjdG9yOwogfQpAQCAtNTEyLDE3ICs1MDcsMTcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvcjsKICAgICAKLSAgICAvLyBGSVhNRS1ORVdQ
QVJTRVI6IFdvdWxkIGxpa2UgdG8gZWxpbWluYXRlIHRoaXMuCi0gICAgY29uc3RfY2FzdDxDU1NQ
YXJzZXJUb2tlbiY+KHRva2VuKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLSAg
ICAKLSAgICBTdHJpbmdWaWV3IHZhbHVlID0gdG9rZW4udmFsdWUoKTsKKyAgICBhdXRvIGxvd2Vy
VmFsdWUgPSB0b2tlbi52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCk7CisgICAgaWYgKCFpc0FTQ0lJ
TG93ZXJDU1NJZGVudGlmaWVyKGxvd2VyVmFsdWUpKQorICAgICAgICBsb3dlclZhbHVlLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgYXV0byB2YWx1ZSA9IFN0cmluZ1ZpZXcobG93ZXJW
YWx1ZSk7CiAgICAgCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBXZSBjYW4ndCBjaGFuZ2UgdGhl
IHBzZXVkb2NsYXNzL2VsZW1lbnQgbWFwcyB0aGF0IHRoZSBvbGQgcGFyc2VyCiAgICAgLy8gdXNl
cyB3aXRob3V0IGJyZWFraW5nIGl0OyB0aGlzIGhhY2sgYWxsb3dzIGZ1bmN0aW9uIHNlbGVjdG9y
cyB0byB3b3JrLiBXaGVuIHRoZSBuZXcKICAgICAvLyBwYXJzZXIgdHVybnMgb24sIHdlIGNhbiBw
YXRjaCB0aGUgbWFwIGFuZCByZW1vdmUgdGhpcyBjb2RlLgogICAgIFN0cmluZyBuZXdWYWx1ZTsK
ICAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4gJiYgY29sb25zID09IDEpIHsK
LSAgICAgICAgU3RyaW5nIHRva2VuU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICAgICAg
YXV0byB0b2tlblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgICAgICAgIGlmICghdG9rZW5T
dHJpbmcuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJob3N0IikpIHsKICAgICAgICAgICAg
IG5ld1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSArICIoIjsKICAgICAgICAgICAgIHZhbHVlID0g
bmV3VmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL01lZGlhUXVlcnlQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvTWVkaWFRdWVy
eVBhcnNlci5jcHAJKHJldmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvTWVkaWFRdWVyeVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw4ICsxNjYsNiBA
QCB2b2lkIE1lZGlhUXVlcnlQYXJzZXI6OnJlYWRGZWF0dXJlU3RhcnQoCiB2b2lkIE1lZGlhUXVl
cnlQYXJzZXI6OnJlYWRGZWF0dXJlKENTU1BhcnNlclRva2VuVHlwZSB0eXBlLCBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4pCiB7CiAgICAgaWYgKHR5cGUgPT0gSWRlbnRUb2tlbikgewotICAg
ICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IEZpbmQgYSB3YXkgdG8gYXZvaWQgdGhpcy4KLSAgICAg
ICAgY29uc3RfY2FzdDxDU1NQYXJzZXJUb2tlbiY+KHRva2VuKS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2UoKTsKICAgICAgICAgbV9tZWRpYVF1ZXJ5RGF0YS5zZXRNZWRpYUZlYXR1cmUo
dG9rZW4udmFsdWUoKS50b1N0cmluZygpKTsKICAgICAgICAgbV9zdGF0ZSA9IFJlYWRGZWF0dXJl
Q29sb247CiAgICAgfSBlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296097</attachid>
            <date>2016-12-04 12:26:21 -0800</date>
            <delta_ts>2016-12-04 14:18:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165368-20161204142545.patch</filename>
            <type>text/plain</type>
            <size>22299</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE2LTEyLTA0ICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgUGFyc2VyXSBFbGltaW5hdGUg
aW4tcGxhY2UgbG93ZXJjYXNpbmcgaW4gdGhlIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTM2OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdGhlIGluLXBsYWNlIGxvd2VyY2Fz
aW5nIHRoYXQgdGhlIHBhcnNlciBkb2VzIHdpdGggbmV3CisgICAgICAgIG1lY2hhbmlzbXMuIElu
LXBsYWNlIGxvd2VyY2FzaW5nIHJ1aW5zIHNlcmlhbGl6YXRpb24gYW5kIGRvZXNuJ3QKKyAgICAg
ICAgd29yayBvbiBDU1MgcGFyc2VkIGZyb20gc3RhdGljIHN0cmluZ3MuIEl0IGFsc28gaGFzIHRo
ZSBzaWRlIGVmZmVjdAorICAgICAgICBvZiBtdXRhdGluZyBzdHJpbmdzIHBhc3NlZCBpbiBmcm9t
IEphdmFTY3JpcHQgbGlrZSBmb3IgcXVlcnlTZWxlY3RvckFsbC4KKworICAgICAgICBGb3IgY2xh
c3MvaWQgc2VsZWN0b3JzLCB3ZSBub3cgY2hlY2sgaWYgdGhlIHN0cmluZyBpcyBsb3dlcmNhc2Ug
b3Igbm90LgorICAgICAgICBJZiBpdCBjb250YWlucyB1cHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVy
cywgdGhlbiB3ZSBhbGxvY2F0ZSB0aGUgUmFyZURhdGEKKyAgICAgICAgZm9yIHRoZSBzZWxlY3Rv
ci4gUmFyZURhdGEgbm93IGhhcyB0d28gZmllbGRzIGluc3RlYWQgb2Ygb25lIGZvciB0aGUgdmFs
dWUsCisgICAgICAgIGEgbWF0Y2hpbmcgdmFsdWUgKGFsbCBsb3dlcmNhc2UgaW4gcXVpcmtzIG1v
ZGUpLCBhbmQgYSBzZXJpYWxpemluZyB2YWx1ZSAodGhlCisgICAgICAgIG9yaWdpbmFsIHN0cmlu
ZykuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGF0IHRoZSBDU1NTZWxlY3RvciBsZXZlbCwgdGhlIG9s
ZAorICAgICAgICBwYXJzZXIgaGFzIGJlZW4gcGF0Y2hlZCBhcyB3ZWxsIGZvciB0aGVzZSBjYXNl
cy4KKworICAgICAgICBJbiBhZGRpdGlvbiwgaW4tcGxhY2UgbG93ZXJjYXNpbmcgd2FzIGRvbmUg
Zm9yIHBzZXVkby1lbGVtZW50cywgZm9yCisgICAgICAgIG1lZGlhIHF1ZXJ5IGZlYXR1cmVzLCBh
bmQgZm9yIGF0dHIoKS4gSW4gYWxsIG9mIHRoZXNlIGNhc2VzIHdlIGRvCisgICAgICAgIGxvd2Vy
Y2FzZSBjb252ZXJ0aW5nIGJ5IGZpcnN0IGNoZWNraW5nIGlmIGl0J3MgbmVlZGVkLiBTZXJpYWxp
emF0aW9uIHdpbGwKKyAgICAgICAgbm90IHJldGFpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGluIHRo
ZXNlIGNhc2VzLCBzbyB3ZSBtYXkgd2FudCB0byByZXZpc2l0CisgICAgICAgIHRoZXNlIGNhc2Vz
IGluIHRoZSBmdXR1cmUgYW5kIGFwcGx5IGEgc29sdXRpb24gc2ltaWxhciB0byB3aGF0IHdlIGRp
ZCBmb3IKKyAgICAgICAgc2VsZWN0b3JzLgorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5p
bjoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpzZWxlY3RvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRh
OjpSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6On5S
YXJlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXJpYWxpemluZ1ZhbHVlKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeUV4cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9wYXJz
ZXIvQ1NTUGFyc2VySWRpb21zLmg6CisgICAgICAgIChXZWJDb3JlOjppc0FTQ0lJTG93ZXJDU1NJ
ZGVudGlmaWVyKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJUb2tlbjo6Y29udmVydFRvQVNDSUlMb3dlcmNh
c2VJblBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlclRva2Vu
Lmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQXR0cik6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8pOgorICAgICAgICAqIGNzcy9wYXJzZXIvTWVk
aWFRdWVyeVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5UGFyc2VyOjpy
ZWFkRmVhdHVyZSk6CisKIDIwMTYtMTItMDQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBhIGJ1aWxkIGJyZWFrIG9uIEVGTCBzaW5jZSByMjA5
MzAzLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMwLDcgKzM1MzAs
NyBAQAogCQk5NDZEMzczQzFENkNERkMwMDA3NzA4NEYgLyogQ1NTVG9rZW5pemVySW5wdXRTdHJl
YW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQz
NzM4MUQ2Q0RGOTgwMDc3MDg0RiAvKiBDU1NUb2tlbml6ZXJJbnB1dFN0cmVhbS5oICovOyB9Owog
CQk5NDZEMzczRjFENkNFM0MyMDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW4uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3M0UxRDZDRTMxQTAw
NzcwODRGIC8qIENTU1BhcnNlclRva2VuLmNwcCAqLzsgfTsKIAkJOTQ2RDM3NDAxRDZDRTNDMjAw
NzcwODRGIC8qIENTU1BhcnNlclRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzczRDFENkNFMzFBMDA3NzA4NEYgLyogQ1NTUGFyc2VyVG9r
ZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5
NDZEMzc0NDFENkNGN0IyMDA3NzA4NEYgLyogQ1NTUGFyc2VySWRpb21zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0MzFENkNGNzg4MDA3NzA4
NEYgLyogQ1NTUGFyc2VySWRpb21zLmggKi87IH07CisJCTk0NkQzNzQ0MUQ2Q0Y3QjIwMDc3MDg0
RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk0NkQzNzQzMUQ2Q0Y3ODgwMDc3MDg0RiAvKiBDU1NQYXJzZXJJZGlvbXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NDZE
Mzc0NTFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3NDExRDZDRjYzMjAwNzcw
ODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmNwcCAqLzsgfTsKIAkJOTQ2RDM3NDYxRDZEMDFENDAw
NzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXIuaCAqLzsgfTsKIAkJOTQ2RDM3NDkxRDZEMDYyODAwNzcwODRGIC8qIENTU01hcmt1
cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZE
Mzc0NzFENkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmNwcCAqLzsgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueS5pbgkocmV2aXNpb24gMjA5MzA0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueS5pbgkod29ya2luZyBjb3B5KQpAQCAtMTIxNCw5ICsxMjE0LDcg
QEAgc3BlY2lmaWVyOgogICAgIElEU0VMIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2Vs
ZWN0b3I7CiAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6SWQpOwotICAgICAgICBp
ZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKLSAgICAgICAgICAg
ICQxLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotICAgICAgICAkJC0+c2V0VmFs
dWUoJDEpOworICAgICAgICAkJC0+c2V0VmFsdWUoJDEsIHBhcnNlci0+bV9jb250ZXh0Lm1vZGUg
PT0gSFRNTFF1aXJrc01vZGUpOwogICAgIH0KICAgfCBIRVggewogICAgICAgICBpZiAoJDFbMF0g
Pj0gJzAnICYmICQxWzBdIDw9ICc5JykKQEAgLTEyMjQsOSArMTIyMiw3IEBAIHNwZWNpZmllcjoK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsK
ICAgICAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6SWQpOwotICAgICAgICAgICAg
aWYgKHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpCi0gICAgICAgICAg
ICAgICAgJDEuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgICAgICAgICAk
JC0+c2V0VmFsdWUoJDEpOworICAgICAgICAgICAgJCQtPnNldFZhbHVlKCQxLCBwYXJzZXItPm1f
Y29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKTsKICAgICAgICAgfQogICAgIH0KICAgfCBj
bGFzcwpAQCAtMTIzOCw5ICsxMjM0LDcgQEAgY2xhc3M6CiAgICAgJy4nIElERU5UIHsKICAgICAg
ICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICQkLT5zZXRNYXRjaChDU1NT
ZWxlY3Rvcjo6Q2xhc3MpOwotICAgICAgICBpZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBI
VE1MUXVpcmtzTW9kZSkKLSAgICAgICAgICAgICQyLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5Q
bGFjZSgpOwotICAgICAgICAkJC0+c2V0VmFsdWUoJDIpOworICAgICAgICAkJC0+c2V0VmFsdWUo
JDIsIHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpOwogICAgIH0KICAg
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwODk5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDEwIEBAIHZvaWQgQ1NTU2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKCkKICAgICBp
ZiAobV9oYXNSYXJlRGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIE1vdmUgdGhlIHZhbHVl
IHRvIHRoZSByYXJlIGRhdGEgc3R1Y3R1cmUuCi0gICAgbV9kYXRhLm1fcmFyZURhdGEgPSAmUmFy
ZURhdGE6OmNyZWF0ZShhZG9wdFJlZihtX2RhdGEubV92YWx1ZSkpLmxlYWtSZWYoKTsKKyAgICBB
dG9taWNTdHJpbmcgdmFsdWUobV9kYXRhLm1fdmFsdWUpOworICAgIGlmIChtX2RhdGEubV92YWx1
ZSkKKyAgICAgICAgbV9kYXRhLm1fdmFsdWUtPmRlcmVmKCk7CisgICAgbV9kYXRhLm1fcmFyZURh
dGEgPSAmUmFyZURhdGE6OmNyZWF0ZSh2YWx1ZSkubGVha1JlZigpOwogICAgIG1faGFzUmFyZURh
dGEgPSB0cnVlOwogfQogCkBAIC00MDYsMTAgKzQwOSwxMCBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6
OnNlbGVjdG9yVGV4dChjb25zdCBTCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGNz
LT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpJZCkgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgn
IycpOwotICAgICAgICAgICAgc2VyaWFsaXplSWRlbnRpZmllcihjcy0+dmFsdWUoKSwgc3RyKTsK
KyAgICAgICAgICAgIHNlcmlhbGl6ZUlkZW50aWZpZXIoY3MtPnNlcmlhbGl6aW5nVmFsdWUoKSwg
c3RyKTsKICAgICAgICAgfSBlbHNlIGlmIChjcy0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6Q2xh
c3MpIHsKICAgICAgICAgICAgIHN0ci5hcHBlbmQoJy4nKTsKLSAgICAgICAgICAgIHNlcmlhbGl6
ZUlkZW50aWZpZXIoY3MtPnZhbHVlKCksIHN0cik7CisgICAgICAgICAgICBzZXJpYWxpemVJZGVu
dGlmaWVyKGNzLT5zZXJpYWxpemluZ1ZhbHVlKCksIHN0cik7CiAgICAgICAgIH0gZWxzZSBpZiAo
Y3MtPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKGNzLT5wc2V1ZG9DbGFzc1R5cGUoKSkgewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTY1OSw3ICs2NjIsNyBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dChj
b25zdCBTCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIHN0ci5hcHBlbmRMaXRlcmFsKCI6OiIpOwotICAgICAgICAgICAgICAgIHN0
ci5hcHBlbmQoY3MtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIHN0ci5hcHBlbmQoY3MtPnNl
cmlhbGl6aW5nVmFsdWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Mt
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgewogICAgICAgICAgICAgc3RyLmFwcGVuZCgnWycpOwpA
QCAtNjk2LDcgKzY5OSw3IEBAIFN0cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KGNvbnN0
IFMKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoY3MtPm1hdGNoKCkgIT0gQ1NTU2VsZWN0b3I6OlNldCkgewotICAgICAgICAgICAgICAg
IHNlcmlhbGl6ZVN0cmluZyhjcy0+dmFsdWUoKSwgc3RyKTsKKyAgICAgICAgICAgICAgICBzZXJp
YWxpemVTdHJpbmcoY3MtPnNlcmlhbGl6aW5nVmFsdWUoKSwgc3RyKTsKICAgICAgICAgICAgICAg
ICBpZiAoY3MtPmF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZSgpKQogICAg
ICAgICAgICAgICAgICAgICBzdHIuYXBwZW5kTGl0ZXJhbCgiIGldIik7CiAgICAgICAgICAgICAg
ICAgZWxzZQpAQCAtODIwLDggKzgyMyw5IEBAIGludCBDU1NTZWxlY3Rvcjo6bnRoQigpIGNvbnN0
CiAgICAgcmV0dXJuIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2I7CiB9CiAKLUNTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6UmFyZURhdGEoUGFzc1JlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiB2YWx1ZSkKLSAg
ICA6IG1fdmFsdWUodmFsdWUubGVha1JlZigpKQorQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJl
RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIDogbV9tYXRjaGluZ1ZhbHVlKHZh
bHVlKQorICAgICwgbV9zZXJpYWxpemluZ1ZhbHVlKHZhbHVlKQogICAgICwgbV9hKDApCiAgICAg
LCBtX2IoMCkKICAgICAsIG1fYXR0cmlidXRlKGFueVFOYW1lKCkpCkBAIC04MzEsOCArODM1LDYg
QEAgQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJlRGF0YShQYXNzUmVmUAogCiBDU1NTZWxlY3Rv
cjo6UmFyZURhdGE6On5SYXJlRGF0YSgpCiB7Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIG1f
dmFsdWUtPmRlcmVmKCk7CiB9CiAKIC8vIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzaW5nIG50
aC1hcmd1bWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCShyZXZpc2lvbiAyMDg5
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNTU1BhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtMjMzLDYgKzIz
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdMb3dlcmNhc2VMb2NhbE5hbWUoKSBjb25zdDsKIAogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VyaWFsaXpp
bmdWYWx1ZSgpIGNvbnN0OwogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUo
KSBjb25zdDsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVDYW5vbmljYWxM
b2NhbE5hbWUoKSBjb25zdDsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1
bWVudCA6IG51bGxBdG9tOyB9CkBAIC0yNDAsNyArMjQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiogbGFuZ0FyZ3VtZW50TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9sYW5n
QXJndW1lbnRMaXN0LmdldCgpIDogbnVsbHB0cjsgfQogICAgICAgICBjb25zdCBDU1NTZWxlY3Rv
ckxpc3QqIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2Rh
dGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QuZ2V0KCkgOiBudWxscHRyOyB9CiAKLSAgICAg
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBzZXRW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIG1hdGNoTG93ZXJDYXNlID0gZmFsc2UpOwog
ICAgICAgICAKICAgICAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBUaGVzZSB0d28gbWV0aG9kcyBj
YW4gZ28gYXdheSBvbmNlIHRoZSBvbGQgcGFyc2VyIGlzIGdvbmUuCiAgICAgICAgIHZvaWQgc2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBib29sKTsKQEAgLTM0OCwxMyArMzUwLDE4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NTU2VsZWN0b3ImIG9wZXJhdG9yPShj
b25zdCBDU1NTZWxlY3RvciYpOwogCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFJhcmVEYXRhPiB7Ci0gICAgICAgICAgICBzdGF0aWMgUmVmPFJhcmVEYXRhPiBj
cmVhdGUoUGFzc1JlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSYXJlRGF0YSh2YWx1ZSkpOyB9CisgICAgICAgICAgICBzdGF0aWMgUmVmPFJhcmVE
YXRhPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSYXJlRGF0YSh2YWx1ZSkpOyB9CiAgICAgICAgICAgICB+UmFyZURhdGEoKTsKIAogICAg
ICAgICAgICAgYm9vbCBwYXJzZU50aCgpOwogICAgICAgICAgICAgYm9vbCBtYXRjaE50aChpbnQg
Y291bnQpOwogCi0gICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOyAvLyBQbGFp
biBwb2ludGVyIHRvIGtlZXAgdGhpbmdzIHVuaWZvcm0gd2l0aCB0aGUgdW5pb24uCisgICAgICAg
ICAgICAvLyBGb3IgcXVpcmtzIG1vZGUsIGNsYXNzIGFuZCBpZCBhcmUgY2FzZS1pbnNlbnNpdGl2
ZS4gSW4gdGhlIGNhc2Ugd2hlcmUgdXBwZXJjYXNlCisgICAgICAgICAgICAvLyBsZXR0ZXJzIGFy
ZSB1c2VkIGluIHF1aXJrcyBtb2RlLCB8bV9tYXRjaGluZ1ZhbHVlfCBob2xkcyB0aGUgbG93ZXJj
YXNlIGNsYXNzL2lkCisgICAgICAgICAgICAvLyBhbmQgfG1fc2VyaWFsaXppbmdWYWx1ZXwgaG9s
ZHMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBtX21hdGNo
aW5nVmFsdWU7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbV9zZXJpYWxpemluZ1ZhbHVlOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnQgbV9hOyAvLyBVc2VkIGZvciA6bnRoLSoKICAg
ICAgICAgICAgIGludCBtX2I7IC8vIFVzZWQgZm9yIDpudGgtKgogICAgICAgICAgICAgUXVhbGlm
aWVkTmFtZSBtX2F0dHJpYnV0ZTsgLy8gdXNlZCBmb3IgYXR0cmlidXRlIHNlbGVjdG9yCkBAIC0z
NjQsNyArMzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENTU1NlbGVjdG9yTGlzdD4gbV9zZWxlY3Rvckxpc3Q7IC8vIFVzZWQgZm9yIDptYXRj
aGVzKCkgYW5kIDpub3QoKS4KICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAg
ICBSYXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVlKTsKKyAgICAgICAg
ICAgIFJhcmVEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgICAgICB9OwogICAg
ICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhKCk7CiAKQEAgLTQ1OCwyMiArNDY1LDI0IEBAIGlubGlu
ZSBib29sIENTU1NlbGVjdG9yOjppc0F0dHJpYnV0ZVNlbGUKICAgICAgICAgfHwgbWF0Y2goKSA9
PSBDU1NTZWxlY3Rvcjo6QmVnaW4KICAgICAgICAgfHwgbWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
RW5kOwogfQotCi1pbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0VmFsdWUoY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKKyAgICAKK2lubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sIG1hdGNoTG93ZXJDYXNlKQogewogICAgIEFT
U0VSVChtYXRjaCgpICE9IFRhZyk7CisgICAgaWYgKG1hdGNoTG93ZXJDYXNlICYmICFtX2hhc1Jh
cmVEYXRhICYmICFpc0FTQ0lJTG93ZXJDU1NJZGVudGlmaWVyKHZhbHVlKSkKKyAgICAgICAgY3Jl
YXRlUmFyZURhdGEoKTsKKyAgICAKICAgICAvLyBOZWVkIHRvIGRvIHJlZiBjb3VudGluZyBtYW51
YWxseSBmb3IgdGhlIHVuaW9uLgotICAgIGlmIChtX2hhc1JhcmVEYXRhKSB7Ci0gICAgICAgIGlm
IChtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSkKLSAgICAgICAgICAgIG1fZGF0YS5tX3JhcmVE
YXRhLT5tX3ZhbHVlLT5kZXJlZigpOwotICAgICAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1
ZSA9IHZhbHVlLmltcGwoKTsKLSAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUtPnJl
ZigpOworICAgIGlmICghbV9oYXNSYXJlRGF0YSkgeworICAgICAgICBpZiAobV9kYXRhLm1fdmFs
dWUpCisgICAgICAgICAgICBtX2RhdGEubV92YWx1ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9kYXRh
Lm1fdmFsdWUgPSB2YWx1ZS5pbXBsKCk7CisgICAgICAgIG1fZGF0YS5tX3ZhbHVlLT5yZWYoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9kYXRhLm1fdmFsdWUpCi0gICAgICAg
IG1fZGF0YS5tX3ZhbHVlLT5kZXJlZigpOwotICAgIG1fZGF0YS5tX3ZhbHVlID0gdmFsdWUuaW1w
bCgpOwotICAgIG1fZGF0YS5tX3ZhbHVlLT5yZWYoKTsKKworICAgIG1fZGF0YS5tX3JhcmVEYXRh
LT5tX21hdGNoaW5nVmFsdWUgPSBtYXRjaExvd2VyQ2FzZSA/IHZhbHVlLmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkgOiB2YWx1ZTsKKyAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZXJpYWxpemlu
Z1ZhbHVlID0gdmFsdWU7CiB9CiAKIGlubGluZSBDU1NTZWxlY3Rvcjo6Q1NTU2VsZWN0b3IoKQpA
QCAtNTY3LDkgKzU3NiwyMSBAQCBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3Rv
cjo6CiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3Rvcjo6dmFsdWUoKSBjb25z
dAogewogICAgIEFTU0VSVChtYXRjaCgpICE9IFRhZyk7CisgICAgaWYgKG1faGFzUmFyZURhdGEp
CisgICAgICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bV9tYXRjaGluZ1ZhbHVlOworCisg
ICAgLy8gQXRvbWljU3RyaW5nIGlzIHJlYWxseSBqdXN0IGFuIEF0b21pY1N0cmluZ0ltcGwqIHNv
IHRoZSBjYXN0IGJlbG93IGlzIHNhZmUuCisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNv
bnN0IEF0b21pY1N0cmluZyo+KCZtX2RhdGEubV92YWx1ZSk7Cit9CisKK2lubGluZSBjb25zdCBB
dG9taWNTdHJpbmcmIENTU1NlbGVjdG9yOjpzZXJpYWxpemluZ1ZhbHVlKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobWF0Y2goKSAhPSBUYWcpOworICAgIGlmIChtX2hhc1JhcmVEYXRhKQorICAgICAg
ICByZXR1cm4gbV9kYXRhLm1fcmFyZURhdGEtPm1fc2VyaWFsaXppbmdWYWx1ZTsKKyAgICAKICAg
ICAvLyBBdG9taWNTdHJpbmcgaXMgcmVhbGx5IGp1c3QgYW4gQXRvbWljU3RyaW5nSW1wbCogc28g
dGhlIGNhc3QgYmVsb3cgaXMgc2FmZS4KLSAgICAvLyBGSVhNRTogUGVyaGFwcyBjYWxsIHNpdGVz
IGNvdWxkIGJlIGNoYW5nZWQgdG8gYWNjZXB0IEF0b21pY1N0cmluZ0ltcGw/Ci0gICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+KG1faGFzUmFyZURhdGEgPyAm
bV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgOiAmbV9kYXRhLm1fdmFsdWUpOworICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdG9taWNTdHJpbmcqPigmbV9kYXRhLm1fdmFsdWUp
OwogfQogCiBpbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlVmFsdWVNYXRjaGlu
Z0lzQ2FzZUluc2Vuc2l0aXZlKGJvb2wgaXNDYXNlSW5zZW5zaXRpdmUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCShyZXZpc2lvbiAyMDg5OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw2ICsyOTIs
OSBAQCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3NpCiAgICAgOiBtX21l
ZGlhRmVhdHVyZShmZWF0dXJlKQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogeworICAgIGlmICgh
aXNBU0NJSUxvd2VyQ1NTSWRlbnRpZmllcihtX21lZGlhRmVhdHVyZSkpCisgICAgICAgIG1fbWVk
aWFGZWF0dXJlID0gbV9tZWRpYUZlYXR1cmUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAg
ICAKICAgICAvLyBDcmVhdGUgdmFsdWUgZm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb24gdGhhdCBt
dXN0IGhhdmUgMSBvciBtb3JlIHZhbHVlcy4KICAgICBpZiAoIXRva2VuTGlzdC5zaXplKCkgJiYg
aXNGZWF0dXJlVmFsaWRXaXRob3V0VmFsdWUobV9tZWRpYUZlYXR1cmUpKSB7CiAgICAgICAgIC8v
IFZhbGlkLCBjcmVhdGVzIGEgTWVkaWFRdWVyeUV4cCB3aXRoIGFuICdpbnZhbGlkJyBNZWRpYVF1
ZXJ5RXhwVmFsdWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySWRp
b21zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJ
ZGlvbXMuaAkocmV2aXNpb24gMjA4OTk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXJJZGlvbXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNCArNjQsMTMgQEAgYm9vbCBp
c1ZhbHVlQWxsb3dlZEluTW9kZSh1bnNpZ25lZCBzaG9ydAogCiBVUkwgY29tcGxldGVVUkwoY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJsKTsKIAoraW5saW5lIGJvb2wg
aXNBU0NJSUxvd2VyQ1NTSWRlbnRpZmllcihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKHZhbHVlW2ldKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tl
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJU
b2tlbi5jcHAJKHJldmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyVG9rZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsMjMgKzQ3Niw0IEBAIHZv
aWQgQ1NTUGFyc2VyVG9rZW46OnNlcmlhbGl6ZShTdHJpbmdCdWkKICAgICB9CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgY29u
dmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyc1tpXSk7
Ci19Ci0KLS8vIEZJWE1FLU5FV1BBUlNFUjogV291bGQgbGlrZSB0byBnZXQgcmlkIG9mIHRoaXMg
b3BlcmF0aW9uLiBCbGluayB1c2VzIEhUTUxQYXJzZXIgc3RhdGljIGxvd2VyY2FzZQotLy8gc3Ry
aW5nIGhhc2hpbmcsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQgY29kZSBpbiBvdXIgSFRNTFBhcnNl
ci4KLXZvaWQgQ1NTUGFyc2VyVG9rZW46OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgp
Ci17Ci0gICAgaWYgKCFoYXNTdHJpbmdCYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3ZhbHVlSXM4Qml0KQotICAgICAgICBXZWJDb3JlOjpjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2Uoc3RhdGljX2Nhc3Q8TENoYXIqPihtX3ZhbHVlRGF0YUNoYXJSYXcpLCBtX3Zh
bHVlTGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlSW5QbGFjZShzdGF0aWNfY2FzdDxVQ2hhcio+KG1fdmFsdWVEYXRhQ2hhclJhdyksIG1f
dmFsdWVMZW5ndGgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJUb2tlbi5oCShyZXZpc2lvbiAyMDg5OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclRva2VuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMSw4ICsxMjEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJpbmdWaWV3
KHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4obV92YWx1ZURhdGFDaGFyUmF3KSwgbV92YWx1ZUxl
bmd0aCk7CiAgICAgfQogCi0gICAgdm9pZCBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2Uo
KTsKLQogICAgIFVDaGFyIGRlbGltaXRlcigpIGNvbnN0OwogICAgIE51bWVyaWNTaWduIG51bWVy
aWNTaWduKCkgY29uc3Q7CiAgICAgTnVtZXJpY1ZhbHVlVHlwZSBudW1lcmljVmFsdWVUeXBlKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVz
LmgJKHJldmlzaW9uIDIwOTA4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IHJlbGVhc2VTZWxlY3RvcigpIHsgcmV0
dXJuIFdURk1vdmUobV9zZWxlY3Rvcik7IH0KIAotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICB2
b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wgbWF0Y2hMb3dlckNh
c2UgPSBmYWxzZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSwgbWF0Y2hMb3dlckNhc2Up
OyB9CiAgICAgCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBUaGVzZSB0d28gbWV0aG9kcyBjYW4g
Z28gYXdheSBvbmNlIG9sZCBwYXJzZXIgaXMgZ29uZS4KICAgICB2b2lkIHNldEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSwgYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSkgeyBtX3Nl
bGVjdG9yLT5zZXRBdHRyaWJ1dGUodmFsdWUsIGlzQ2FzZUluc2Vuc2l0aXZlKTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHJl
dmlzaW9uIDIwOTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIyLDEwICsyMTIyLDEwIEBAIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVBdHRyKENTU1AKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIHRv
a2VuLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOworICAgIGF1dG8gYXR0ck5hbWUg
PSB0b2tlbi52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCk7CisgICAgaWYgKGNvbnRleHQuaXNIVE1M
RG9jdW1lbnQgJiYgIWlzQVNDSUlMb3dlckNTU0lkZW50aWZpZXIoYXR0ck5hbWUpKQorICAgICAg
ICBhdHRyTmFtZSA9IGF0dHJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAKLSAgICBT
dHJpbmcgYXR0ck5hbWUgPSB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCk7CiAgICAgaWYgKCFhcmdz
LmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5MjU1
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4OSwxMCArMzg5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPiBDU1NTZQogICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogQXZvaWQgaGF2aW5nIHRv
IGRvIHRoaXMsIGJ1dCB0aGUgb2xkIHBhcnNlciBkb2VzIGFuZCB3ZSBuZWVkCiAgICAgLy8gdG8g
YmUgY29tcGF0aWJsZSBmb3Igbm93LgogICAgIENTU1BhcnNlclRva2VuIHRva2VuID0gcmFuZ2Uu
Y29uc3VtZSgpOwotICAgIGlmIChtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKLSAg
ICAgICAgdG9rZW4uY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgc2VsZWN0
b3ItPnNldFZhbHVlKHRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSk7Ci0KKyAgICBzZWxl
Y3Rvci0+c2V0VmFsdWUodG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpLCBtX2NvbnRleHQu
bW9kZSA9PSBIVE1MUXVpcmtzTW9kZSk7CiAgICAgcmV0dXJuIHNlbGVjdG9yOwogfQogCkBAIC00
MDksOSArNDA2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQog
ICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogQXZvaWQgaGF2aW5nIHRvIGRvIHRoaXMsIGJ1dCB0aGUg
b2xkIHBhcnNlciBkb2VzIGFuZCB3ZSBuZWVkCiAgICAgLy8gdG8gYmUgY29tcGF0aWJsZSBmb3Ig
bm93LgogICAgIENTU1BhcnNlclRva2VuIHRva2VuID0gcmFuZ2UuY29uc3VtZSgpOwotICAgIGlm
IChtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKLSAgICAgICAgdG9rZW4uY29udmVy
dFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgc2VsZWN0b3ItPnNldFZhbHVlKHRva2Vu
LnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSk7CisgICAgc2VsZWN0b3ItPnNldFZhbHVlKHRva2Vu
LnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSwgbV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01v
ZGUpOwogCiAgICAgcmV0dXJuIHNlbGVjdG9yOwogfQpAQCAtNTEyLDE3ICs1MDcsMTcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvcjsKICAgICAKLSAgICAvLyBGSVhNRS1ORVdQ
QVJTRVI6IFdvdWxkIGxpa2UgdG8gZWxpbWluYXRlIHRoaXMuCi0gICAgY29uc3RfY2FzdDxDU1NQ
YXJzZXJUb2tlbiY+KHRva2VuKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLSAg
ICAKLSAgICBTdHJpbmdWaWV3IHZhbHVlID0gdG9rZW4udmFsdWUoKTsKKyAgICBhdXRvIGxvd2Vy
VmFsdWUgPSB0b2tlbi52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCk7CisgICAgaWYgKCFpc0FTQ0lJ
TG93ZXJDU1NJZGVudGlmaWVyKGxvd2VyVmFsdWUpKQorICAgICAgICBsb3dlclZhbHVlLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgYXV0byB2YWx1ZSA9IFN0cmluZ1ZpZXcobG93ZXJW
YWx1ZSk7CiAgICAgCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBXZSBjYW4ndCBjaGFuZ2UgdGhl
IHBzZXVkb2NsYXNzL2VsZW1lbnQgbWFwcyB0aGF0IHRoZSBvbGQgcGFyc2VyCiAgICAgLy8gdXNl
cyB3aXRob3V0IGJyZWFraW5nIGl0OyB0aGlzIGhhY2sgYWxsb3dzIGZ1bmN0aW9uIHNlbGVjdG9y
cyB0byB3b3JrLiBXaGVuIHRoZSBuZXcKICAgICAvLyBwYXJzZXIgdHVybnMgb24sIHdlIGNhbiBw
YXRjaCB0aGUgbWFwIGFuZCByZW1vdmUgdGhpcyBjb2RlLgogICAgIFN0cmluZyBuZXdWYWx1ZTsK
ICAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4gJiYgY29sb25zID09IDEpIHsK
LSAgICAgICAgU3RyaW5nIHRva2VuU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICAgICAg
YXV0byB0b2tlblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgICAgICAgIGlmICghdG9rZW5T
dHJpbmcuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJob3N0IikpIHsKICAgICAgICAgICAg
IG5ld1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSArICIoIjsKICAgICAgICAgICAgIHZhbHVlID0g
bmV3VmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL01lZGlhUXVlcnlQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvTWVkaWFRdWVy
eVBhcnNlci5jcHAJKHJldmlzaW9uIDIwODk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvTWVkaWFRdWVyeVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw4ICsxNjYsNiBA
QCB2b2lkIE1lZGlhUXVlcnlQYXJzZXI6OnJlYWRGZWF0dXJlU3RhcnQoCiB2b2lkIE1lZGlhUXVl
cnlQYXJzZXI6OnJlYWRGZWF0dXJlKENTU1BhcnNlclRva2VuVHlwZSB0eXBlLCBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4pCiB7CiAgICAgaWYgKHR5cGUgPT0gSWRlbnRUb2tlbikgewotICAg
ICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IEZpbmQgYSB3YXkgdG8gYXZvaWQgdGhpcy4KLSAgICAg
ICAgY29uc3RfY2FzdDxDU1NQYXJzZXJUb2tlbiY+KHRva2VuKS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2UoKTsKICAgICAgICAgbV9tZWRpYVF1ZXJ5RGF0YS5zZXRNZWRpYUZlYXR1cmUo
dG9rZW4udmFsdWUoKS50b1N0cmluZygpKTsKICAgICAgICAgbV9zdGF0ZSA9IFJlYWRGZWF0dXJl
Q29sb247CiAgICAgfSBlbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDkzMTEpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxNi0xMi0w
NCAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0g
RWxpbWluYXRlIGluLXBsYWNlIGxvd2VyY2FzaW5nIGluIHRoZSBwYXJzZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzNjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbWVkaWEvbXEtcG9p
bnRlci1leHBlY3RlZC50eHQ6CisKIDIwMTYtMTItMDQgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFzc2VydGlvbiBGYWlsdXJlcyBi
cmVha3BvaW50IHNob3VsZCByZXNwZWN0IGdsb2JhbCBCcmVha3BvaW50cyBlbmFibGVkIHNldHRp
bmcKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbWVkaWEvbXEtcG9pbnRlci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYS9tcS1wb2ludGVyLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMjA4OTk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tZWRpYS9tcS1wb2lu
dGVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIFRlc3QgdGhl
IChwb2ludGVyKSBhbmQgKGhvdmVyKSBtZWRpYSBmZWF0dXJlcy4gU2VlIEJ1ZyA4NzQwMyBmb3Ig
ZGV0YWlscy4KIAogUXVlcnkgIihwb2ludGVyKSI6IHRydWUKLVF1ZXJ5ICIocG9pbnRlcikiOiB0
cnVlCitRdWVyeSAiKFBvaW50ZXIpIjogdHJ1ZQogUXVlcnkgIihwb2ludGVyOm5vbmUpIjogZmFs
c2UKIFF1ZXJ5ICIocG9pbnRlcjpjb2Fyc2UpIjogZmFsc2UKIFF1ZXJ5ICIocG9pbnRlcjpjb0FS
c2UpIjogZmFsc2UK
</data>
<flag name="review"
          id="318599"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>