<?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>133504</bug_id>
          
          <creation_ts>2014-06-04 00:39:14 -0700</creation_ts>
          <short_desc>Align srcset parser with recent spec changes</short_desc>
          <delta_ts>2014-06-05 23:06:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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="Yoav Weiss">yoav</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>calvaris</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>kling</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1013251</commentid>
    <comment_count>0</comment_count>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-04 00:39:14 -0700</bug_when>
    <thetext>Align srcset parser with recent spec changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013269</commentid>
    <comment_count>1</comment_count>
      <attachid>232468</attachid>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-04 01:19:26 -0700</bug_when>
    <thetext>Created attachment 232468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013270</commentid>
    <comment_count>2</comment_count>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-04 01:21:47 -0700</bug_when>
    <thetext>The srcset parser changes align it with the spec: http://picture.responsiveimages.org/#parse-srcset-attr.

The spec changes are meant to give the parser better future compatibility, and enable it to work well with the &apos;w&apos; descriptor, the soon to be added &apos;h&apos; descriptor and function descriptors (e.g. future-descriptor(a, b, c) ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013394</commentid>
    <comment_count>3</comment_count>
      <attachid>232468</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-04 15:18:36 -0700</bug_when>
    <thetext>Comment on attachment 232468
Patch

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

Patch is OK but I still see a lot of things that are either mysterious or need a bit of work. I’m especially concerned about the code here that does &quot;length - 1&quot;

&gt; Source/WTF/ChangeLog:9
&gt; +        I&apos;ve exposed charactersToInt so that it can be used by
&gt; +        HTMLSrcsetParser.cpp.

The best way for us to do this is to make versions that take StringView arguments in WTF.

&gt; Source/WebCore/html/HTMLImageElement.cpp:144
&gt; +            fastGetAttribute(srcAttr),
&gt; +            fastGetAttribute(srcsetAttr));

These would look better on one line rather than successive lines.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.h:93
&gt; +template&lt;typename CharType&gt;
&gt; +inline bool isComma(CharType character)
&gt; +{
&gt; +    return character == &apos;,&apos;;
&gt; +}

Do we really need a function for this? I think that using == &apos;,&apos; at the call site would be fine and it’s not enhanced with a function.

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:110
&gt; +            ImageCandidate imageCandidate = bestFitSourceForImageAttributes(m_deviceScaleFactor,
&gt; +                m_urlToLoad,
&gt; +                m_srcSetAttribute);

I think this would read better all on one line.

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:112
&gt; +            String srcMatchingScale = imageCandidate.url();
&gt;              setUrlToLoad(srcMatchingScale, true);

I don’t think the local variable is helpful here. I suggest combining these two into a single line.

But also, it’s really strange to call the url() function returning an AtomicString but then just put it into a String.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:40
&gt; +static bool compareByDensity(const ImageCandidate&amp; first, const ImageCandidate&amp; second)

Should mark this inline.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:56
&gt; +    descriptorStart = 0;

Please use nullptr.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:72
&gt; +template&lt;typename CharType&gt;
&gt; +static bool isEOF(const CharType* position, const CharType* end)
&gt; +{
&gt; +    return position &gt;= end;
&gt; +}

Does this helper function aid in readability?

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:77
&gt; +template&lt;typename CharType&gt;
&gt; +static void tokenizeDescriptors(const CharType*&amp; position,
&gt; +    const CharType* attributeEnd,
&gt; +    Vector&lt;StringView&gt;&amp; descriptors)

Please put this all on one line rather than splitting it up vertically.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:82
&gt; +    while (true) {

I think this would read better as a for loop:

    for (; ; ++position) {

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:134
&gt; +static float stringViewToFloat(const StringView&amp; string, bool&amp; isValid)
&gt; +{
&gt; +    if (string.is8Bit())
&gt; +        return charactersToFloat(string.characters8(), string.length() - 1, &amp;isValid);
&gt; +    return charactersToFloat(string.characters16(), string.length() - 1, &amp;isValid);
&gt;  }

This function belongs in WTF. And also it need not have string view in its name. Also, why length - 1?

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:141
&gt; +static int stringViewToInt(const StringView&amp; string, bool&amp; isValid)
&gt;  {
&gt; -    ASSERT(imageCandidates.isEmpty());
&gt; +    if (string.is8Bit())
&gt; +        return charactersToInt(string.characters8(), string.length() - 1, &amp;isValid);
&gt; +    return charactersToInt(string.characters16(), string.length() - 1, &amp;isValid);
&gt; +}

This function belongs in WTF. And also it need not have string view in its name. Also, why length - 1?

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:145
&gt; +    for (Vector&lt;StringView&gt;::iterator descriptor = descriptors.begin(); descriptor != descriptors.end(); ++descriptor) {

An iterator should not be named &quot;descriptor&quot;. Also, we should almost never use iterators explicitly to iterate through vectors; iterating with an index is almost always better, except when using something generic that always uses iterators. But, we can use a modern for loop to solve both those problems:

    for (auto&amp; descriptor : descriptors) {

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:147
&gt; +        if (!descriptor-&gt;length())
&gt; +            continue;

Normally we’d use isEmpty() for this.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:148
&gt; +        UChar c = (*descriptor)[descriptor-&gt;length() - 1];

Please consider a word rather than a letter for the name of this variable.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:179
&gt; +static void parseImageCandidatesFromSrcsetAttribute(const String&amp; attribute, const CharType* attributeStart, unsigned length, Vector&lt;ImageCandidate&gt;&amp; imageCandidates)

This function does not need the attribute argument. You can make a StringView from a pointer and length, you don’t need to go back to the original String to make it.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:184
&gt; +    while (position &lt; attributeEnd) {

I suggest a for loop instead of a while loop here.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:229
&gt; +static void parseImageCandidatesFromSrcsetAttribute(const String&amp; attribute, Vector&lt;ImageCandidate&gt;&amp; imageCandidates)

This function should take a StringView argument rather than a const String&amp;.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:232
&gt; +    if (attribute.isNull())
&gt; +        return;

No need for this check. The code would already do the right thing without it and it’s not something we need to optimize for.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:237
&gt; +    if (attribute.is8Bit())
&gt; +        parseImageCandidatesFromSrcsetAttribute&lt;LChar&gt;(attribute, attribute.characters8(), attribute.length(), imageCandidates);
&gt; +    else
&gt; +        parseImageCandidatesFromSrcsetAttribute&lt;UChar&gt;(attribute, attribute.characters16(), attribute.length(), imageCandidates);

I’m not sure we need separately optimized versions for 8-bit and 16-bit characters. We should considering using StringView more for the argument types and indexing rather than chasing pointers during the parsing process.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:241
&gt; +static ImageCandidate pickBestImageCandidate(float deviceScaleFactor,
&gt; +    Vector&lt;ImageCandidate&gt;&amp; imageCandidates)

Please put this on one line.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:243
&gt; +    const float defaultDensityValue = 1.0;

I don’t think this constant adds much to the readability of the code, but I guess maybe it’s OK. It’s strange to define it here, though, high up in the function. Also, I see places that are using a default of 1.0 elsewhere without a named constant.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:244
&gt; +    bool ignoreSrc = false;

What’s the point of this? It’s always false?

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:249
&gt; +    for (Vector&lt;ImageCandidate&gt;::iterator it = imageCandidates.begin(); it != imageCandidates.end(); ++it) {

Please use a modern for loop here:

    for (auto&amp; candidate : imageCandidates) {

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:250
&gt; +        if (it-&gt;density() &lt; 0)

It’s really strange to have this &quot;&lt; 0&quot; here. Is there some cleaner way for us to do this? I noticed in other places you have both a named constant and a hasDensity function, but here we are following a different pattern.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:279
&gt; +ImageCandidate bestFitSourceForImageAttributes(float deviceScaleFactor,
&gt; +    const String&amp; srcAttribute,
&gt; +    const String&amp; srcsetAttribute)

Please put this all on one line.

The argument types should probably be const AtomicString&amp; if they are attribute values since that’s what attribute values are.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:295
&gt; +    return pickBestImageCandidate(deviceScaleFactor,
&gt; +        imageCandidates);

This should be a single line.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:36
&gt;  #include &lt;wtf/text/WTFString.h&gt;

Can remove this include since StringView.h includes WTFString.h.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:69
&gt; +class ImageCandidate {

I think it would be better to use a struct rather than a class for this. The class isn’t adding much encapsulation.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:81
&gt; +    ImageCandidate(const String&amp; source, unsigned start, unsigned length, const DescriptorParsingResult&amp; result, OriginAttribute originAttribute)

This constructor should just take a StringView rather than source, start, and length.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:84
&gt; +        , m_density(result.hasDensity()?result.density():UninitializedDescriptor)
&gt; +        , m_resourceWidth(result.hasWidth()?result.resourceWidth():UninitializedDescriptor)

Please put spaces around the ? and the : in the ?: operator.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:92
&gt; +    String toString() const
&gt;      {
&gt; -        return m_scaleFactor;
&gt; +        return String(m_string.toString());
&gt; +    }

The getter should just return the StringView. We don’t need to build a toString function into this class.

It’s also wrong to write String(x.toString()). Should just be x.toString().

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:97
&gt; +    AtomicString url() const
&gt; +    {
&gt; +        return AtomicString(m_string.toString());
&gt; +    }

We should not have this function. Also, we would use toAtomicString for this, not toString, if we needed it.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:122
&gt; +    inline bool isEmpty() const
&gt; +    {
&gt; +        return m_string.isEmpty();
&gt;      }

We don’t need a separate function for this. We should just use the function that returns a StringView and call isEmpty on that.

Also, no need to mark this inline. All functions defined in a class like this are inline.

&gt; Source/WebCore/html/parser/HTMLSrcsetParser.h:133
&gt; +ImageCandidate bestFitSourceForImageAttributes(float deviceScaleFactor,
&gt; +    const String&amp; srcAttribute,
&gt; +    const String&amp; srcsetAttribute);

Should be all on one line. There’s this new vertical coding style you are using a lot. Maybe it’s a Google/Blink thing?

&gt; Source/WebCore/html/parser/ParsingUtilities.h:42
&gt; +template&lt;typename CharType&gt;
&gt; +bool skipExactly(const CharType*&amp; position, const CharType* end, CharType delimiter)
&gt; +{
&gt; +    if (position &lt; end &amp;&amp; *position == delimiter) {
&gt; +        ++position;
&gt; +        return true;
&gt; +    }
&gt; +    return false;
&gt; +}

We should consider writing these utilities for a StringView instead of a character pointer so we can do this kind of parsing without having two whole copies of every function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013489</commentid>
    <comment_count>4</comment_count>
      <attachid>232468</attachid>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-05 02:24:47 -0700</bug_when>
    <thetext>Comment on attachment 232468
Patch

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

&gt;&gt; Source/WebCore/html/parser/HTMLParserIdioms.h:93
&gt;&gt; +}
&gt; 
&gt; Do we really need a function for this? I think that using == &apos;,&apos; at the call site would be fine and it’s not enhanced with a function.

The function is needed in order to pass it to reverseSkipWhile in HTMLSrcsetParser.

&gt;&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:72
&gt;&gt; +}
&gt; 
&gt; Does this helper function aid in readability?

I think it does since it aligns well with the spec&apos;s language.

&gt;&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:134
&gt;&gt;  }
&gt; 
&gt; This function belongs in WTF. And also it need not have string view in its name. Also, why length - 1?

OK. The length-1 is there since we need to ignore the latest char, which is the descriptor char (e.g. &apos;x&apos;).
I&apos;ve changed it to make it clearer.

&gt;&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:184
&gt;&gt; +    while (position &lt; attributeEnd) {
&gt; 
&gt; I suggest a for loop instead of a while loop here.

Since this loop doesn&apos;t advance position on every step (according to spec), I thought a while is more appropriate.

&gt;&gt; Source/WebCore/html/parser/HTMLSrcsetParser.cpp:237
&gt;&gt; +        parseImageCandidatesFromSrcsetAttribute&lt;UChar&gt;(attribute, attribute.characters16(), attribute.length(), imageCandidates);
&gt; 
&gt; I’m not sure we need separately optimized versions for 8-bit and 16-bit characters. We should considering using StringView more for the argument types and indexing rather than chasing pointers during the parsing process.

OK. I&apos;ve added a FIXME for that. I&apos;ll address it in a separate patch.

&gt;&gt; Source/WebCore/html/parser/ParsingUtilities.h:42
&gt;&gt; +}
&gt; 
&gt; We should consider writing these utilities for a StringView instead of a character pointer so we can do this kind of parsing without having two whole copies of every function.

I think that would be required in order to move the parsing to working with StringView and position instead of direct pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013493</commentid>
    <comment_count>5</comment_count>
      <attachid>232533</attachid>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-05 02:29:05 -0700</bug_when>
    <thetext>Created attachment 232533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013494</commentid>
    <comment_count>6</comment_count>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-05 02:34:29 -0700</bug_when>
    <thetext>Thanks for reviewing! :)
I addressed the review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013503</commentid>
    <comment_count>7</comment_count>
      <attachid>232534</attachid>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2014-06-05 03:51:03 -0700</bug_when>
    <thetext>Created attachment 232534
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013748</commentid>
    <comment_count>8</comment_count>
      <attachid>232534</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-05 23:06:46 -0700</bug_when>
    <thetext>Comment on attachment 232534
Patch

Clearing flags on attachment: 232534

Committed r169637: &lt;http://trac.webkit.org/changeset/169637&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013749</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-05 23:06:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232468</attachid>
            <date>2014-06-04 01:19:26 -0700</date>
            <delta_ts>2014-06-05 02:28:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133504-20140604101859.patch</filename>
            <type>text/plain</type>
            <size>60644</size>
            <attacher name="Yoav Weiss">yoav</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMwNGNiOTliZjI2YjMxY2U4NGY5YWEw
ZmE0ZjA0MGY4MjliODc2NWEuLmY0YWExYzg2NGRkYjQ3ODZlMzc3ODdjZjQ0MjZkYjA4MWUxOTQw
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMDYtMDQgIFlvYXYgV2Vpc3MgIDx5b2F2QHlv
YXYud3M+CisKKyAgICAgICAgQWxpZ24gc3Jjc2V0IHBhcnNlciB3aXRoIHJlY2VudCBzcGVjIGNo
YW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MzUwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkn
dmUgZXhwb3NlZCBjaGFyYWN0ZXJzVG9JbnQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieQorICAg
ICAgICBIVE1MU3Jjc2V0UGFyc2VyLmNwcC4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmlu
Zy5oOgorCiAyMDE0LTA2LTAxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtNU0VdIEFwcGVuZHMgb2Ygb3ZlcmxhcHBpbmcgc2FtcGxlIGRhdGEgZG8gbm90IGNs
ZWFyIGV4aXN0aW5nIHNhbXBsZXMgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmIzNzZkOGVhOTZl
NjNhMjk1YWViNzJjZTQxODRkMGYxZDcyODA2NS4uYTU3ZjAwYzdkMjlmM2IxZGM0ZDJhYmE1OGNl
YWYyZTk4NzA0MjFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE0LTA2LTA0ICBZ
b2F2IFdlaXNzICA8eW9hdkB5b2F2LndzPgorCisgICAgICAgIEFsaWduIHNyY3NldCBwYXJzZXIg
d2l0aCByZWNlbnQgc3BlYyBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzM1MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOZXcgdGVzdHMgd2VyZSBhZGRlZCB0byBmYXN0L2hpZHBpL2ltYWdl
LXNyY3NldC1pbnZhbGlkLWRlc2NyaXB0b3IuaHRtbAorCisgICAgICAgIFRoZSBzcmNzZXQgcGFy
c2VyIGNoYW5nZXMgYWxpZ24gaXQgd2l0aCB0aGUgc3BlYzoKKyAgICAgICAgaHR0cDovL3BpY3R1
cmUucmVzcG9uc2l2ZWltYWdlcy5vcmcvI3BhcnNlLXNyY3NldC1hdHRyLgorICAgICAgICBUaGUg
c3BlYyBjaGFuZ2VzIGFyZSBtZWFudCB0byBnaXZlIHRoZSBwYXJzZXIgYmV0dGVyIGZ1dHVyZQor
ICAgICAgICBjb21wYXRpYmlsaXR5LCBhbmQgZW5hYmxlIGl0IHRvIHdvcmsgd2VsbCB3aXRoIHRo
ZSAndycgZGVzY3JpcHRvciwgdGhlCisgICAgICAgIHNvb24gdG8gYmUgYWRkZWQgJ2gnIGRlc2Ny
aXB0b3IgYW5kIGZ1bmN0aW9uIGRlc2NyaXB0b3JzIChlLmcuCisgICAgICAgIGZ1dHVyZS1kZXNj
cmlwdG9yKGEsIGIsIGMpICkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEJlc3RGaXRVUkxBbmREUFJG
cm9tSW1hZ2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzSFRNTFNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ29tbWEpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNIVE1MU3BhY2VPckNvbW1hKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJl
bG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW5QcmVsb2FkU2Nhbm5lcjo6
U3RhcnRUYWdTY2FubmVyOjpwcm9jZXNzQXR0cmlidXRlcyk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFNyY3NldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQnlEZW5z
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZERlc2NyaXB0b3JBbmRSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNFT0Yp
OgorICAgICAgICAoV2ViQ29yZTo6dG9rZW5pemVEZXNjcmlwdG9ycyk6CisgICAgICAgIChXZWJD
b3JlOjpzdHJpbmdWaWV3VG9GbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdWaWV3VG9J
bnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZXNjcmlwdG9ycyk6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZUltYWdlQ2FuZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6cGlja0Jlc3RJbWFnZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVC
eVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2VzV2l0
aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFNyY3NldFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGVzY3JpcHRvclBhcnNp
bmdSZXN1bHQ6OkRlc2NyaXB0b3JQYXJzaW5nUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
c2NyaXB0b3JQYXJzaW5nUmVzdWx0OjpoYXNEZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
c2NyaXB0b3JQYXJzaW5nUmVzdWx0OjpoYXNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNj
cmlwdG9yUGFyc2luZ1Jlc3VsdDo6aGFzSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2Ny
aXB0b3JQYXJzaW5nUmVzdWx0OjpkZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NyaXB0
b3JQYXJzaW5nUmVzdWx0OjpyZXNvdXJjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2Ny
aXB0b3JQYXJzaW5nUmVzdWx0OjpyZXNvdXJjZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdDo6c2V0UmVzb3VyY2VXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdDo6c2V0UmVzb3VyY2VIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVzY3JpcHRvclBhcnNpbmdSZXN1bHQ6OnNldERlbnNpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VDYW5kaWRhdGU6OkltYWdlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQ2FuZGlkYXRlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUNhbmRpZGF0ZTo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpzZXRE
ZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpkZW5zaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpyZXNvdXJjZVdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpzcmNPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VDYW5kaWRhdGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VXaXRoU2Nh
bGU6OkltYWdlV2l0aFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlV2l0
aFNjYWxlOjppbWFnZVVSTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVdpdGhT
Y2FsZTo6c2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svUGFy
c2luZ1V0aWxpdGllcy5oLgorICAgICAgICAoc2tpcEV4YWN0bHkpOgorICAgICAgICAoc2tpcFVu
dGlsKToKKyAgICAgICAgKHNraXBXaGlsZSk6CisgICAgICAgIChyZXZlcnNlU2tpcFdoaWxlKToK
KwogMjAxNC0wNi0wMyAgWW9hdiBXZWlzcyAgPHlvYXZAeW9hdi53cz4KIAogICAgICAgICBSZWZh
Y3RvciB0aGUgc3Jjc2V0IHBhcnNlciBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKaW5kZXggYzRmNjlhNzQ5Y2ZkNDgyOGZjOGU0NmNhZmU2M2RhMmVhNmRlMzEwYi4uYzU2
ZTI2NmU5MmQ2YjlkYTc1NDNkNmIwMjllZjQzNTkyNzFiYWQyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oCkBAIC01MCw3ICs1MCw3IEBAIHVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmlj
dChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9CiBpbnRwdHJf
dCBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9r
ID0gMCwgaW50IGJhc2UgPSAxMCk7CiBpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3Qo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CiAKLWlu
dCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8v
IGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQorV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCBjaGFy
YWN0ZXJzVG9JbnQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9y
ZXMgdHJhaWxpbmcgZ2FyYmFnZQogV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCBjaGFyYWN0ZXJz
VG9JbnQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJh
aWxpbmcgZ2FyYmFnZQogdW5zaWduZWQgY2hhcmFjdGVyc1RvVUludChjb25zdCBMQ2hhciosIHNp
emVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCiB1bnNpZ25l
ZCBjaGFyYWN0ZXJzVG9VSW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOyAv
LyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjhmYWQy
MzU1Zjc4NTQ3OTA5YmI0YmY3ZTg4OGY5Yjc4MTljOWQ3Ni4uMDE0ZGNhMjMxMDQ4MjUyNmFmZGVl
ZTAyN2FhYjRiNGYxOGI3ZWE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE3MDAsNiArMTcw
MCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0LmNwcAogICAgIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5j
cHAKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAorICAgIGh0bWwvcGFyc2Vy
L0hUTUxTcmNzZXRQYXJzZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFBhcnNlck9wdGlvbnMu
Y3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5jcHAKICAgICBodG1sL3Bh
cnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCA4MGE3MTgzY2NmMTVjMDJjMmY4NGM1OTVlNDEx
NDE4ZTA1OTNhYjJhLi4zZGNmY2JjZDQ5OGZkMTg2NjY2MDcyYzkwNmE0MmE0M2RkMzZkZmMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAg
LTIwNjc0LDYgKzIwNjc0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFy
c2VyXEhUTUxUcmVlQnVpbGRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxwYXJzZXJcSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGh0bWxccGFyc2VyXE5lc3RpbmdMZXZlbEluY3JlbWVudGVyLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxQYXJzaW5nVXRpbGl0aWVzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxUZXh0RG9jdW1lbnRQYXJz
ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXFhTU0F1ZGl0
b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXFhTU0F1ZGl0
b3JEZWxlZ2F0ZS5oIiAvPgpAQCAtMjA2OTYsNyArMjA2OTcsNiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caHRtbFx0cmFja1xJbmJhbmRUZXh0VHJhY2suaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcSW5iYW5kV2ViVlRUVGV4dFRyYWNrLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXExvYWRhYmxlVGV4dFRyYWNrLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXFBhcnNpbmdVdGlsaXRp
ZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcVGV4dFRyYWNr
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xUZXh0VHJhY2tD
dWVMaXN0LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZmQ4MGE0ZTIyMGEwZDk1NGY3MzkwNTViMTYy
NjFkYTcwZDJlZTJkMC4uMTQwNmE1NDIyODRjM2ZjYTk1N2RlNDkzOWEyZDk1YTc0NjlhMGE5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2ouZmlsdGVycwpAQCAtMTEyMjcsNiArMTEyMjcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caHRtbFxwYXJzZXJcTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCI+CiAgICAgICA8
RmlsdGVyPmh0bWxccGFyc2VyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxQYXJzaW5nVXRpbGl0aWVzLmgiPgorICAgICAg
PEZpbHRlcj5odG1sXHBhcnNlcjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcVGV4dERvY3VtZW50UGFyc2VyLmgiPgogICAg
ICAgPEZpbHRlcj5odG1sXHBhcnNlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTEy
OTMsOSArMTEyOTYsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xM
b2FkYWJsZVRleHRUcmFjay5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xQ
YXJzaW5nVXRpbGl0aWVzLmgiPgotICAgICAgPEZpbHRlcj5odG1sXHRyYWNrPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXFRl
eHRUcmFjay5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGYxMjk5YmFmZGUxYjYxMmYyYTAxNDg3MmM4NjlmM2U2NDM5MjJjOGUuLjBi
OTVhNmYxMWRlMGNhNjYwZDJlZDY5ODc5ZWVjN2YzMGMyMzc0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwMTMsNiArMjAx
Myw3IEBACiAJCTUzMTc2MTIzMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxNzYx
MjExM0M1MTY2OTAwMjZFNDU0IC8qIFN0eWxlRmxleGlibGVCb3hEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM2RDVBMjAxOTNFMThFOTAw
Q0U0Q0FCIC8qIEhUTUxTcmNzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTFGMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0
UGFyc2VyLmggKi87IH07CiAJCTUzNkQ1QTIxMTkzRTE4RUUwMENFNENBQiAvKiBIVE1MU3Jjc2V0
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzNkQ1QTFFMTkzRTE4RDAwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmNwcCAqLzsgfTsK
KwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMw
MENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi87IH07CiAJCTUzQzgyOThEMTNEOEQ5Mjcw
MERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M4Mjk4QjEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVy
RmxleGlibGVCb3guY3BwICovOyB9OwogCQk1M0M4Mjk4RTEzRDhEOTI3MDBERTJERUIgLyogUmVu
ZGVyRmxleGlibGVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQzgyOThDMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRTI5RTVF
MTY3QThBMTkwMDU4NkQzRCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTI5RTVDMTY3QThBMTkw
MDU4NkQzRCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcCAqLzsgfTsKQEAgLTIzMzks
NyArMjM0MCw2IEBACiAJCTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5jcHAgKi87IH07CiAJCTdBNzRFQ0JCMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQu
aCAqLzsgfTsKIAkJN0E3NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAgKi87IH07Ci0JCTdBOTM4Njg0MThEQ0MxNDUwMEI4MjYzRCAvKiBQYXJzaW5n
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QTkzODY4MTE4RENDMTQ1MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oICovOyB9Owog
CQk3QTkzODY4NTE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTkzODY4MjE4RENDMTQ1MDBCODI2
M0QgLyogVlRUU2Nhbm5lci5jcHAgKi87IH07CiAJCTdBOTM4Njg2MThEQ0MxNDUwMEI4MjYzRCAv
KiBWVFRTY2FubmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QTkzODY4MzE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5oICovOyB9OwogCQk3
QUFCQTI1OTE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAv
KiBET01FZGl0b3IuY3BwICovOyB9OwpAQCAtOTA3Niw2ICs5MDc2LDcgQEAKIAkJNTMxNzYxMjEx
M0M1MTY2OTAwMjZFNDU0IC8qIFN0eWxlRmxleGlibGVCb3hEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlRmxleGlibGVCb3hEYXRhLmg7IHBhdGggPSBzdHlsZS9T
dHlsZUZsZXhpYmxlQm94RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzZE
NUExRTE5M0UxOEQwMDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBIVE1MU3Jjc2V0UGFyc2VyLmNwcDsgcGF0aCA9IHBh
cnNlci9IVE1MU3Jjc2V0UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM2RDVBMUYxOTNFMThFOTAwQ0U0Q0FCIC8qIEhUTUxTcmNzZXRQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSFRNTFNyY3NldFBhcnNlci5oOyBwYXRoID0gcGFyc2Vy
L0hUTUxTcmNzZXRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM2RDVB
MjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGFyc2luZ1V0aWxpdGllcy5oOyBwYXRoID0gcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDODI5OEIxM0Q4
RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZsZXhpYmxlQm94LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNDODI5OEMxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxl
Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckZsZXhpYmxlQm94
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTI5RTVDMTY3QThBMTkwMDU4NkQz
RCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTQzNiw3ICs5NDM3LDYgQEAKIAkJN0E3NEVDQjgxMDE4MzlB
NTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JG
cm9udGVuZEhvc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QTkz
ODY4MTE4RENDMTQ1MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzaW5nVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBOTM4NjgyMThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRTY2FubmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUVFNjYW5uZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTkzODY4MzE4RENDMTQ1MDBCODI2M0QgLyogVlRU
U2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVFRTY2FubmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAv
KiBET01FZGl0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9N
RWRpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjAzLDYgKzE4MjAz
LDcgQEAKIAkJCQk5NzdCMzcyMjEyMjg3MjE3MDBCODFGRjggLyogSFRNTFRyZWVCdWlsZGVyLmgg
Ki8sCiAJCQkJQTg4MDVBRjExNkM5NkFFQTAwMEU5RDk4IC8qIElucHV0U3RyZWFtUHJlcHJvY2Vz
c29yLmggKi8sCiAJCQkJOEEzMDlDOUUxMjM5NTBCRTAwQ0I5MjA0IC8qIE5lc3RpbmdMZXZlbElu
Y3JlbWVudGVyLmggKi8sCisJCQkJNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdV
dGlsaXRpZXMuaCAqLywKIAkJCQk5N0JDODQ4MTEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcCAqLywKIAkJCQk5N0JDODQ4MjEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERv
Y3VtZW50UGFyc2VyLmggKi8sCiAJCQkJOTc3RTJFMEIxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1
ZGl0b3IuY3BwICovLApAQCAtMTk1MDYsNyArMTk1MDcsNiBAQAogCQlCMUFENEU3NzEzQTEyQTcy
MDA4NDZCMjcgLyogdHJhY2sgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAotCQkJCTdBOTM4NjgxMThEQ0MxNDUwMEI4MjYzRCAvKiBQYXJzaW5nVXRpbGl0aWVzLmgg
Ki8sCiAJCQkJN0E0NTAzMkQxOERCNzE3MjAwMzc3QjM0IC8qIEJ1ZmZlcmVkTGluZVJlYWRlci5j
cHAgKi8sCiAJCQkJN0E0NTAzMkUxOERCNzE3MjAwMzc3QjM0IC8qIEJ1ZmZlcmVkTGluZVJlYWRl
ci5oICovLAogCQkJCUJFODhFMENDMTcxNUQyQTIwMDY1OEQ5OCAvKiBBdWRpb1RyYWNrLmNwcCAq
LywKQEAgLTI0MjI1LDcgKzI0MjI1LDYgQEAKIAkJCQlBODcxREUyQjBBMTUyQUM4MDBCMTJBNjgg
LyogSFRNTEZyYW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGRkUzMUQwQUUxOTYz
MzAwMTM2QkY1IC8qIEhUTUxGcmFtZUVsZW1lbnRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0UyNDFGRjBCMkI0RTQwMDBDNzMyQTEgLyogSFRNTEZyYW1lT3duZXJFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKLQkJCQk3QTkzODY4NDE4RENDMTQ1MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURFMjgwQTE1MkFDODAwQjEyQTY4IC8qIEhUTUxG
cmFtZVNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFERTJEMEExNTJBQzgwMEIx
MkE2OCAvKiBIVE1MSGVhZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I4MEEx
OTJCOUMwMEE4RUY1RiAvKiBIVE1MSGVhZGluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjQzMjQsNiArMjQzMjMsNyBAQAogCQkJCTUxMDE5NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJREJD
dXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5QzQxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTFENzE5QzcxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3NzFDOEYxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5Q0ExODExMDZFMDAwMTZEQzUxIC8qIElE
QkRhdGFiYXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlDQzE4MTEwNkUw
MDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGVhNzgyZTVjNGFlYjc4
NTAyMDcwYjEwZDgzZDFlZGFkOWE5OWFkMTAuLmQ2MWM5ZGI5MWJlYzMwYzc2ZjkxY2EyMzljOTc5
MjJjNTMzY2Q2MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcApA
QCAtMTIzLDE5ICsxMjMsMjYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW1hZ2VFbGVtZW50
OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmVzdEZpdEltYWdlVVJMLmlz
RW1wdHkoKSA/IGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikgOiBtX2Jlc3RGaXRJbWFnZVVSTDsK
IH0KIAordm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRCZXN0Rml0VVJMQW5kRFBSRnJvbUltYWdl
Q2FuZGlkYXRlKGNvbnN0IEltYWdlQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7CisgICAgbV9iZXN0
Rml0SW1hZ2VVUkwgPSBjYW5kaWRhdGUudXJsKCk7CisgICAgZmxvYXQgY2FuZGlkYXRlRGVuc2l0
eSA9IGNhbmRpZGF0ZS5kZW5zaXR5KCk7CisgICAgaWYgKGNhbmRpZGF0ZURlbnNpdHkgPj0gMCkK
KyAgICAgICAgbV9pbWFnZURldmljZVBpeGVsUmF0aW8gPSAxIC8gY2FuZGlkYXRlRGVuc2l0eTsK
KyAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ltYWdlKCkpCisgICAgICAgIHRv
UmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnNldEltYWdlRGV2aWNlUGl4ZWxSYXRpbyhtX2ltYWdl
RGV2aWNlUGl4ZWxSYXRpbyk7Cit9CisKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBpZiAobmFtZSA9PSBhbHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigp
ICYmIHJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkKICAgICAgICAgICAgIHRvUmVuZGVySW1h
Z2UocmVuZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
c3JjQXR0ciB8fCBuYW1lID09IHNyY3NldEF0dHIpIHsKLSAgICAgICAgSW1hZ2VXaXRoU2NhbGUg
Y2FuZGlkYXRlID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhkb2N1bWVudCgpLmRl
dmljZVNjYWxlRmFjdG9yKCksIGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0ciksIGZhc3RHZXRBdHRy
aWJ1dGUoc3Jjc2V0QXR0cikpOwotICAgICAgICBtX2Jlc3RGaXRJbWFnZVVSTCA9IGNhbmRpZGF0
ZS5pbWFnZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLCBmYXN0R2V0QXR0cmlidXRlKHNy
Y3NldEF0dHIpKTsKLSAgICAgICAgZmxvYXQgY2FuZGlkYXRlU2NhbGVGYWN0b3IgPSBjYW5kaWRh
dGUuc2NhbGVGYWN0b3IoKTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZVNjYWxlRmFjdG9yID4gMCkK
LSAgICAgICAgICAgIG1faW1hZ2VEZXZpY2VQaXhlbFJhdGlvID0gMSAvIGNhbmRpZGF0ZVNjYWxl
RmFjdG9yOwotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ltYWdlKCkp
Ci0gICAgICAgICAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKCkpLT5zZXRJbWFnZURldmljZVBp
eGVsUmF0aW8obV9pbWFnZURldmljZVBpeGVsUmF0aW8pOworICAgICAgICBJbWFnZUNhbmRpZGF0
ZSBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwKKyAgICAgICAgICAgIGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0
ciksCisgICAgICAgICAgICBmYXN0R2V0QXR0cmlidXRlKHNyY3NldEF0dHIpKTsKKyAgICAgICAg
c2V0QmVzdEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwogICAgICAg
ICBtX2ltYWdlTG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7
CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHVzZW1hcEF0dHIpIHsKICAgICAgICAgc2V0SXNMaW5r
KCF2YWx1ZS5pc051bGwoKSAmJiAhc2hvdWxkUHJvaGliaXRMaW5rcyh0aGlzKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCmluZGV4IDU0MjdmOWM0MGI3YjgwMjY2NjYzMzg5
YTI3ZTA3N2RiZDYyOGZlNDUuLjIzOTM5YmI5OWNiMDgzZjIzNGRlOTdhZTA3Y2VlYjE5YjBhNGRj
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCkBAIC0zMiw2ICszMiw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2NsYXNz
IEltYWdlQ2FuZGlkYXRlOwogCiBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50LCBwdWJsaWMgRm9ybU5hbWVkSXRlbSB7CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3Jt
RWxlbWVudDsKQEAgLTk5LDYgKzEwMCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQXR0YWNoUmVuZGVyZXJzKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFBhc3NSZWY8UmVuZGVyU3R5bGU+KSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldEJlc3RGaXRVUkxBbmREUFJGcm9tSW1hZ2VDYW5kaWRhdGUo
Y29uc3QgSW1hZ2VDYW5kaWRhdGUmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVj
dGlvbigpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmgKaW5kZXggNjU3MzExMzk5MzIzM2M4Y2FkZDdiYmE4MDliMWRkNzE3
MjUxMzNjZi4uZGEzYmQ3YmEwMDhhYTM4Zjk5ZmMxYmQ2MjA5MTRlZDU3Yzg0ZmQxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaApAQCAtMzQsNyAr
MzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEZWNpbWFsOwogCiAvLyBTcGFjZSBj
aGFyYWN0ZXJzIGFzIGRlZmluZWQgYnkgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbi4KLWJvb2wgaXNI
VE1MU3BhY2UoVUNoYXIpOwogYm9vbCBpc0hUTUxMaW5lQnJlYWsoVUNoYXIpOwogYm9vbCBpc05v
dEhUTUxTcGFjZShVQ2hhcik7CiBib29sIGlzSFRNTFNwYWNlQnV0Tm90TGluZUJyZWFrKFVDaGFy
IGNoYXJhY3Rlcik7CkBAIC02Niw4ICs2NSw4IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25z
dCBTdHJpbmcmLCBpbnQmKTsKIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0
IFN0cmluZyYsIHVuc2lnbmVkIGludCYpOwogCiAvLyBJbmxpbmUgaW1wbGVtZW50YXRpb25zIG9m
IHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBhYm92ZS4KLQotaW5saW5lIGJvb2wgaXNI
VE1MU3BhY2UoVUNoYXIgY2hhcmFjdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Citp
bmxpbmUgYm9vbCBpc0hUTUxTcGFjZShDaGFyVHlwZSBjaGFyYWN0ZXIpCiB7CiAgICAgLy8gSGlz
dG9ncmFtIGZyb20gQXBwbGUncyBwYWdlIGxvYWQgdGVzdCBjb21iaW5lZCB3aXRoIHNvbWUgYWQg
aG9jIGJyb3dzaW5nIHNvbWUgb3RoZXIgdGVzdCBzdWl0ZXMuCiAgICAgLy8KQEAgLTg3LDYgKzg2
LDE4IEBAIGlubGluZSBib29sIGlzSFRNTExpbmVCcmVhayhVQ2hhciBjaGFyYWN0ZXIpCiAgICAg
cmV0dXJuIGNoYXJhY3RlciA8PSAnXHInICYmIChjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0
ZXIgPT0gJ1xyJyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJv
b2wgaXNDb21tYShDaGFyVHlwZSBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnLCc7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNI
VE1MU3BhY2VPckNvbW1hKENoYXJUeXBlIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gaXNDb21t
YShjaGFyYWN0ZXIpIHx8IGlzSFRNTFNwYWNlPENoYXJUeXBlPihjaGFyYWN0ZXIpOworfQorCiBp
bmxpbmUgYm9vbCBpc05vdEhUTUxTcGFjZShVQ2hhciBjaGFyYWN0ZXIpCiB7CiAgICAgcmV0dXJu
ICFpc0hUTUxTcGFjZShjaGFyYWN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggYTRhM2ExNTI2YWFhNjQ0NzEzMGExMDM2
YjVmYmI5ZjhjMDc1MDUzZi4uOTNiN2E2N2I5NGE4NmNmNWYxMWMyMDk5NDMwMTliYzBiZjQzNGFl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2Fu
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5u
ZXIuY3BwCkBAIC0xMDUsOCArMTA1LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBSZXNvbHZl
IGJldHdlZW4gc3JjIGFuZCBzcmNTZXQgaWYgd2UgaGF2ZSB0aGVtLgogICAgICAgICBpZiAoIW1f
c3JjU2V0QXR0cmlidXRlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgSW1hZ2VXaXRoU2NhbGUg
aW1hZ2VDYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKG1fZGV2aWNl
U2NhbGVGYWN0b3IsIG1fdXJsVG9Mb2FkLCBtX3NyY1NldEF0dHJpYnV0ZSk7Ci0gICAgICAgICAg
ICBTdHJpbmcgc3JjTWF0Y2hpbmdTY2FsZSA9IGltYWdlQ2FuZGlkYXRlLmltYWdlVVJMKG1fdXJs
VG9Mb2FkLCBtX3NyY1NldEF0dHJpYnV0ZSk7CisgICAgICAgICAgICBJbWFnZUNhbmRpZGF0ZSBp
bWFnZUNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMobV9kZXZpY2VT
Y2FsZUZhY3RvciwKKyAgICAgICAgICAgICAgICBtX3VybFRvTG9hZCwKKyAgICAgICAgICAgICAg
ICBtX3NyY1NldEF0dHJpYnV0ZSk7CisgICAgICAgICAgICBTdHJpbmcgc3JjTWF0Y2hpbmdTY2Fs
ZSA9IGltYWdlQ2FuZGlkYXRlLnVybCgpOwogICAgICAgICAgICAgc2V0VXJsVG9Mb2FkKHNyY01h
dGNoaW5nU2NhbGUsIHRydWUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNyY3NldFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmNwcAppbmRleCA0MzQ3NDNlYjBmYzFjODc1
NDk5MTg4ZGQxNTUzOTAzN2M5NzQzMzA1Li5iMmVmNzM3NmI1ZjE1Y2M5N2Q0OTMxMjg2NjE0NWE0
Y2VkNjk2YmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Jj
c2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0
UGFyc2VyLmNwcApAQCAtMSwxNTggKzEsMjk4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTFNyY3NldFBhcnNl
ci5oIgogCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIlBhcnNpbmdV
dGlsaXRpZXMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxJbWFn
ZVdpdGhTY2FsZT4gSW1hZ2VDYW5kaWRhdGVzOworc3RhdGljIGJvb2wgY29tcGFyZUJ5RGVuc2l0
eShjb25zdCBJbWFnZUNhbmRpZGF0ZSYgZmlyc3QsIGNvbnN0IEltYWdlQ2FuZGlkYXRlJiBzZWNv
bmQpCit7CisgICAgcmV0dXJuIGZpcnN0LmRlbnNpdHkoKSA8IHNlY29uZC5kZW5zaXR5KCk7Cit9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQnlTY2FsZUZhY3Rvcihjb25zdCBJbWFnZVdp
dGhTY2FsZSYgZmlyc3QsIGNvbnN0IEltYWdlV2l0aFNjYWxlJiBzZWNvbmQpCitlbnVtIERlc2Ny
aXB0b3JUb2tlbml6ZXJTdGF0ZSB7CisgICAgU3RhcnQsCisgICAgSW5QYXJlbnRoZXNpcywKKyAg
ICBBZnRlclRva2VuLAorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CitzdGF0aWMg
dm9pZCBhcHBlbmREZXNjcmlwdG9yQW5kUmVzZXQoY29uc3QgQ2hhclR5cGUqJiBkZXNjcmlwdG9y
U3RhcnQsIGNvbnN0IENoYXJUeXBlKiBwb3NpdGlvbiwgVmVjdG9yPFN0cmluZ1ZpZXc+JiBkZXNj
cmlwdG9ycykKIHsKLSAgICByZXR1cm4gZmlyc3Quc2NhbGVGYWN0b3IoKSA8IHNlY29uZC5zY2Fs
ZUZhY3RvcigpOworICAgIGlmIChwb3NpdGlvbiA+IGRlc2NyaXB0b3JTdGFydCkKKyAgICAgICAg
ZGVzY3JpcHRvcnMuYXBwZW5kKFN0cmluZ1ZpZXcoZGVzY3JpcHRvclN0YXJ0LCBwb3NpdGlvbiAt
IGRlc2NyaXB0b3JTdGFydCkpOworICAgIGRlc2NyaXB0b3JTdGFydCA9IDA7CiB9CiAKLXN0YXRp
YyBib29sIHBhcnNlRGVzY3JpcHRvcnMoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIHNpemVfdCBz
dGFydCwgc2l6ZV90IGVuZCwgZmxvYXQmIGltYWdlU2NhbGVGYWN0b3IpCisvLyBUaGUgZm9sbG93
aW5nIGlzIGNhbGxlZCBhcHBlbmRDaGFyYWN0ZXIgdG8gbWF0Y2ggdGhlIHNwZWMncyB0ZXJtaW5v
bG9neS4KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIHZvaWQgYXBwZW5kQ2hh
cmFjdGVyKGNvbnN0IENoYXJUeXBlKiBkZXNjcmlwdG9yU3RhcnQsIGNvbnN0IENoYXJUeXBlKiBw
b3NpdGlvbikKIHsKLSAgICBzaXplX3QgZGVzY3JpcHRvclN0YXJ0OwotICAgIHNpemVfdCBkZXNj
cmlwdG9yRW5kOwotICAgIHNpemVfdCBwb3NpdGlvbiA9IHN0YXJ0OwotICAgIGJvb2wgaXNGb3Vu
ZFNjYWxlRmFjdG9yID0gZmFsc2U7Ci0gICAgYm9vbCBpc0VtcHR5RGVzY3JpcHRvciA9ICEoZW5k
ID4gc3RhcnQpOwotICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOwotCi0gICAgd2hpbGUgKHBvc2l0
aW9uIDwgZW5kKSB7Ci0gICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShhdHRyaWJ1dGVbcG9zaXRp
b25dKSAmJiBwb3NpdGlvbiA8IGVuZCkKLSAgICAgICAgICAgICsrcG9zaXRpb247CisgICAgLy8g
U2luY2Ugd2UgZG9uJ3QgY29weSB0aGUgdG9rZW5zLCB0aGlzIGp1c3Qgc2V0IHRoZSBwb2ludCB3
aGVyZSB0aGUgZGVzY3JpcHRvciB0b2tlbnMgc3RhcnQuCisgICAgaWYgKCFkZXNjcmlwdG9yU3Rh
cnQpCiAgICAgICAgIGRlc2NyaXB0b3JTdGFydCA9IHBvc2l0aW9uOwotICAgICAgICB3aGlsZSAo
aXNOb3RIVE1MU3BhY2UoYXR0cmlidXRlW3Bvc2l0aW9uXSkgJiYgcG9zaXRpb24gPCBlbmQpCi0g
ICAgICAgICAgICArK3Bvc2l0aW9uOwotICAgICAgICBkZXNjcmlwdG9yRW5kID0gcG9zaXRpb247
Ci0KLSAgICAgICAgLy8gTGVhdmUgaWYgdGhlcmUgaXMgb25seSB3aGl0ZXNwYWNlIGF0IHRoZSBl
bmQgb2YgdGhlIGRlc2NyaXB0b3JzCi0gICAgICAgIGlmIChkZXNjcmlwdG9yRW5kIDw9IGRlc2Ny
aXB0b3JTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC0tZGVzY3JpcHRvckVu
ZDsKLSAgICAgICAgLy8gVGhpcyBwYXJ0IGRpZmZlcnMgZnJvbSB0aGUgc3BlYyBhcyB0aGUgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRv
cnMuCi0gICAgICAgIGlmIChhdHRyaWJ1dGVbZGVzY3JpcHRvckVuZF0gIT0gJ3gnKQotICAgICAg
ICAgICAgY29udGludWU7Cit9CiAKLSAgICAgICAgaWYgKGlzRm91bmRTY2FsZUZhY3RvcikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3Rh
dGljIGJvb2wgaXNFT0YoY29uc3QgQ2hhclR5cGUqIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSog
ZW5kKQoreworICAgIHJldHVybiBwb3NpdGlvbiA+PSBlbmQ7Cit9CiAKLSAgICAgICAgaWYgKGF0
dHJpYnV0ZS5pczhCaXQoKSkKLSAgICAgICAgICAgIGltYWdlU2NhbGVGYWN0b3IgPSBjaGFyYWN0
ZXJzVG9GbG9hdChhdHRyaWJ1dGUuY2hhcmFjdGVyczgoKSArIGRlc2NyaXB0b3JTdGFydCwgZGVz
Y3JpcHRvckVuZCAtIGRlc2NyaXB0b3JTdGFydCwgJmlzVmFsaWQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBpbWFnZVNjYWxlRmFjdG9yID0gY2hhcmFjdGVyc1RvRmxvYXQoYXR0cmlidXRl
LmNoYXJhY3RlcnMxNigpICsgZGVzY3JpcHRvclN0YXJ0LCBkZXNjcmlwdG9yRW5kIC0gZGVzY3Jp
cHRvclN0YXJ0LCAmaXNWYWxpZCk7Ci0gICAgICAgIGlzRm91bmRTY2FsZUZhY3RvciA9IHRydWU7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyB2b2lkIHRva2VuaXplRGVzY3Jp
cHRvcnMoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwKKyAgICBjb25zdCBDaGFyVHlwZSogYXR0
cmlidXRlRW5kLAorICAgIFZlY3RvcjxTdHJpbmdWaWV3PiYgZGVzY3JpcHRvcnMpCit7CisgICAg
RGVzY3JpcHRvclRva2VuaXplclN0YXRlIHN0YXRlID0gU3RhcnQ7CisgICAgY29uc3QgQ2hhclR5
cGUqIGRlc2NyaXB0b3JzU3RhcnQgPSBwb3NpdGlvbjsKKyAgICBjb25zdCBDaGFyVHlwZSogY3Vy
cmVudERlc2NyaXB0b3JTdGFydCA9IGRlc2NyaXB0b3JzU3RhcnQ7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIFN0YXJ0OgorICAgICAg
ICAgICAgaWYgKGlzRU9GKHBvc2l0aW9uLCBhdHRyaWJ1dGVFbmQpKSB7CisgICAgICAgICAgICAg
ICAgYXBwZW5kRGVzY3JpcHRvckFuZFJlc2V0KGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIGF0dHJp
YnV0ZUVuZCwgZGVzY3JpcHRvcnMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChpc0NvbW1hKCpwb3NpdGlvbikpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmREZXNjcmlwdG9yQW5kUmVzZXQoY3VycmVudERlc2NyaXB0b3JTdGFydCwgcG9z
aXRpb24sIGRlc2NyaXB0b3JzKTsKKyAgICAgICAgICAgICAgICArK3Bvc2l0aW9uOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0hUTUxT
cGFjZSgqcG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kRGVzY3JpcHRvckFuZFJl
c2V0KGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIHBvc2l0aW9uLCBkZXNjcmlwdG9ycyk7CisgICAg
ICAgICAgICAgICAgY3VycmVudERlc2NyaXB0b3JTdGFydCA9IHBvc2l0aW9uICsgMTsKKyAgICAg
ICAgICAgICAgICBzdGF0ZSA9IEFmdGVyVG9rZW47CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpw
b3NpdGlvbiA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoY3VycmVu
dERlc2NyaXB0b3JTdGFydCwgcG9zaXRpb24pOworICAgICAgICAgICAgICAgIHN0YXRlID0gSW5Q
YXJlbnRoZXNpczsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZENo
YXJhY3RlcihjdXJyZW50RGVzY3JpcHRvclN0YXJ0LCBwb3NpdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJblBhcmVudGhlc2lzOgorICAgICAgICAgICAgaWYgKGlzRU9G
KHBvc2l0aW9uLCBhdHRyaWJ1dGVFbmQpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kRGVzY3Jp
cHRvckFuZFJlc2V0KGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIGF0dHJpYnV0ZUVuZCwgZGVzY3Jp
cHRvcnMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICgqcG9zaXRpb24gPT0gJyknKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kQ2hhcmFj
dGVyKGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXJ0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5k
Q2hhcmFjdGVyKGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIHBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFmdGVyVG9rZW46CisgICAgICAgICAgICBpZiAoaXNFT0Yo
cG9zaXRpb24sIGF0dHJpYnV0ZUVuZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgaWYgKCFpc0hUTUxTcGFjZSgqcG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAgc3Rh
dGUgPSBTdGFydDsKKyAgICAgICAgICAgICAgICBjdXJyZW50RGVzY3JpcHRvclN0YXJ0ID0gcG9z
aXRpb247CisgICAgICAgICAgICAgICAgLS1wb3NpdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICsrcG9zaXRpb247CiAgICAgfQorfQog
Ci0gICAgcmV0dXJuIGlzRW1wdHlEZXNjcmlwdG9yIHx8IGlzVmFsaWQ7CitzdGF0aWMgZmxvYXQg
c3RyaW5nVmlld1RvRmxvYXQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nLCBib29sJiBpc1ZhbGlk
KQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJz
VG9GbG9hdChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpIC0gMSwgJmlzVmFs
aWQpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChzdHJpbmcuY2hhcmFjdGVyczE2KCks
IHN0cmluZy5sZW5ndGgoKSAtIDEsICZpc1ZhbGlkKTsKIH0KIAotLy8gU2VlIHRoZSBzcGVjaWZp
Y2F0aW9ucyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBhbGdvcml0aG0gdG8gZm9sbG93Lgot
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1odG1sLXNyY3NldC0yMDEzMDIyOC8jcHJv
Y2Vzc2luZy10aGUtaW1hZ2UtY2FuZGlkYXRlcy4KLXN0YXRpYyB2b2lkIHBhcnNlSW1hZ2VzV2l0
aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNyY3NldEF0dHJpYnV0ZSwg
SW1hZ2VDYW5kaWRhdGVzJiBpbWFnZUNhbmRpZGF0ZXMpCitzdGF0aWMgaW50IHN0cmluZ1ZpZXdU
b0ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcsIGJvb2wmIGlzVmFsaWQpCiB7Ci0gICAgQVNT
RVJUKGltYWdlQ2FuZGlkYXRlcy5pc0VtcHR5KCkpOworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0
cmluZy5sZW5ndGgoKSAtIDEsICZpc1ZhbGlkKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50
KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpIC0gMSwgJmlzVmFsaWQpOwor
fQogCi0gICAgc2l6ZV90IGltYWdlQ2FuZGlkYXRlU3RhcnQgPSAwOwotICAgIHVuc2lnbmVkIHNy
Y3NldEF0dHJpYnV0ZUxlbmd0aCA9IHNyY3NldEF0dHJpYnV0ZS5sZW5ndGgoKTsKK3N0YXRpYyBi
b29sIHBhcnNlRGVzY3JpcHRvcnMoVmVjdG9yPFN0cmluZ1ZpZXc+JiBkZXNjcmlwdG9ycywgRGVz
Y3JpcHRvclBhcnNpbmdSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmdW
aWV3Pjo6aXRlcmF0b3IgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzLmJlZ2luKCk7IGRlc2NyaXB0
b3IgIT0gZGVzY3JpcHRvcnMuZW5kKCk7ICsrZGVzY3JpcHRvcikgeworICAgICAgICBpZiAoIWRl
c2NyaXB0b3ItPmxlbmd0aCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFVDaGFy
IGMgPSAoKmRlc2NyaXB0b3IpW2Rlc2NyaXB0b3ItPmxlbmd0aCgpIC0gMV07CisgICAgICAgIGJv
b2wgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBpZiAoYyA9PSAneCcpIHsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQuaGFzRGVuc2l0eSgpIHx8IHJlc3VsdC5oYXNIZWlnaHQoKSB8fCByZXN1bHQu
aGFzV2lkdGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBm
bG9hdCBkZW5zaXR5ID0gc3RyaW5nVmlld1RvRmxvYXQoKmRlc2NyaXB0b3IsIGlzVmFsaWQpOwor
ICAgICAgICAgICAgaWYgKCFpc1ZhbGlkIHx8IGRlbnNpdHkgPCAwKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXREZW5zaXR5KGRlbnNpdHkpOwor
ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ3cnKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhh
c0RlbnNpdHkoKSB8fCByZXN1bHQuaGFzV2lkdGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpbnQgcmVzb3VyY2VXaWR0aCA9IHN0cmluZ1ZpZXdUb0ludCgq
ZGVzY3JpcHRvciwgaXNWYWxpZCk7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQgfHwgcmVzb3Vy
Y2VXaWR0aCA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBl
bHNlIGlmIChjID09ICdoJykgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBoZXJlIG9ubHkgZm9y
IGZ1dHVyZSBjb21wYXQgcHVycG9zZXMuCisgICAgICAgICAgICAvLyBUaGUgdmFsdWUgb2YgdGhl
ICdoJyBkZXNjcmlwdG9yIGlzIG5vdCB1c2VkLgorICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNE
ZW5zaXR5KCkgfHwgcmVzdWx0Lmhhc0hlaWdodCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGludCByZXNvdXJjZUhlaWdodCA9IHN0cmluZ1ZpZXdUb0ludCgq
ZGVzY3JpcHRvciwgaXNWYWxpZCk7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQgfHwgcmVzb3Vy
Y2VIZWlnaHQgPD0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXN1bHQuc2V0UmVzb3VyY2VIZWlnaHQocmVzb3VyY2VIZWlnaHQpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQogCi0gICAgd2hpbGUgKGltYWdlQ2FuZGlkYXRlU3Rh
cnQgPCBzcmNzZXRBdHRyaWJ1dGVMZW5ndGgpIHsKLSAgICAgICAgZmxvYXQgaW1hZ2VTY2FsZUZh
Y3RvciA9IDE7Ci0gICAgICAgIHNpemVfdCBzZXBhcmF0b3I7CisvLyBodHRwOi8vcGljdHVyZS5y
ZXNwb25zaXZlaW1hZ2VzLm9yZy8jcGFyc2Utc3Jjc2V0LWF0dHIKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJUeXBlPgorc3RhdGljIHZvaWQgcGFyc2VJbWFnZUNhbmRpZGF0ZXNGcm9tU3Jjc2V0QXR0
cmlidXRlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBjb25zdCBDaGFyVHlwZSogYXR0cmlidXRl
U3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgVmVjdG9yPEltYWdlQ2FuZGlkYXRlPiYgaW1hZ2VDYW5k
aWRhdGVzKQoreworICAgIGNvbnN0IENoYXJUeXBlKiBwb3NpdGlvbiA9IGF0dHJpYnV0ZVN0YXJ0
OworICAgIGNvbnN0IENoYXJUeXBlKiBhdHRyaWJ1dGVFbmQgPSBwb3NpdGlvbiArIGxlbmd0aDsK
IAotICAgICAgICAvLyA0LiBTcGxpdHRpbmcgbG9vcDogU2tpcCB3aGl0ZXNwYWNlLgotICAgICAg
ICBzaXplX3QgaW1hZ2VVUkxTdGFydCA9IHNyY3NldEF0dHJpYnV0ZS5maW5kKGlzTm90SFRNTFNw
YWNlLCBpbWFnZUNhbmRpZGF0ZVN0YXJ0KTsKLSAgICAgICAgaWYgKGltYWdlVVJMU3RhcnQgPT0g
bm90Rm91bmQpCisgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXR0cmlidXRlRW5kKSB7CisgICAgICAg
IC8vIDQuIFNwbGl0dGluZyBsb29wOiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0
aGF0IGFyZSBzcGFjZSBjaGFyYWN0ZXJzIG9yIFUrMDAyQyBDT01NQSBjaGFyYWN0ZXJzLgorICAg
ICAgICBza2lwV2hpbGU8Q2hhclR5cGUsIGlzSFRNTFNwYWNlT3JDb21tYTxDaGFyVHlwZT4gPihw
b3NpdGlvbiwgYXR0cmlidXRlRW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IGF0dHJpYnV0
ZUVuZCkgeworICAgICAgICAgICAgLy8gQ29udHJhcnkgdG8gc3BlYyBsYW5ndWFnZSAtIGRlc2Ny
aXB0b3IgcGFyc2luZyBoYXBwZW5zIG9uIGVhY2ggY2FuZGlkYXRlLCBzbyB3aGVuIHdlIHJlYWNo
IHRoZSBhdHRyaWJ1dGVFbmQsIHdlIGNhbiBleGl0LgogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIC8vIElmIFRoZSBjdXJyZW50IGNhbmRpZGF0ZSBpcyBlaXRoZXIgdG90YWxseSBlbXB0eSBv
ciBvbmx5IGNvbnRhaW5zIHNwYWNlLCBza2lwcGluZy4KLSAgICAgICAgaWYgKHNyY3NldEF0dHJp
YnV0ZVtpbWFnZVVSTFN0YXJ0XSA9PSAnLCcpIHsKLSAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRl
U3RhcnQgPSBpbWFnZVVSTFN0YXJ0ICsgMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9Ci0gICAgICAgIC8vIDUuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQg
YXJlIG5vdCBzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgbGV0IHRoYXQgYmUgdXJsLgotICAgICAgICBz
aXplX3QgaW1hZ2VVUkxFbmQgPSBzcmNzZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZSwgaW1h
Z2VVUkxTdGFydCArIDEpOwotICAgICAgICBpZiAoaW1hZ2VVUkxFbmQgPT0gbm90Rm91bmQpIHsK
LSAgICAgICAgICAgIGltYWdlVVJMRW5kID0gc3Jjc2V0QXR0cmlidXRlTGVuZ3RoOwotICAgICAg
ICAgICAgc2VwYXJhdG9yID0gc3Jjc2V0QXR0cmlidXRlTGVuZ3RoOwotICAgICAgICB9IGVsc2Ug
aWYgKHNyY3NldEF0dHJpYnV0ZVtpbWFnZVVSTEVuZCAtIDFdID09ICcsJykgewotICAgICAgICAg
ICAgLS1pbWFnZVVSTEVuZDsKLSAgICAgICAgICAgIHNlcGFyYXRvciA9IGltYWdlVVJMRW5kOwor
ICAgICAgICBjb25zdCBDaGFyVHlwZSogaW1hZ2VVUkxTdGFydCA9IHBvc2l0aW9uOworICAgICAg
ICAvLyA2LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc3Bh
Y2UgY2hhcmFjdGVycywgYW5kIGxldCB0aGF0IGJlIHVybC4KKworICAgICAgICBza2lwVW50aWw8
Q2hhclR5cGUsIGlzSFRNTFNwYWNlPENoYXJUeXBlPiA+KHBvc2l0aW9uLCBhdHRyaWJ1dGVFbmQp
OworICAgICAgICBjb25zdCBDaGFyVHlwZSogaW1hZ2VVUkxFbmQgPSBwb3NpdGlvbjsKKworICAg
ICAgICBEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAgICAgICAgLy8gOC4gSWYg
dXJsIGVuZHMgd2l0aCBhIFUrMDAyQyBDT01NQSBjaGFyYWN0ZXIgKCwpCisgICAgICAgIGlmIChp
c0NvbW1hKCoocG9zaXRpb24gLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgdHJh
aWxpbmcgVSswMDJDIENPTU1BIGNoYXJhY3RlcnMgZnJvbSB1cmwuCisgICAgICAgICAgICBpbWFn
ZVVSTEVuZCA9IHBvc2l0aW9uIC0gMTsKKyAgICAgICAgICAgIHJldmVyc2VTa2lwV2hpbGU8Q2hh
clR5cGUsIGlzQ29tbWE+KGltYWdlVVJMRW5kLCBpbWFnZVVSTFN0YXJ0KTsKKyAgICAgICAgICAg
ICsraW1hZ2VVUkxFbmQ7CisgICAgICAgICAgICAvLyBJZiB1cmwgaXMgZW1wdHksIHRoZW4ganVt
cCB0byB0aGUgc3RlcCBsYWJlbGVkIHNwbGl0dGluZyBsb29wLgorICAgICAgICAgICAgaWYgKGlt
YWdlVVJMU3RhcnQgPT0gaW1hZ2VVUkxFbmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyA3LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2Yg
Y2hhcmFjdGVycyB0aGF0IGFyZSBub3QgIiwiIChVKzAwMkMpIGNoYXJhY3RlcnMsIGFuZCBsZXQg
dGhhdCBiZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgICAgIHNpemVfdCBpbWFnZVNjYWxlU3RhcnQg
PSBzcmNzZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VVUkxFbmQgKyAxKTsK
LSAgICAgICAgICAgIGltYWdlU2NhbGVTdGFydCA9IChpbWFnZVNjYWxlU3RhcnQgPT0gbm90Rm91
bmQpID8gc3Jjc2V0QXR0cmlidXRlTGVuZ3RoIDogaW1hZ2VTY2FsZVN0YXJ0OwotICAgICAgICAg
ICAgc2l6ZV90IGltYWdlU2NhbGVFbmQgPSBzcmNzZXRBdHRyaWJ1dGUuZmluZCgnLCcgLCBpbWFn
ZVNjYWxlU3RhcnQgKyAxKTsKLSAgICAgICAgICAgIGltYWdlU2NhbGVFbmQgPSAoaW1hZ2VTY2Fs
ZUVuZCA9PSBub3RGb3VuZCkgPyBzcmNzZXRBdHRyaWJ1dGVMZW5ndGggOiBpbWFnZVNjYWxlRW5k
OwotCi0gICAgICAgICAgICBpZiAoIXBhcnNlRGVzY3JpcHRvcnMoc3Jjc2V0QXR0cmlidXRlLCBp
bWFnZVNjYWxlU3RhcnQsIGltYWdlU2NhbGVFbmQsIGltYWdlU2NhbGVGYWN0b3IpKSB7Ci0gICAg
ICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IGltYWdlU2NhbGVFbmQgKyAxOworICAg
ICAgICAgICAgLy8gQWR2YW5jaW5nIHBvc2l0aW9uIGhlcmUgKGNvbnRyYXJ5IHRvIHNwZWMpIHRv
IGF2b2lkIGFuIHVzZWxlc3MgZXh0cmEgc3RhdGUgbWFjaGluZSBzdGVwLgorICAgICAgICAgICAg
Ly8gRmlsZWQgYSBzcGVjIGJ1ZzogaHR0cHM6Ly9naXRodWIuY29tL1Jlc3BvbnNpdmVJbWFnZXND
Ry9waWN0dXJlLWVsZW1lbnQvaXNzdWVzLzE4OQorICAgICAgICAgICAgKytwb3NpdGlvbjsKKyAg
ICAgICAgICAgIFZlY3RvcjxTdHJpbmdWaWV3PiBkZXNjcmlwdG9yVG9rZW5zOworICAgICAgICAg
ICAgdG9rZW5pemVEZXNjcmlwdG9ycyhwb3NpdGlvbiwgYXR0cmlidXRlRW5kLCBkZXNjcmlwdG9y
VG9rZW5zKTsKKyAgICAgICAgICAgIC8vIENvbnRyYXJ5IHRvIHNwZWMgbGFuZ3VhZ2UgLSBkZXNj
cmlwdG9yIHBhcnNpbmcgaGFwcGVucyBvbiBlYWNoIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSBibGFjay1ib3ggZXF1aXZhbGVudCwgdG8gYXZvaWQgc3RvcmluZyBkZXNjcmlw
dG9yIGxpc3RzIGZvciBlYWNoIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIGlmICghcGFyc2VEZXNj
cmlwdG9ycyhkZXNjcmlwdG9yVG9rZW5zLCByZXN1bHQpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VwYXJhdG9yID0gaW1hZ2VTY2FsZUVu
ZDsKICAgICAgICAgfQotICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZShpbWFnZVVSTFN0YXJ0
LCBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3RhcnQsIGltYWdlU2NhbGVGYWN0b3IpOwotICAgICAg
ICBpbWFnZUNhbmRpZGF0ZXMuYXBwZW5kKGltYWdlKTsKKworICAgICAgICBBU1NFUlQoaW1hZ2VV
UkxFbmQgPiBhdHRyaWJ1dGVTdGFydCk7CisgICAgICAgIHVuc2lnbmVkIGltYWdlVVJMU3RhcnRp
bmdQb3NpdGlvbiA9IGltYWdlVVJMU3RhcnQgLSBhdHRyaWJ1dGVTdGFydDsKKyAgICAgICAgQVNT
RVJUKGltYWdlVVJMRW5kID4gaW1hZ2VVUkxTdGFydCk7CisgICAgICAgIHVuc2lnbmVkIGltYWdl
VVJMTGVuZ3RoID0gaW1hZ2VVUkxFbmQgLSBpbWFnZVVSTFN0YXJ0OworICAgICAgICBpbWFnZUNh
bmRpZGF0ZXMuYXBwZW5kKEltYWdlQ2FuZGlkYXRlKGF0dHJpYnV0ZSwgaW1hZ2VVUkxTdGFydGlu
Z1Bvc2l0aW9uLCBpbWFnZVVSTExlbmd0aCwgcmVzdWx0LCBJbWFnZUNhbmRpZGF0ZTo6U3Jjc2V0
T3JpZ2luKSk7CiAgICAgICAgIC8vIDExLiBSZXR1cm4gdG8gdGhlIHN0ZXAgbGFiZWxlZCBzcGxp
dHRpbmcgbG9vcC4KLSAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7
CiAgICAgfQogfQogCi1JbWFnZVdpdGhTY2FsZSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1
dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwg
Y29uc3QgU3RyaW5nJiBzcmNzZXRBdHRyaWJ1dGUpCitzdGF0aWMgdm9pZCBwYXJzZUltYWdlQ2Fu
ZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIFZlY3Rv
cjxJbWFnZUNhbmRpZGF0ZT4mIGltYWdlQ2FuZGlkYXRlcykKIHsKLSAgICBJbWFnZUNhbmRpZGF0
ZXMgaW1hZ2VDYW5kaWRhdGVzOworICAgIGlmIChhdHRyaWJ1dGUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybjsKIAotICAgIHBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZShz
cmNzZXRBdHRyaWJ1dGUsIGltYWdlQ2FuZGlkYXRlcyk7CisgICAgaWYgKGF0dHJpYnV0ZS5pczhC
aXQoKSkKKyAgICAgICAgcGFyc2VJbWFnZUNhbmRpZGF0ZXNGcm9tU3Jjc2V0QXR0cmlidXRlPExD
aGFyPihhdHRyaWJ1dGUsIGF0dHJpYnV0ZS5jaGFyYWN0ZXJzOCgpLCBhdHRyaWJ1dGUubGVuZ3Ro
KCksIGltYWdlQ2FuZGlkYXRlcyk7CisgICAgZWxzZQorICAgICAgICBwYXJzZUltYWdlQ2FuZGlk
YXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGU8VUNoYXI+KGF0dHJpYnV0ZSwgYXR0cmlidXRlLmNoYXJh
Y3RlcnMxNigpLCBhdHRyaWJ1dGUubGVuZ3RoKCksIGltYWdlQ2FuZGlkYXRlcyk7Cit9CiAKLSAg
ICBpZiAoIXNyY0F0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgSW1hZ2VXaXRoU2NhbGUg
c3JjUGxhY2Vob2xkZXJJbWFnZTsKLSAgICAgICAgaW1hZ2VDYW5kaWRhdGVzLmFwcGVuZChzcmNQ
bGFjZWhvbGRlckltYWdlKTsKK3N0YXRpYyBJbWFnZUNhbmRpZGF0ZSBwaWNrQmVzdEltYWdlQ2Fu
ZGlkYXRlKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLAorICAgIFZlY3RvcjxJbWFnZUNhbmRpZGF0
ZT4mIGltYWdlQ2FuZGlkYXRlcykKK3sKKyAgICBjb25zdCBmbG9hdCBkZWZhdWx0RGVuc2l0eVZh
bHVlID0gMS4wOworICAgIGJvb2wgaWdub3JlU3JjID0gZmFsc2U7CisgICAgaWYgKGltYWdlQ2Fu
ZGlkYXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbWFnZUNhbmRpZGF0ZSgpOworCisg
ICAgLy8gaHR0cDovL3BpY3R1cmUucmVzcG9uc2l2ZWltYWdlcy5vcmcvI25vcm1hbGl6ZS1zb3Vy
Y2UtZGVuc2l0aWVzCisgICAgZm9yIChWZWN0b3I8SW1hZ2VDYW5kaWRhdGU+OjppdGVyYXRvciBp
dCA9IGltYWdlQ2FuZGlkYXRlcy5iZWdpbigpOyBpdCAhPSBpbWFnZUNhbmRpZGF0ZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5kZW5zaXR5KCkgPCAwKQorICAgICAgICAgICAgaXQt
PnNldERlbnNpdHkoZGVmYXVsdERlbnNpdHlWYWx1ZSk7CiAgICAgfQogCi0gICAgaWYgKGltYWdl
Q2FuZGlkYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbWFnZVdpdGhTY2FsZSgpOwor
ICAgIHN0ZDo6c3RhYmxlX3NvcnQoaW1hZ2VDYW5kaWRhdGVzLmJlZ2luKCksIGltYWdlQ2FuZGlk
YXRlcy5lbmQoKSwgY29tcGFyZUJ5RGVuc2l0eSk7CiAKLSAgICBzdGQ6OnN0YWJsZV9zb3J0KGlt
YWdlQ2FuZGlkYXRlcy5iZWdpbigpLCBpbWFnZUNhbmRpZGF0ZXMuZW5kKCksIGNvbXBhcmVCeVNj
YWxlRmFjdG9yKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBpbWFnZUNh
bmRpZGF0ZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGlmICgoaW1hZ2VDYW5kaWRhdGVz
W2ldLmRlbnNpdHkoKSA+PSBkZXZpY2VTY2FsZUZhY3RvcikgJiYgKCFpZ25vcmVTcmMgfHwgIWlt
YWdlQ2FuZGlkYXRlc1tpXS5zcmNPcmlnaW4oKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltYWdlQ2FuZGlkYXRlcy5zaXplKCkgLSAx
OyArK2kpIHsKLSAgICAgICAgaWYgKGltYWdlQ2FuZGlkYXRlc1tpXS5zY2FsZUZhY3RvcigpID49
IGRldmljZVNjYWxlRmFjdG9yKQotICAgICAgICAgICAgcmV0dXJuIGltYWdlQ2FuZGlkYXRlc1tp
XTsKKyAgICBpZiAoaW1hZ2VDYW5kaWRhdGVzW2ldLnNyY09yaWdpbigpICYmIGlnbm9yZVNyYykg
eworICAgICAgICBBU1NFUlQoaSA+IDApOworICAgICAgICAtLWk7CiAgICAgfQorICAgIGZsb2F0
IHdpbm5pbmdEZW5zaXR5ID0gaW1hZ2VDYW5kaWRhdGVzW2ldLmRlbnNpdHkoKTsKIAorICAgIHVu
c2lnbmVkIHdpbm5lciA9IGk7CiAgICAgLy8gMTYuIElmIGFuIGVudHJ5IGIgaW4gY2FuZGlkYXRl
cyBoYXMgdGhlIHNhbWUgYXNzb2NpYXRlZCAuLi4gcGl4ZWwgZGVuc2l0eSBhcyBhbiBlYXJsaWVy
IGVudHJ5IGEgaW4gY2FuZGlkYXRlcywKICAgICAvLyB0aGVuIHJlbW92ZSBlbnRyeSBiCi0gICAg
c2l6ZV90IHdpbm5lciA9IGltYWdlQ2FuZGlkYXRlcy5zaXplKCkgLSAxOwotICAgIHNpemVfdCBw
cmV2aW91c0NhbmRpZGF0ZSA9IHdpbm5lcjsKLSAgICBmbG9hdCB3aW5uaW5nU2NhbGVGYWN0b3Ig
PSBpbWFnZUNhbmRpZGF0ZXMubGFzdCgpLnNjYWxlRmFjdG9yKCk7Ci0gICAgd2hpbGUgKChwcmV2
aW91c0NhbmRpZGF0ZSA+IDApICYmIChpbWFnZUNhbmRpZGF0ZXNbLS1wcmV2aW91c0NhbmRpZGF0
ZV0uc2NhbGVGYWN0b3IoKSA9PSB3aW5uaW5nU2NhbGVGYWN0b3IpKQotICAgICAgICB3aW5uZXIg
PSBwcmV2aW91c0NhbmRpZGF0ZTsKKyAgICB3aGlsZSAoKGkgPiAwKSAmJiAoaW1hZ2VDYW5kaWRh
dGVzWy0taV0uZGVuc2l0eSgpID09IHdpbm5pbmdEZW5zaXR5KSkKKyAgICAgICAgd2lubmVyID0g
aTsKIAogICAgIHJldHVybiBpbWFnZUNhbmRpZGF0ZXNbd2lubmVyXTsKIH0KIAorSW1hZ2VDYW5k
aWRhdGUgYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwKKyAgICBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwKKyAgICBjb25zdCBTdHJpbmcm
IHNyY3NldEF0dHJpYnV0ZSkKK3sKKyAgICBpZiAoc3Jjc2V0QXR0cmlidXRlLmlzTnVsbCgpKSB7
CisgICAgICAgIGlmIChzcmNBdHRyaWJ1dGUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
SW1hZ2VDYW5kaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuIEltYWdlQ2FuZGlkYXRlKHNyY0F0dHJp
YnV0ZSwgMCwgc3JjQXR0cmlidXRlLmxlbmd0aCgpLCBEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdCgp
LCBJbWFnZUNhbmRpZGF0ZTo6U3JjT3JpZ2luKTsKKyAgICB9CisKKyAgICBWZWN0b3I8SW1hZ2VD
YW5kaWRhdGU+IGltYWdlQ2FuZGlkYXRlczsKKworICAgIHBhcnNlSW1hZ2VDYW5kaWRhdGVzRnJv
bVNyY3NldEF0dHJpYnV0ZShzcmNzZXRBdHRyaWJ1dGUsIGltYWdlQ2FuZGlkYXRlcyk7CisKKyAg
ICBpZiAoIXNyY0F0dHJpYnV0ZS5pc0VtcHR5KCkpCisgICAgICAgIGltYWdlQ2FuZGlkYXRlcy5h
cHBlbmQoSW1hZ2VDYW5kaWRhdGUoc3JjQXR0cmlidXRlLCAwLCBzcmNBdHRyaWJ1dGUubGVuZ3Ro
KCksIERlc2NyaXB0b3JQYXJzaW5nUmVzdWx0KCksIEltYWdlQ2FuZGlkYXRlOjpTcmNPcmlnaW4p
KTsKKworICAgIHJldHVybiBwaWNrQmVzdEltYWdlQ2FuZGlkYXRlKGRldmljZVNjYWxlRmFjdG9y
LAorICAgICAgICBpbWFnZUNhbmRpZGF0ZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmgKaW5kZXgg
MzQ1OGI1OTZlMjg0OTcwMzAzZGM5YmRjZDdiZmEwMzQ5Y2NiYTE4Ny4uMzdkNzVjYTk5Y2UwMjZk
ZDc4ZGExZmZkY2RjMzgyMjEyMTI5NDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNyY3NldFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTcmNzZXRQYXJzZXIuaApAQCAtMSw3MyArMSwxMzYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSFRNTFNyY3NldFBhcnNlcl9oCiAjZGVmaW5l
IEhUTUxTcmNzZXRQYXJzZXJfaAogCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEltYWdlV2l0aFNjYWxlIHsKK2NvbnN0IGludCBVbmluaXRpYWxpemVkRGVzY3JpcHRv
ciA9IC0xOworCitjbGFzcyBEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdCB7CiBwdWJsaWM6Ci0gICAg
SW1hZ2VXaXRoU2NhbGUoKQotICAgICAgICA6IG1faW1hZ2VVUkxTdGFydCgwKQotICAgICAgICAs
IG1faW1hZ2VVUkxMZW5ndGgoMCkKLSAgICAgICAgLCBtX3NjYWxlRmFjdG9yKDEpCisgICAgRGVz
Y3JpcHRvclBhcnNpbmdSZXN1bHQoKQorICAgICAgICA6IG1fZGVuc2l0eShVbmluaXRpYWxpemVk
RGVzY3JpcHRvcikKKyAgICAgICAgLCBtX3Jlc291cmNlV2lkdGgoVW5pbml0aWFsaXplZERlc2Ny
aXB0b3IpCisgICAgICAgICwgbV9yZXNvdXJjZUhlaWdodChVbmluaXRpYWxpemVkRGVzY3JpcHRv
cikKICAgICB7CiAgICAgfQogCi0gICAgSW1hZ2VXaXRoU2NhbGUodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGxlbmd0aCwgZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgICAgIDogbV9pbWFnZVVSTFN0
YXJ0KHN0YXJ0KQotICAgICAgICAsIG1faW1hZ2VVUkxMZW5ndGgobGVuZ3RoKQotICAgICAgICAs
IG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCisgICAgYm9vbCBoYXNEZW5zaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9kZW5zaXR5ID49IDA7IH0KKyAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvdXJjZVdpZHRoID49IDA7IH0KKyAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb3VyY2VIZWlnaHQgPj0gMDsgfQorCisgICAgZmxvYXQgZGVuc2l0eSgp
IGNvbnN0IHsgQVNTRVJUKGhhc0RlbnNpdHkoKSk7IHJldHVybiBtX2RlbnNpdHk7IH0KKyAgICB1
bnNpZ25lZCByZXNvdXJjZVdpZHRoKCkgY29uc3QgeyBBU1NFUlQoaGFzV2lkdGgoKSk7IHJldHVy
biBtX3Jlc291cmNlV2lkdGg7IH0KKyAgICB1bnNpZ25lZCByZXNvdXJjZUhlaWdodCgpIGNvbnN0
IHsgQVNTRVJUKGhhc0hlaWdodCgpKTsgcmV0dXJuIG1fcmVzb3VyY2VIZWlnaHQ7IH0KKworICAg
IHZvaWQgc2V0UmVzb3VyY2VXaWR0aChpbnQgd2lkdGgpIHsgQVNTRVJUKHdpZHRoID49IDApOyBt
X3Jlc291cmNlV2lkdGggPSAodW5zaWduZWQpd2lkdGg7IH0KKyAgICB2b2lkIHNldFJlc291cmNl
SGVpZ2h0KGludCBoZWlnaHQpIHsgQVNTRVJUKGhlaWdodCA+PSAwKTsgbV9yZXNvdXJjZUhlaWdo
dCA9ICh1bnNpZ25lZCloZWlnaHQ7IH0KKyAgICB2b2lkIHNldERlbnNpdHkoZmxvYXQgZGVuc2l0
eVRvU2V0KSB7IEFTU0VSVChkZW5zaXR5VG9TZXQgPj0gMCk7IG1fZGVuc2l0eSA9IGRlbnNpdHlU
b1NldDsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IG1fZGVuc2l0eTsKKyAgICBpbnQgbV9yZXNv
dXJjZVdpZHRoOworICAgIGludCBtX3Jlc291cmNlSGVpZ2h0OworfTsKKworY2xhc3MgSW1hZ2VD
YW5kaWRhdGUgeworcHVibGljOgorICAgIGVudW0gT3JpZ2luQXR0cmlidXRlIHsKKyAgICAgICAg
U3Jjc2V0T3JpZ2luLAorICAgICAgICBTcmNPcmlnaW4KKyAgICB9OworCisgICAgSW1hZ2VDYW5k
aWRhdGUoKQorICAgICAgICA6IG1fZGVuc2l0eSgxLjApCiAgICAgewogICAgIH0KIAotICAgIFN0
cmluZyBpbWFnZVVSTChjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBz
cmNzZXRBdHRyaWJ1dGUpIGNvbnN0CisgICAgSW1hZ2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IERlc2NyaXB0b3JQ
YXJzaW5nUmVzdWx0JiByZXN1bHQsIE9yaWdpbkF0dHJpYnV0ZSBvcmlnaW5BdHRyaWJ1dGUpCisg
ICAgICAgIDogbV9zdHJpbmcoU3RyaW5nVmlldyhzb3VyY2UpLnN1YnN0cmluZyhzdGFydCwgbGVu
Z3RoKSkKKyAgICAgICAgLCBtX2RlbnNpdHkocmVzdWx0Lmhhc0RlbnNpdHkoKT9yZXN1bHQuZGVu
c2l0eSgpOlVuaW5pdGlhbGl6ZWREZXNjcmlwdG9yKQorICAgICAgICAsIG1fcmVzb3VyY2VXaWR0
aChyZXN1bHQuaGFzV2lkdGgoKT9yZXN1bHQucmVzb3VyY2VXaWR0aCgpOlVuaW5pdGlhbGl6ZWRE
ZXNjcmlwdG9yKQorICAgICAgICAsIG1fb3JpZ2luQXR0cmlidXRlKG9yaWdpbkF0dHJpYnV0ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltYWdlVVJMTGVuZ3RoID8gc3Jjc2V0QXR0cmlidXRl
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKG1faW1hZ2VVUkxTdGFydCwgbV9pbWFnZVVSTExlbmd0aCkg
OiBzcmNBdHRyaWJ1dGU7CiAgICAgfQogCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdAor
ICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9zY2Fs
ZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhtX3N0cmluZy50b1N0cmluZygpKTsKKyAg
ICB9CisKKyAgICBBdG9taWNTdHJpbmcgdXJsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBBdG9taWNTdHJpbmcobV9zdHJpbmcudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZXREZW5zaXR5KGZsb2F0IGZhY3RvcikKKyAgICB7CisgICAgICAgIG1fZGVuc2l0eSA9IGZhY3Rv
cjsKKyAgICB9CisKKyAgICBmbG9hdCBkZW5zaXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2RlbnNpdHk7CisgICAgfQorCisgICAgaW50IHJlc291cmNlV2lkdGgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VXaWR0aDsKKyAgICB9CisKKyAgICBib29s
IHNyY09yaWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1fb3JpZ2luQXR0cmli
dXRlID09IFNyY09yaWdpbik7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOwogICAgIH0KIAog
cHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2ltYWdlVVJMU3RhcnQ7Ci0gICAgdW5zaWduZWQgbV9p
bWFnZVVSTExlbmd0aDsKLSAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOworICAgIFN0cmluZ1ZpZXcg
bV9zdHJpbmc7CisgICAgZmxvYXQgbV9kZW5zaXR5OworICAgIGludCBtX3Jlc291cmNlV2lkdGg7
CisgICAgT3JpZ2luQXR0cmlidXRlIG1fb3JpZ2luQXR0cmlidXRlOwogfTsKIAotLy8gU3BhY2Ug
Y2hhcmFjdGVycyBhcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIHNwZWNpZmljYXRpb24uCi1ib29sIGlz
SFRNTFNwYWNlKFVDaGFyKTsKLWJvb2wgaXNIVE1MTGluZUJyZWFrKFVDaGFyKTsKLWJvb2wgaXNO
b3RIVE1MU3BhY2UoVUNoYXIpOwotYm9vbCBpc0hUTUxTcGFjZUJ1dE5vdExpbmVCcmVhayhVQ2hh
ciBjaGFyYWN0ZXIpOwotCi1JbWFnZVdpdGhTY2FsZSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRy
aWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VTZXRBdHRyaWJ1dGUpOworSW1hZ2VDYW5kaWRhdGUgYmVz
dEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwKKyAg
ICBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwKKyAgICBjb25zdCBTdHJpbmcmIHNyY3NldEF0
dHJpYnV0ZSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
UGFyc2luZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0
aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MmI4MDBiZjM5OGU5ZTk1MWFhMzllMWZmMjJiZjQwYzQ4
MjQzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJz
aW5nVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFyc2luZ1V0aWxpdGllc19o
CisjZGVmaW5lIFBhcnNpbmdVdGlsaXRpZXNfaAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZT4KK2Jvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hh
clR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChwb3NpdGlvbiA8IGVu
ZCAmJiAqcG9zaXRpb24gPT0gZGVsaW1pdGVyKSB7CisgICAgICAgICsrcG9zaXRpb247CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Citi
b29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBl
KiBlbmQpCit7CisgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cG9zaXRpb24pKSB7CisgICAgICAgICsrcG9zaXRpb247CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBl
Pgordm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5
cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQoreworICAgIHdoaWxlIChwb3NpdGlvbiA8IGVu
ZCAmJiAqcG9zaXRpb24gIT0gZGVsaW1pdGVyKQorICAgICAgICArK3Bvc2l0aW9uOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5
cGUpPgordm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hh
clR5cGUqIGVuZCkKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgIWNoYXJhY3RlclBy
ZWRpY2F0ZSgqcG9zaXRpb24pKQorICAgICAgICArK3Bvc2l0aW9uOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9p
ZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVu
ZCkKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpw
b3NpdGlvbikpCisgICAgICAgICsrcG9zaXRpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHJldmVyc2VT
a2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIHN0YXJ0
KQoreworICAgIHdoaWxlIChwb3NpdGlvbiA+PSBzdGFydCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUo
KnBvc2l0aW9uKSkKKyAgICAgICAgLS1wb3NpdGlvbjsKK30KKworI2VuZGlmCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svUGFyc2luZ1V0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9QYXJzaW5nVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJhOGZhOWU1NTI5NWY3NjM0NmI1NmEwMmQ4OGFhMjJkMmY4NThhM2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9QYXJzaW5nVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBQYXJzaW5nVXRpbGl0aWVzX2gKLSNkZWZpbmUgUGFyc2luZ1V0aWxpdGll
c19oCi0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgotYm9vbCBza2lwRXhhY3RseShjb25z
dCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxp
bWl0ZXIpCi17Ci0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0
ZXIpIHsKLSAgICAgICAgKytwb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wg
Y2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hh
clR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKLXsKLSAgICBpZiAocG9zaXRp
b24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpIHsKLSAgICAgICAgKytw
b3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Ci12b2lkIHNraXBVbnRpbChjb25zdCBD
aGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0
ZXIpCi17Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiAhPSBkZWxpbWl0
ZXIpCi0gICAgICAgICsrcG9zaXRpb247Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBl
LCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Ci12b2lkIHNraXBVbnRpbChjb25z
dCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQotewotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGVuZCAmJiAhY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCi0gICAg
ICAgICsrcG9zaXRpb247Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNo
YXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Ci12b2lkIHNraXBXaGlsZShjb25zdCBDaGFyVHlw
ZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQotewotICAgIHdoaWxlIChwb3NpdGlv
biA8IGVuZCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKLSAgICAgICAgKytwb3Np
dGlvbjsKLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MmZlODIyMzAxZWFhNTQ1MmIzMDhlMzE4YTUz
MjNkYzVlNGYxMjhmLi5jYzdhYjc5YTlhYWJmZWZjMmZhYzM0ZmIwZWQwMDkwNTYyOThmYjNjIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQtMDYtMDQgIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYu
d3M+CisKKyAgICAgICAgQWxpZ24gc3Jjc2V0IHBhcnNlciB3aXRoIHJlY2VudCBzcGVjIGNoYW5n
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzUw
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkgaGF2
ZSBjaGFuZ2VkIHRoZSAiaW52YWxpZC1kZXNjcmlwdG9yIiB0ZXN0IGFuZCByZW1vdmVkIHRoZSAi
aW52YWxpZAorICAgICAgICBpbnB1dHMgY29ycmVjdCBzcmMiIHRlc3QgdG8gcmVmbGVjdCB0aGUg
ZmFjdCB0aGF0IGludmFsaWQgZGVzY3JpcHRvcnMKKyAgICAgICAgYXJlIG5vdyB0cmVhdGVkIGlk
ZW50aWNhbGx5IHRvIG51bGwgZGVzY3JpcHRvcnMuIFRoYXQgaXMgYWNjb3JkaW5nIHRvCisgICAg
ICAgIHRoZSBzcGVjLgorICAgICAgICBJJ3ZlIGFsc28gYWRkZWQgbmV3IHRlc3RzIHRoYXQgbWFr
ZSBzdXJlIHRoYXQgdGhlIHNwZWMncyBmdXR1cmUKKyAgICAgICAgY29tcGF0aWJsZSBjaGFuZ2Vz
IGFyZSB3b3JraW5nLgorCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxp
ZC1kZXNjcmlwdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNy
Y3NldC1pbnZhbGlkLWRlc2NyaXB0b3IuaHRtbDoKKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdl
LXNyY3NldC1pbnZhbGlkLWlucHV0cy1jb3JyZWN0LXNyYy1leHBlY3RlZC50eHQ6IFJlbW92ZWQu
CisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVj
dC1zcmMuaHRtbDogUmVtb3ZlZC4KKwogMjAxNC0wNi0wMyAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBDU1MgSklUOiBhZGQgc3VwcG9ydCBmb3IgdGhl
ICJhbnkiIHBzZXVkbyBjbGFzcwpAQCAtOTE5Nyw4ICs5MjE2LDggQEAKICAgICAgICAgKiBtZWRp
YS90cmFjay93M2MvdHJhY2svd2VidnR0L3N1cHBvcnQvYWxpZ25fZW5kX2xvbmcudnR0OiBDb3Bp
ZWQgZnJvbSBtZWRpYS90cmFjay9vcGVyYS90cmFjay93ZWJ2dHQvcmVuZGVyaW5nL3JlZnRlc3Qv
c3VwcG9ydC9hbGlnbl9lbmRfbG9uZy52dHQuCiAgICAgICAgICogbWVkaWEvdHJhY2svdzNjL3Ry
YWNrL3dlYnZ0dC9zdXBwb3J0L2Zvby52dHQ6IENvcGllZCBmcm9tIG1lZGlhL3RyYWNrL29wZXJh
L3RyYWNrL3dlYnZ0dC9yZW5kZXJpbmcvcmVmdGVzdC9zdXBwb3J0L2Zvby52dHQuCiAgICAgICAg
ICogbWVkaWEvdHJhY2svdzNjL3RyYWNrL3dlYnZ0dC9zdXBwb3J0L3JlZlRlc3RXYWl0LmpzOiBD
b3BpZWQgZnJvbSBtZWRpYS90cmFjay9vcGVyYS90cmFjay93ZWJ2dHQvcmVuZGVyaW5nL3JlZnRl
c3Qvc3VwcG9ydC9yZWZUZXN0V2FpdC5qcy4KLQkJKiBwbGF0Zm9ybS9lZnQvVGVzdEV4cGVjdGF0
aW9uczogU2tpcCB3M2MgdGVzdHMuCi0JCSogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6
IFNraXAgdzNjIHRlc3RzLgorICAgICAgICAqIHBsYXRmb3JtL2VmdC9UZXN0RXhwZWN0YXRpb25z
OiBTa2lwIHczYyB0ZXN0cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
czogU2tpcCB3M2MgdGVzdHMuCiAKIDIwMTQtMDQtMDggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNz
ZXQtaW52YWxpZC1kZXNjcmlwdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtZGVzY3JpcHRvci1leHBlY3RlZC50eHQKaW5kZXggNmRi
NWJjMTRiYWU0ZTQ4OTlkODNiZDY2MzYwYjg2MTUzMTQwZTc4Zi4uZTIyZTg1ZDI4YjVkOTI1MzVj
ODJjZThhODQ4ZmI5YTVlZTMxMjI0ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtaW52YWxpZC1kZXNjcmlwdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWRlc2NyaXB0b3ItZXhwZWN0
ZWQudHh0CkBAIC0xLDggKzEsMTIgQEAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
IAogVEVTVCBDT01QTEVURQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIikuY2xp
ZW50V2lkdGg9PTEwMCBpcyB0cnVlCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28y
IikuY2xpZW50V2lkdGg9PTIwMCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJpbnZhbGlkX3dpdGhfeCIpLmNsaWVudFdpZHRoIGlzIDEwMAorUEFTUyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaW52YWxpZF93aXRob3V0X3giKS5jbGllbnRXaWR0aCBpcyAxMDAKK1BBU1Mg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ1dHVyZV9kZXNjcmlwdG9yIikuY2xpZW50V2lkdGgg
aXMgMTAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdXR1cmVfZGVzY3JpcHRvcl93
aXRob3V0X3giKS5jbGllbnRXaWR0aCBpcyAxMDAKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInhfd2l0aF93X2lnbm9yZWQiKS5jbGllbnRXaWR0aCBpcyAyMDAKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInhfd2l0aF9oX2lnbm9yZWQiKS5jbGllbnRXaWR0aCBpcyAyMDAKIFRo
aXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGlzIGEgMTAwcHggYmx1ZSBzcXVhcmUg
d2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgaXMgMS4KIEl0IHRlc3RzIHRoYXQgZXZlbiB0aG91
Z2ggdGhlIDF4IHJlc291cmNlIGNvbnRhaW5zIG1hbnkgaW52YWxpZCBkZXNjcmlwdG9ycywgb25s
eSB0aGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhcmUgaWdub3JlZCAoYWNjb3JkaW5nIHRvIHRoZSBz
cGVjKS4KLSAgCisgICAgICAgICAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkv
aW1hZ2Utc3Jjc2V0LWludmFsaWQtZGVzY3JpcHRvci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1kZXNjcmlwdG9yLmh0bWwKaW5kZXggYjFjMDJlODc1
OWFkNzk1ZDgwMDQ1ZTJiNGVmMTQ3MTI4NjAxMzE1OC4uOTUwNjk5NjkyMjliZDlmMDllNzRkYjg0
NWE4ZTE5Yjk0NWZlMDIxOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zcmNzZXQtaW52YWxpZC1kZXNjcmlwdG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1kZXNjcmlwdG9yLmh0bWwKQEAgLTcsOCArNywxMiBA
QAogPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQ+CiAgICAgYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewotICAgICAg
ICBzaG91bGRCZVRydWUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRXaWR0
aD09MTAwJyk7Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImZvbzIiKS5jbGllbnRXaWR0aD09MjAwJyk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaW52YWxpZF93aXRoX3giKS5jbGllbnRXaWR0aCcsICcxMDAnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnZhbGlkX3dpdGhvdXRf
eCIpLmNsaWVudFdpZHRoJywgJzEwMCcpOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImZ1dHVyZV9kZXNjcmlwdG9yIikuY2xpZW50V2lkdGgnLCAnMTAwJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnV0dXJlX2Rlc2NyaXB0
b3Jfd2l0aG91dF94IikuY2xpZW50V2lkdGgnLCAnMTAwJyk7CisgICAgICAgIHNob3VsZEJlKCdk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgieF93aXRoX3dfaWdub3JlZCIpLmNsaWVudFdpZHRoJywg
JzIwMCcpOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhfd2l0
aF9oX2lnbm9yZWQiKS5jbGllbnRXaWR0aCcsICcyMDAnKTsKICAgICB9LCBmYWxzZSk7CiA8L3Nj
cmlwdD4KIDwvaGVhZD4KQEAgLTE3LDcgKzIxLDExIEBACiAgICAgPGRpdj5UaGlzIHRlc3QgcGFz
c2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBpcyBhIDEwMHB4IGJsdWUgc3F1YXJlIHdoZW4gdGhlIGRl
dmljZVNjYWxlRmFjdG9yIGlzIDEuPC9kaXY+CiAgICAgPGRpdj4gSXQgdGVzdHMgdGhhdCBldmVu
IHRob3VnaCB0aGUgMXggcmVzb3VyY2UgY29udGFpbnMgbWFueSBpbnZhbGlkIGRlc2NyaXB0b3Jz
LAogICAgICAgICBvbmx5IHRoZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFyZSBpZ25vcmVkIChhY2Nv
cmRpbmcgdG8gdGhlIHNwZWMpLjwvZGl2PgotICAgIDxpbWcgaWQ9ImZvbyIgc3JjPSIiIHNyY3Nl
dD0icmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgNDNxIDF4IGRmcyAzZGQsIHJlc291
cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+Ci0gICAgPGltZyBpZD0iZm9vMiIgc3Jj
PSIiIHNyY3NldD0icmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgMzAwcSwgcmVzb3Vy
Y2VzL2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1nIGlkPSJpbnZhbGlkX3dp
dGhfeCIgc3JjPSIiIHNyY3NldD0icmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgNDNx
IDF4IGRmcyAzZGQsIHJlc291cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+CisgICAg
PGltZyBpZD0iaW52YWxpZF93aXRob3V0X3giIHNyYz0iIiBzcmNzZXQ9InJlc291cmNlcy9ibHVl
LTEwMC1weC1zcXVhcmUucG5nIDMwMHEsIHJlc291cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBu
ZyAyeCI+CisgICAgPGltZyBpZD0iZnV0dXJlX2Rlc2NyaXB0b3IiIHNyY3NldD0iLHJlc291cmNl
cy9ibHVlLTEwMC1weC1zcXVhcmUucG5nIDF4IGZ1dHVyZS1kZXNjcmlwdG9yKDN4LCA0aCwgd2hh
dGV2ZXIpLCByZXNvdXJjZXMvZ3JlZW4tNDAwLXB4LXNxdWFyZS5wbmcgMngiPgorICAgIDxpbWcg
aWQ9ImZ1dHVyZV9kZXNjcmlwdG9yX3dpdGhvdXRfeCIgc3Jjc2V0PSIscmVzb3VyY2VzL2JsdWUt
MTAwLXB4LXNxdWFyZS5wbmcgZnV0dXJlLWRlc2NyaXB0b3IoM3gsIDRoLCB3aGF0ZXZlciksIHJl
c291cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+CisgICAgPGltZyBpZD0ieF93aXRo
X3dfaWdub3JlZCIgc3Jjc2V0PSIscmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgMXgg
MTAwdywgcmVzb3VyY2VzL2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1nIGlk
PSJ4X3dpdGhfaF9pZ25vcmVkIiBzcmNzZXQ9IixyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJl
LnBuZyAxeCAxMDBoLCByZXNvdXJjZXMvZ3JlZW4tNDAwLXB4LXNxdWFyZS5wbmcgMngiPgogPC9i
b2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
cmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMtZXhw
ZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmI3ZWRjOGMzZGM0YTQy
OGI3ZmU1YjE4YmYxNTMyMGJjOTAxNDI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFs
aWQtaW5wdXRzLWNvcnJlY3Qtc3JjLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMg
KzAsMCBAQAotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9
PTQwMCBpcyB0cnVlCi1UaGlzIHRlc3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBh
IGdyZWVuIHNxdWFyZSByZWdhcmRsZXNzIG9mIHRoZSBzY2FsZSBmYWN0b3IuIEl0IGVuc3VyZXMg
dGhhdCBpbnZhbGlkIGlucHV0cyBmcm9tIHNyY3NldCBhcmUgaWdub3JlZCwgYW5kIHNyYyBpcyBz
ZWxlY3RlZCAoc2luY2UgaXQncyB0aGUgb25seSBjYW5kaWRhdGUgbGVmdCkKLQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29y
cmVjdC1zcmMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFs
aWQtaW5wdXRzLWNvcnJlY3Qtc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDc3MGJjMjFmNTQxNDVhNjFkN2I5ZGQ2OWRiYjNlMmU0M2VkNzJiNzYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9p
bWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMuaHRtbAorKysgL2Rldi9udWxs
CkBAIC0xLDIxICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3NyY3NldC1oZWxwZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikgewotICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB9Ci0KLSAg
ICBhZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNob3VsZEJl
VHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT00MDAnKTsK
LSAgICB9LCBmYWxzZSk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgaWQ9ImJvZHkiPgot
ICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgYSBncmVl
biBzcXVhcmUgcmVnYXJkbGVzcyBvZiB0aGUgc2NhbGUgZmFjdG9yLiBJdCBlbnN1cmVzIHRoYXQg
aW52YWxpZCBpbnB1dHMKLSAgICBmcm9tIHNyY3NldCBhcmUgaWdub3JlZCwgYW5kIHNyYyBpcyBz
ZWxlY3RlZCAoc2luY2UgaXQncyB0aGUgb25seSBjYW5kaWRhdGUgbGVmdCk8L2Rpdj4KLSAgICA8
aW1nIGlkPSJmb28iIHNyYz0icmVzb3VyY2VzL2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIiBzcmNz
ZXQ9IjF4IDV3LCwgICwgICAgICAsIDJ4ICA2MDBoLCwiPgotPC9ib2R5PgotPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232533</attachid>
            <date>2014-06-05 02:29:05 -0700</date>
            <delta_ts>2014-06-05 03:50:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133504-20140605112843.patch</filename>
            <type>text/plain</type>
            <size>59032</size>
            <attacher name="Yoav Weiss">yoav</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1MDFlNmFlYTVlZWNiNjQ3ZjkxNzg3
ZjBlNDhmZDU3OTBhOTI4Y2UuLjExNTZiYzFjZmMzMjRkNzk1NjBkNjhjZWE1MjA1MmY2NGY4ZTA0
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMDYtMDQgIFlvYXYgV2Vpc3MgIDx5b2F2QHlv
YXYud3M+CisKKyAgICAgICAgQWxpZ24gc3Jjc2V0IHBhcnNlciB3aXRoIHJlY2VudCBzcGVjIGNo
YW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MzUwNAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEkndmUg
YWRkZWQgdG9JbnQgYW5kIHRvRmxvYXQgbWV0aG9kcyB0byBTdHJpbmdWaWV3LgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b0lu
dCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvRmxvYXQpOgorCiAyMDE0LTA2LTA0ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRW5h
YmxlIFdlYkdMIG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmNiODQ5ZWQzNTMzZWUxNzIwZDY5
MzE5MzVkOTQ0ZmFhMTMxYjk0ZS4uODA5MDkwZTg4ZTJiZDNjNjg0ZDFiMzFkMDJiZDI4ZDg1NzFh
M2QxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE0LTA2LTA0ICBZb2F2IFdlaXNz
ICA8eW9hdkB5b2F2LndzPgorCisgICAgICAgIEFsaWduIHNyY3NldCBwYXJzZXIgd2l0aCByZWNl
bnQgc3BlYyBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzM1MDQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBOZXcgdGVzdHMgd2VyZSBhZGRlZCB0byBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZh
bGlkLWRlc2NyaXB0b3IuaHRtbAorCisgICAgICAgIFRoZSBzcmNzZXQgcGFyc2VyIGNoYW5nZXMg
YWxpZ24gaXQgd2l0aCB0aGUgc3BlYzoKKyAgICAgICAgaHR0cDovL3BpY3R1cmUucmVzcG9uc2l2
ZWltYWdlcy5vcmcvI3BhcnNlLXNyY3NldC1hdHRyLgorICAgICAgICBUaGUgc3BlYyBjaGFuZ2Vz
IGFyZSBtZWFudCB0byBnaXZlIHRoZSBwYXJzZXIgYmV0dGVyIGZ1dHVyZQorICAgICAgICBjb21w
YXRpYmlsaXR5LCBhbmQgZW5hYmxlIGl0IHRvIHdvcmsgd2VsbCB3aXRoIHRoZSAndycgZGVzY3Jp
cHRvciwgdGhlCisgICAgICAgIHNvb24gdG8gYmUgYWRkZWQgJ2gnIGRlc2NyaXB0b3IgYW5kIGZ1
bmN0aW9uIGRlc2NyaXB0b3JzIChlLmcuCisgICAgICAgIGZ1dHVyZS1kZXNjcmlwdG9yKGEsIGIs
IGMpICkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEJlc3RGaXRVUkxBbmREUFJGcm9tSW1hZ2VDYW5k
aWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSFRNTFNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ29tbWEpOgorICAgICAgICAoV2ViQ29yZTo6aXNIVE1M
U3BhY2VPckNvbW1hKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW5QcmVsb2FkU2Nhbm5lcjo6U3RhcnRUYWdTY2Fu
bmVyOjpwcm9jZXNzQXR0cmlidXRlcyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNyY3Nl
dFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQnlEZW5zaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZERlc2NyaXB0b3JBbmRSZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNFT0YpOgorICAgICAgICAo
V2ViQ29yZTo6dG9rZW5pemVEZXNjcmlwdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdW
aWV3VG9GbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdWaWV3VG9JbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VEZXNjcmlwdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlt
YWdlQ2FuZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6cGlj
a0Jlc3RJbWFnZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpiZXN0Rml0U291cmNlRm9y
SW1hZ2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVCeVNjYWxlRmFjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNy
Y3NldEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNyY3Nl
dFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGVzY3JpcHRvclBhcnNpbmdSZXN1bHQ6OkRl
c2NyaXB0b3JQYXJzaW5nUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NyaXB0b3JQYXJz
aW5nUmVzdWx0OjpoYXNEZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NyaXB0b3JQYXJz
aW5nUmVzdWx0OjpoYXNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNjcmlwdG9yUGFyc2lu
Z1Jlc3VsdDo6aGFzSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NyaXB0b3JQYXJzaW5n
UmVzdWx0OjpkZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NyaXB0b3JQYXJzaW5nUmVz
dWx0OjpyZXNvdXJjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2NyaXB0b3JQYXJzaW5n
UmVzdWx0OjpyZXNvdXJjZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNjcmlwdG9yUGFy
c2luZ1Jlc3VsdDo6c2V0UmVzb3VyY2VXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNjcmlw
dG9yUGFyc2luZ1Jlc3VsdDo6c2V0UmVzb3VyY2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
RGVzY3JpcHRvclBhcnNpbmdSZXN1bHQ6OnNldERlbnNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VDYW5kaWRhdGU6OkltYWdlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
Q2FuZGlkYXRlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUNhbmRpZGF0ZTo6
dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpzZXREZW5zaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpkZW5zaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQ2FuZGlkYXRlOjpyZXNvdXJjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQ2FuZGlkYXRlOjpzcmNPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VDYW5kaWRh
dGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VXaXRoU2NhbGU6OkltYWdlV2l0
aFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlV2l0aFNjYWxlOjppbWFn
ZVVSTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVdpdGhTY2FsZTo6c2NhbGVG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svUGFyc2luZ1V0aWxpdGll
cy5oLgorICAgICAgICAoc2tpcEV4YWN0bHkpOgorICAgICAgICAoc2tpcFVudGlsKToKKyAgICAg
ICAgKHNraXBXaGlsZSk6CisgICAgICAgIChyZXZlcnNlU2tpcFdoaWxlKToKKwogMjAxNC0wNi0w
NCAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNo
YXBlc10gSW1hZ2UgbGlmZXRpbWUgaXMgbm90IHByb3Blcmx5IGhhbmRsZWQgZm9yIGdyYWRpZW50
IHNoYXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCA2MzkzNWEwYmQxYWY2N2IwZmE2
Y2JjMjRhYjdmODY3OTMyNTAxMzFkLi4zNGY5ODIyYjhjN2U3YzUxN2RhN2U0YzQwOTkwZGU2NTlj
ZDc2MWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTQyLDYgKzE0MiwyMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsK
ICAgICB9CiAKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpCisgICAgeworICAgICAg
ICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hh
cmFjdGVyczgoKSwgbGVuZ3RoKCksICZpc1ZhbGlkKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOworICAgIH0KKwor
ICAgIGludCB0b0ludChib29sJiBpc1ZhbGlkKQorICAgIHsKKyAgICAgICAgaWYgKGlzOEJpdCgp
KQorICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzOCgpLCBsZW5n
dGgoKSwgJmlzVmFsaWQpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOworICAgIH0KKwogICAgIFN0cmluZyB0b1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpczhCaXQoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggYjhmYWQyMzU1Zjc4NTQ3OTA5YmI0YmY3ZTg4OGY5Yjc4MTlj
OWQ3Ni4uMDE0ZGNhMjMxMDQ4MjUyNmFmZGVlZTAyN2FhYjRiNGYxOGI3ZWE5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTE3MDAsNiArMTcwMCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcAogICAgIGh0bWwvcGFy
c2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2Vy
SWRpb21zLmNwcAorICAgIGh0bWwvcGFyc2VyL0hUTUxTcmNzZXRQYXJzZXIuY3BwCiAgICAgaHRt
bC9wYXJzZXIvSFRNTFBhcnNlck9wdGlvbnMuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFBhcnNl
clNjaGVkdWxlci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCA4
MGE3MTgzY2NmMTVjMDJjMmY4NGM1OTVlNDExNDE4ZTA1OTNhYjJhLi4zZGNmY2JjZDQ5OGZkMTg2
NjY2MDcyYzkwNmE0MmE0M2RkMzZkZmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTIwNjc0LDYgKzIwNjc0LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxUcmVlQnVpbGRlci5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSW5wdXRTdHJlYW1QcmVwcm9jZXNz
b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXE5lc3RpbmdM
ZXZlbEluY3JlbWVudGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBh
cnNlclxQYXJzaW5nVXRpbGl0aWVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXHBhcnNlclxUZXh0RG9jdW1lbnRQYXJzZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGh0bWxccGFyc2VyXFhTU0F1ZGl0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGh0bWxccGFyc2VyXFhTU0F1ZGl0b3JEZWxlZ2F0ZS5oIiAvPgpAQCAtMjA2OTYsNyAr
MjA2OTcsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xJbmJhbmRU
ZXh0VHJhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcSW5i
YW5kV2ViVlRUVGV4dFRyYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1s
XHRyYWNrXExvYWRhYmxlVGV4dFRyYWNrLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxodG1sXHRyYWNrXFBhcnNpbmdVdGlsaXRpZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGh0bWxcdHJhY2tcVGV4dFRyYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFx0cmFja1xUZXh0VHJhY2tDdWVMaXN0LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXgg
ZmQ4MGE0ZTIyMGEwZDk1NGY3MzkwNTViMTYyNjFkYTcwZDJlZTJkMC4uMTQwNmE1NDIyODRjM2Zj
YTk1N2RlNDkzOWEyZDk1YTc0NjlhMGE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMTEyMjcsNiArMTEy
MjcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcTmVzdGluZ0xl
dmVsSW5jcmVtZW50ZXIuaCI+CiAgICAgICA8RmlsdGVyPmh0bWxccGFyc2VyPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxQ
YXJzaW5nVXRpbGl0aWVzLmgiPgorICAgICAgPEZpbHRlcj5odG1sXHBhcnNlcjwvRmlsdGVyPgor
ICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJc
VGV4dERvY3VtZW50UGFyc2VyLmgiPgogICAgICAgPEZpbHRlcj5odG1sXHBhcnNlcjwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTEyOTMsOSArMTEyOTYsNiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xMb2FkYWJsZVRleHRUcmFjay5oIj4KICAgICAgIDxG
aWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xQYXJzaW5nVXRpbGl0aWVzLmgiPgotICAgICAgPEZp
bHRlcj5odG1sXHRyYWNrPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXFRleHRUcmFjay5oIj4KICAgICAgIDxGaWx0ZXI+aHRt
bFx0cmFjazwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYxMjk5YmFmZGUxYjYxMmYy
YTAxNDg3MmM4NjlmM2U2NDM5MjJjOGUuLjBiOTVhNmYxMWRlMGNhNjYwZDJlZDY5ODc5ZWVjN2Yz
MGMyMzc0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTIwMTMsNiArMjAxMyw3IEBACiAJCTUzMTc2MTIzMTNDNTE2NjkwMDI2
RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxNzYxMjExM0M1MTY2OTAwMjZFNDU0IC8qIFN0eWxlRmxl
eGlibGVCb3hEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTM2RDVBMjAxOTNFMThFOTAwQ0U0Q0FCIC8qIEhUTUxTcmNzZXRQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTFGMTkz
RTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmggKi87IH07CiAJCTUzNkQ1QTIxMTkz
RTE4RUUwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTFFMTkzRTE4RDAwMENFNENBQiAvKiBI
VE1MU3Jjc2V0UGFyc2VyLmNwcCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8q
IFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmgg
Ki87IH07CiAJCTUzQzgyOThEMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M4Mjk4
QjEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVyRmxleGlibGVCb3guY3BwICovOyB9OwogCQk1M0M4
Mjk4RTEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVyRmxleGlibGVCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzgyOThDMTNEOEQ5MjcwMERFMkRF
QiAvKiBSZW5kZXJGbGV4aWJsZUJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzRTI5RTVFMTY3QThBMTkwMDU4NkQzRCAvKiBJbnRlcm5hbFNl
dHRpbmdzR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRTI5RTVDMTY3QThBMTkwMDU4NkQzRCAvKiBJbnRlcm5hbFNldHRpbmdzR2Vu
ZXJhdGVkLmNwcCAqLzsgfTsKQEAgLTIzMzksNyArMjM0MCw2IEBACiAJCTdBNzRFQ0JBMTAxODM5
QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlF
IC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgKi87IH07CiAJCTdBNzRFQ0JCMTAxODM5
QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAv
KiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCAqLzsgfTsKIAkJN0E3NEVDQkQxMDE4MzlEQTAw
QkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0JDMTAxODM5REEwMEJGOTM5
RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgKi87IH07Ci0JCTdBOTM4Njg0
MThEQ0MxNDUwMEI4MjYzRCAvKiBQYXJzaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTkzODY4MTE4RENDMTQ1MDBCODI2M0QgLyog
UGFyc2luZ1V0aWxpdGllcy5oICovOyB9OwogCQk3QTkzODY4NTE4RENDMTQ1MDBCODI2M0QgLyog
VlRUU2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QTkzODY4MjE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5jcHAgKi87IH07CiAJ
CTdBOTM4Njg2MThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRTY2FubmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTkzODY4MzE4RENDMTQ1MDBCODI2M0Qg
LyogVlRUU2Nhbm5lci5oICovOyB9OwogCQk3QUFCQTI1OTE0QkM2MTMzMDBBQTlBMTEgLyogRE9N
RWRpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuY3BwICovOyB9OwpAQCAtOTA3
Niw2ICs5MDc2LDcgQEAKIAkJNTMxNzYxMjExM0M1MTY2OTAwMjZFNDU0IC8qIFN0eWxlRmxleGli
bGVCb3hEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlRmxleGli
bGVCb3hEYXRhLmg7IHBhdGggPSBzdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzZENUExRTE5M0UxOEQwMDBDRTRDQUIgLyogSFRNTFNy
Y3NldFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBIVE1M
U3Jjc2V0UGFyc2VyLmNwcDsgcGF0aCA9IHBhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2RDVBMUYxOTNFMThFOTAwQ0U0Q0FCIC8qIEhU
TUxTcmNzZXRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSFRNTFNy
Y3NldFBhcnNlci5oOyBwYXRoID0gcGFyc2VyL0hUTUxTcmNzZXRQYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdV
dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGFyc2luZ1V0aWxp
dGllcy5oOyBwYXRoID0gcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNDODI5OEIxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxl
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZsZXhp
YmxlQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDODI5OEMxM0Q4RDky
NzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlckZsZXhpYmxlQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRTI5RTVDMTY3QThBMTkwMDU4NkQzRCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQzNiw3ICs5
NDM3LDYgQEAKIAkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTc0
RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyog
SlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QTkzODY4MTE4RENDMTQ1MDBCODI2M0QgLyogUGFyc2lu
Z1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzaW5nVXRp
bGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOTM4NjgyMThEQ0MxNDUw
MEI4MjYzRCAvKiBWVFRTY2FubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZUVFNjYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTkz
ODY4MzE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWVFRTY2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MjAzLDYgKzE4MjAzLDcgQEAKIAkJCQk5NzdCMzcyMjEyMjg3MjE3MDBC
ODFGRjggLyogSFRNTFRyZWVCdWlsZGVyLmggKi8sCiAJCQkJQTg4MDVBRjExNkM5NkFFQTAwMEU5
RDk4IC8qIElucHV0U3RyZWFtUHJlcHJvY2Vzc29yLmggKi8sCiAJCQkJOEEzMDlDOUUxMjM5NTBC
RTAwQ0I5MjA0IC8qIE5lc3RpbmdMZXZlbEluY3JlbWVudGVyLmggKi8sCisJCQkJNTM2RDVBMjIx
OTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAqLywKIAkJCQk5N0JDODQ4MTEy
MzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQk5N0JDODQ4
MjEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFyc2VyLmggKi8sCiAJCQkJOTc3RTJF
MEIxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwICovLApAQCAtMTk1MDYsNyArMTk1
MDcsNiBAQAogCQlCMUFENEU3NzEzQTEyQTcyMDA4NDZCMjcgLyogdHJhY2sgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTdBOTM4NjgxMThEQ0MxNDUwMEI4
MjYzRCAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi8sCiAJCQkJN0E0NTAzMkQxOERCNzE3MjAwMzc3
QjM0IC8qIEJ1ZmZlcmVkTGluZVJlYWRlci5jcHAgKi8sCiAJCQkJN0E0NTAzMkUxOERCNzE3MjAw
Mzc3QjM0IC8qIEJ1ZmZlcmVkTGluZVJlYWRlci5oICovLAogCQkJCUJFODhFMENDMTcxNUQyQTIw
MDY1OEQ5OCAvKiBBdWRpb1RyYWNrLmNwcCAqLywKQEAgLTI0MjI1LDcgKzI0MjI1LDYgQEAKIAkJ
CQlBODcxREUyQjBBMTUyQUM4MDBCMTJBNjggLyogSFRNTEZyYW1lRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRGRkUzMUQwQUUxOTYzMzAwMTM2QkY1IC8qIEhUTUxGcmFtZUVsZW1lbnRC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyNDFGRjBCMkI0RTQwMDBDNzMyQTEgLyogSFRN
TEZyYW1lT3duZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QTkzODY4NDE4RENDMTQ1
MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURF
MjgwQTE1MkFDODAwQjEyQTY4IC8qIEhUTUxGcmFtZVNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4NzFERTJEMEExNTJBQzgwMEIxMkE2OCAvKiBIVE1MSGVhZEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4RUE3Q0I4MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MSGVhZGluZ0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjQzMjQsNiArMjQzMjMsNyBAQAogCQkJCTUxMDE5
NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFENzE5QzQxODExMDZFMDAwMTZEQzUxIC8qIElEQkN1cnNvcldpdGhW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5QzcxODExMDZFMDAwMTZEQzUxIC8qIElE
QkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIg
LyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NzFDOEYxODJEQjRC
NzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFE
NzE5Q0ExODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUQ3MTlDQzE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCmluZGV4IGVhNzgyZTVjNGFlYjc4NTAyMDcwYjEwZDgzZDFlZGFkOWE5OWFkMTAuLjlh
MzJmNTMxODA0NjQ0ZWM3MDc2NjYxMmVkMmQwYmVmNmM4MThiNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcApAQCAtMTIzLDE5ICsxMjMsMjMgQEAgY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MSW1hZ2VFbGVtZW50OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fYmVzdEZpdEltYWdlVVJMLmlzRW1wdHkoKSA/IGZhc3RHZXRBdHRyaWJ1dGUoc3Jj
QXR0cikgOiBtX2Jlc3RGaXRJbWFnZVVSTDsKIH0KIAordm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRCZXN0Rml0VVJMQW5kRFBSRnJvbUltYWdlQ2FuZGlkYXRlKGNvbnN0IEltYWdlQ2FuZGlkYXRl
JiBjYW5kaWRhdGUpCit7CisgICAgbV9iZXN0Rml0SW1hZ2VVUkwgPSBjYW5kaWRhdGUuc3RyaW5n
LnRvU3RyaW5nKCk7CisgICAgaWYgKGNhbmRpZGF0ZS5kZW5zaXR5ID49IDApCisgICAgICAgIG1f
aW1hZ2VEZXZpY2VQaXhlbFJhdGlvID0gMSAvIGNhbmRpZGF0ZS5kZW5zaXR5OworICAgIGlmIChy
ZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkKKyAgICAgICAgdG9SZW5kZXJJbWFn
ZShyZW5kZXJlcigpKS0+c2V0SW1hZ2VEZXZpY2VQaXhlbFJhdGlvKG1faW1hZ2VEZXZpY2VQaXhl
bFJhdGlvKTsKK30KKwogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IGlmIChuYW1lID09IGFsdEF0dHIpIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+aXNSZW5kZXJJbWFnZSgpKQogICAgICAgICAgICAgdG9SZW5kZXJJbWFnZShyZW5kZXJl
cigpKS0+dXBkYXRlQWx0VGV4dCgpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBzcmNBdHRyIHx8
IG5hbWUgPT0gc3Jjc2V0QXR0cikgewotICAgICAgICBJbWFnZVdpdGhTY2FsZSBjYW5kaWRhdGUg
PSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSwgZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSwgZmFzdEdldEF0dHJpYnV0ZShzcmNz
ZXRBdHRyKSk7Ci0gICAgICAgIG1fYmVzdEZpdEltYWdlVVJMID0gY2FuZGlkYXRlLmltYWdlVVJM
KGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0ciksIGZhc3RHZXRBdHRyaWJ1dGUoc3Jjc2V0QXR0cikp
OwotICAgICAgICBmbG9hdCBjYW5kaWRhdGVTY2FsZUZhY3RvciA9IGNhbmRpZGF0ZS5zY2FsZUZh
Y3RvcigpOwotICAgICAgICBpZiAoY2FuZGlkYXRlU2NhbGVGYWN0b3IgPiAwKQotICAgICAgICAg
ICAgbV9pbWFnZURldmljZVBpeGVsUmF0aW8gPSAxIC8gY2FuZGlkYXRlU2NhbGVGYWN0b3I7Ci0g
ICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkKLSAgICAgICAg
ICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnNldEltYWdlRGV2aWNlUGl4ZWxSYXRpbyht
X2ltYWdlRGV2aWNlUGl4ZWxSYXRpbyk7CisgICAgICAgIEltYWdlQ2FuZGlkYXRlIGNhbmRpZGF0
ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCBmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLCBmYXN0R2V0QXR0cmlidXRlKHNy
Y3NldEF0dHIpKTsKKyAgICAgICAgc2V0QmVzdEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRpZGF0
ZShjYW5kaWRhdGUpOwogICAgICAgICBtX2ltYWdlTG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50SWdu
b3JpbmdQcmV2aW91c0Vycm9yKCk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHVzZW1hcEF0dHIp
IHsKICAgICAgICAgc2V0SXNMaW5rKCF2YWx1ZS5pc051bGwoKSAmJiAhc2hvdWxkUHJvaGliaXRM
aW5rcyh0aGlzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCmluZGV4IDU0
MjdmOWM0MGI3YjgwMjY2NjYzMzg5YTI3ZTA3N2RiZDYyOGZlNDUuLmRlODI3OGViZDFlNWZiNzNj
NzIzMDQ5MTgzNDZlNWIwMjI2NzljNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5oCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhU
TUxGb3JtRWxlbWVudDsKK3N0cnVjdCBJbWFnZUNhbmRpZGF0ZTsKIAogY2xhc3MgSFRNTEltYWdl
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIEZvcm1OYW1lZEl0ZW0gewogICAg
IGZyaWVuZCBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CkBAIC05OSw2ICsxMDAsNyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihQ
YXNzUmVmPFJlbmRlclN0eWxlPikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCZXN0Rml0VVJMQW5k
RFBSRnJvbUltYWdlQ2FuZGlkYXRlKGNvbnN0IEltYWdlQ2FuZGlkYXRlJik7CiAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5oCmluZGV4IDY1NzMxMTM5OTMy
MzNjOGNhZGQ3YmJhODA5YjFkZDcxNzI1MTMzY2YuLmRhM2JkN2JhMDA4YWEzOGY5OWZjMWJkNjIw
OTE0ZWQ1N2M4NGZkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxQYXJzZXJJZGlvbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFy
c2VySWRpb21zLmgKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RGVjaW1hbDsKIAogLy8gU3BhY2UgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIHNw
ZWNpZmljYXRpb24uCi1ib29sIGlzSFRNTFNwYWNlKFVDaGFyKTsKIGJvb2wgaXNIVE1MTGluZUJy
ZWFrKFVDaGFyKTsKIGJvb2wgaXNOb3RIVE1MU3BhY2UoVUNoYXIpOwogYm9vbCBpc0hUTUxTcGFj
ZUJ1dE5vdExpbmVCcmVhayhVQ2hhciBjaGFyYWN0ZXIpOwpAQCAtNjYsOCArNjUsOCBAQCBib29s
IHBhcnNlSFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiwgaW50Jik7CiBib29sIHBhcnNlSFRNTE5v
bk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBpbnQmKTsKIAogLy8gSW5s
aW5lIGltcGxlbWVudGF0aW9ucyBvZiBzb21lIG9mIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgYWJv
dmUuCi0KLWlubGluZSBib29sIGlzSFRNTFNwYWNlKFVDaGFyIGNoYXJhY3RlcikKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNIVE1MU3BhY2UoQ2hhclR5cGUgY2hh
cmFjdGVyKQogewogICAgIC8vIEhpc3RvZ3JhbSBmcm9tIEFwcGxlJ3MgcGFnZSBsb2FkIHRlc3Qg
Y29tYmluZWQgd2l0aCBzb21lIGFkIGhvYyBicm93c2luZyBzb21lIG90aGVyIHRlc3Qgc3VpdGVz
LgogICAgIC8vCkBAIC04Nyw2ICs4NiwxOCBAQCBpbmxpbmUgYm9vbCBpc0hUTUxMaW5lQnJlYWso
VUNoYXIgY2hhcmFjdGVyKQogICAgIHJldHVybiBjaGFyYWN0ZXIgPD0gJ1xyJyAmJiAoY2hhcmFj
dGVyID09ICdcbicgfHwgY2hhcmFjdGVyID09ICdccicpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyVHlwZT4KK2lubGluZSBib29sIGlzQ29tbWEoQ2hhclR5cGUgY2hhcmFjdGVyKQorewor
ICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJywnOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
VHlwZT4KK2lubGluZSBib29sIGlzSFRNTFNwYWNlT3JDb21tYShDaGFyVHlwZSBjaGFyYWN0ZXIp
Cit7CisgICAgcmV0dXJuIGlzQ29tbWEoY2hhcmFjdGVyKSB8fCBpc0hUTUxTcGFjZTxDaGFyVHlw
ZT4oY2hhcmFjdGVyKTsKK30KKwogaW5saW5lIGJvb2wgaXNOb3RIVE1MU3BhY2UoVUNoYXIgY2hh
cmFjdGVyKQogewogICAgIHJldHVybiAhaXNIVE1MU3BhY2UoY2hhcmFjdGVyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGE0
YTNhMTUyNmFhYTY0NDcxMzBhMTAzNmI1ZmJiOWY4YzA3NTA1M2YuLjcwYmRkNTVjM2JiMmE3MGUx
Y2NkOWUyMjBlNDFmZmQxNzllMmI1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcApAQCAtMTA1LDkgKzEwNSw4IEBAIHB1YmxpYzoK
IAogICAgICAgICAvLyBSZXNvbHZlIGJldHdlZW4gc3JjIGFuZCBzcmNTZXQgaWYgd2UgaGF2ZSB0
aGVtLgogICAgICAgICBpZiAoIW1fc3JjU2V0QXR0cmlidXRlLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2VDYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1h
Z2VBdHRyaWJ1dGVzKG1fZGV2aWNlU2NhbGVGYWN0b3IsIG1fdXJsVG9Mb2FkLCBtX3NyY1NldEF0
dHJpYnV0ZSk7Ci0gICAgICAgICAgICBTdHJpbmcgc3JjTWF0Y2hpbmdTY2FsZSA9IGltYWdlQ2Fu
ZGlkYXRlLmltYWdlVVJMKG1fdXJsVG9Mb2FkLCBtX3NyY1NldEF0dHJpYnV0ZSk7Ci0gICAgICAg
ICAgICBzZXRVcmxUb0xvYWQoc3JjTWF0Y2hpbmdTY2FsZSwgdHJ1ZSk7CisgICAgICAgICAgICBJ
bWFnZUNhbmRpZGF0ZSBpbWFnZUNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJp
YnV0ZXMobV9kZXZpY2VTY2FsZUZhY3RvciwgbV91cmxUb0xvYWQsIG1fc3JjU2V0QXR0cmlidXRl
KTsKKyAgICAgICAgICAgIHNldFVybFRvTG9hZChpbWFnZUNhbmRpZGF0ZS5zdHJpbmcudG9TdHJp
bmcoKSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTcmNzZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNyY3NldFBhcnNlci5jcHAKaW5kZXggNDM0NzQzZWIwZmMxYzg3NTQ5OTE4
OGRkMTU1MzkwMzdjOTc0MzMwNS4uZjdjZTgwZTViYzE1NzJiMjVmZDRhZjNhOTA4MGFhNWFlNTUw
ZDMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNyY3NldFBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNyY3NldFBhcnNl
ci5jcHAKQEAgLTEsMTU4ICsxLDI2OCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTcmNzZXRQYXJzZXIuaCIK
IAorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJQYXJzaW5nVXRpbGl0
aWVzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8SW1hZ2VXaXRo
U2NhbGU+IEltYWdlQ2FuZGlkYXRlczsKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQnlEZW5z
aXR5KGNvbnN0IEltYWdlQ2FuZGlkYXRlJiBmaXJzdCwgY29uc3QgSW1hZ2VDYW5kaWRhdGUmIHNl
Y29uZCkKK3sKKyAgICByZXR1cm4gZmlyc3QuZGVuc2l0eSA8IHNlY29uZC5kZW5zaXR5OworfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUJ5U2NhbGVGYWN0b3IoY29uc3QgSW1hZ2VXaXRo
U2NhbGUmIGZpcnN0LCBjb25zdCBJbWFnZVdpdGhTY2FsZSYgc2Vjb25kKQorZW51bSBEZXNjcmlw
dG9yVG9rZW5pemVyU3RhdGUgeworICAgIFN0YXJ0LAorICAgIEluUGFyZW50aGVzaXMsCisgICAg
QWZ0ZXJUb2tlbiwKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIHZv
aWQgYXBwZW5kRGVzY3JpcHRvckFuZFJlc2V0KGNvbnN0IENoYXJUeXBlKiYgZGVzY3JpcHRvclN0
YXJ0LCBjb25zdCBDaGFyVHlwZSogcG9zaXRpb24sIFZlY3RvcjxTdHJpbmdWaWV3PiYgZGVzY3Jp
cHRvcnMpCiB7Ci0gICAgcmV0dXJuIGZpcnN0LnNjYWxlRmFjdG9yKCkgPCBzZWNvbmQuc2NhbGVG
YWN0b3IoKTsKKyAgICBpZiAocG9zaXRpb24gPiBkZXNjcmlwdG9yU3RhcnQpCisgICAgICAgIGRl
c2NyaXB0b3JzLmFwcGVuZChTdHJpbmdWaWV3KGRlc2NyaXB0b3JTdGFydCwgcG9zaXRpb24gLSBk
ZXNjcmlwdG9yU3RhcnQpKTsKKyAgICBkZXNjcmlwdG9yU3RhcnQgPSBudWxscHRyOwogfQogCi1z
dGF0aWMgYm9vbCBwYXJzZURlc2NyaXB0b3JzKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBzaXpl
X3Qgc3RhcnQsIHNpemVfdCBlbmQsIGZsb2F0JiBpbWFnZVNjYWxlRmFjdG9yKQorLy8gVGhlIGZv
bGxvd2luZyBpcyBjYWxsZWQgYXBwZW5kQ2hhcmFjdGVyIHRvIG1hdGNoIHRoZSBzcGVjJ3MgdGVy
bWlub2xvZ3kuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyB2b2lkIGFwcGVu
ZENoYXJhY3Rlcihjb25zdCBDaGFyVHlwZSogZGVzY3JpcHRvclN0YXJ0LCBjb25zdCBDaGFyVHlw
ZSogcG9zaXRpb24pCiB7Ci0gICAgc2l6ZV90IGRlc2NyaXB0b3JTdGFydDsKLSAgICBzaXplX3Qg
ZGVzY3JpcHRvckVuZDsKLSAgICBzaXplX3QgcG9zaXRpb24gPSBzdGFydDsKLSAgICBib29sIGlz
Rm91bmRTY2FsZUZhY3RvciA9IGZhbHNlOwotICAgIGJvb2wgaXNFbXB0eURlc2NyaXB0b3IgPSAh
KGVuZCA+IHN0YXJ0KTsKLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLQotICAgIHdoaWxlIChw
b3NpdGlvbiA8IGVuZCkgewotICAgICAgICB3aGlsZSAoaXNIVE1MU3BhY2UoYXR0cmlidXRlW3Bv
c2l0aW9uXSkgJiYgcG9zaXRpb24gPCBlbmQpCi0gICAgICAgICAgICArK3Bvc2l0aW9uOworICAg
IC8vIFNpbmNlIHdlIGRvbid0IGNvcHkgdGhlIHRva2VucywgdGhpcyBqdXN0IHNldCB0aGUgcG9p
bnQgd2hlcmUgdGhlIGRlc2NyaXB0b3IgdG9rZW5zIHN0YXJ0LgorICAgIGlmICghZGVzY3JpcHRv
clN0YXJ0KQogICAgICAgICBkZXNjcmlwdG9yU3RhcnQgPSBwb3NpdGlvbjsKLSAgICAgICAgd2hp
bGUgKGlzTm90SFRNTFNwYWNlKGF0dHJpYnV0ZVtwb3NpdGlvbl0pICYmIHBvc2l0aW9uIDwgZW5k
KQotICAgICAgICAgICAgKytwb3NpdGlvbjsKLSAgICAgICAgZGVzY3JpcHRvckVuZCA9IHBvc2l0
aW9uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyBib29sIGlzRU9G
KGNvbnN0IENoYXJUeXBlKiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKK3sKKyAgICBy
ZXR1cm4gcG9zaXRpb24gPj0gZW5kOworfQogCi0gICAgICAgIC8vIExlYXZlIGlmIHRoZXJlIGlz
IG9ubHkgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBkZXNjcmlwdG9ycwotICAgICAgICBp
ZiAoZGVzY3JpcHRvckVuZCA8PSBkZXNjcmlwdG9yU3RhcnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZT4KK3N0YXRpYyB2b2lkIHRva2VuaXplRGVzY3JpcHRvcnMoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGF0dHJpYnV0ZUVuZCwgVmVjdG9yPFN0cmluZ1Zp
ZXc+JiBkZXNjcmlwdG9ycykKK3sKKyAgICBEZXNjcmlwdG9yVG9rZW5pemVyU3RhdGUgc3RhdGUg
PSBTdGFydDsKKyAgICBjb25zdCBDaGFyVHlwZSogZGVzY3JpcHRvcnNTdGFydCA9IHBvc2l0aW9u
OworICAgIGNvbnN0IENoYXJUeXBlKiBjdXJyZW50RGVzY3JpcHRvclN0YXJ0ID0gZGVzY3JpcHRv
cnNTdGFydDsKKyAgICBmb3IgKDsgOyArK3Bvc2l0aW9uKSB7CisgICAgICAgIHN3aXRjaCAoc3Rh
dGUpIHsKKyAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgIGlmIChpc0VPRihwb3NpdGlv
biwgYXR0cmlidXRlRW5kKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZERlc2NyaXB0b3JBbmRS
ZXNldChjdXJyZW50RGVzY3JpcHRvclN0YXJ0LCBhdHRyaWJ1dGVFbmQsIGRlc2NyaXB0b3JzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aXNDb21tYSgqcG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kRGVzY3JpcHRvckFu
ZFJlc2V0KGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIHBvc2l0aW9uLCBkZXNjcmlwdG9ycyk7Cisg
ICAgICAgICAgICAgICAgKytwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkgeworICAg
ICAgICAgICAgICAgIGFwcGVuZERlc2NyaXB0b3JBbmRSZXNldChjdXJyZW50RGVzY3JpcHRvclN0
YXJ0LCBwb3NpdGlvbiwgZGVzY3JpcHRvcnMpOworICAgICAgICAgICAgICAgIGN1cnJlbnREZXNj
cmlwdG9yU3RhcnQgPSBwb3NpdGlvbiArIDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBBZnRl
clRva2VuOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcG9zaXRpb24gPT0gJygnKSB7CisgICAg
ICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVyKGN1cnJlbnREZXNjcmlwdG9yU3RhcnQsIHBvc2l0
aW9uKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEluUGFyZW50aGVzaXM7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoY3VycmVudERlc2NyaXB0
b3JTdGFydCwgcG9zaXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5Q
YXJlbnRoZXNpczoKKyAgICAgICAgICAgIGlmIChpc0VPRihwb3NpdGlvbiwgYXR0cmlidXRlRW5k
KSkgeworICAgICAgICAgICAgICAgIGFwcGVuZERlc2NyaXB0b3JBbmRSZXNldChjdXJyZW50RGVz
Y3JpcHRvclN0YXJ0LCBhdHRyaWJ1dGVFbmQsIGRlc2NyaXB0b3JzKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnBvc2l0aW9uID09ICcp
JykgeworICAgICAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcihjdXJyZW50RGVzY3JpcHRvclN0
YXJ0LCBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGFydDsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcihjdXJyZW50RGVzY3Jp
cHRvclN0YXJ0LCBwb3NpdGlvbik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
ZnRlclRva2VuOgorICAgICAgICAgICAgaWYgKGlzRU9GKHBvc2l0aW9uLCBhdHRyaWJ1dGVFbmQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghaXNIVE1MU3BhY2Uo
KnBvc2l0aW9uKSkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhcnQ7CisgICAgICAgICAg
ICAgICAgY3VycmVudERlc2NyaXB0b3JTdGFydCA9IHBvc2l0aW9uOworICAgICAgICAgICAgICAg
IC0tcG9zaXRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KIAotICAgICAgICAtLWRlc2NyaXB0b3JFbmQ7Ci0gICAgICAgIC8vIFRoaXMg
cGFydCBkaWZmZXJzIGZyb20gdGhlIHNwZWMgYXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24g
b25seSBzdXBwb3J0cyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3JzLgotICAgICAgICBpZiAoYXR0
cmlidXRlW2Rlc2NyaXB0b3JFbmRdICE9ICd4JykKK3N0YXRpYyBib29sIHBhcnNlRGVzY3JpcHRv
cnMoVmVjdG9yPFN0cmluZ1ZpZXc+JiBkZXNjcmlwdG9ycywgRGVzY3JpcHRvclBhcnNpbmdSZXN1
bHQmIHJlc3VsdCkKK3sKKyAgICBmb3IgKGF1dG8mIGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykg
eworICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAoaXNGb3VuZFNjYWxlRmFjdG9yKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGUuaXM4Qml0KCkpCi0gICAgICAgICAgICBp
bWFnZVNjYWxlRmFjdG9yID0gY2hhcmFjdGVyc1RvRmxvYXQoYXR0cmlidXRlLmNoYXJhY3RlcnM4
KCkgKyBkZXNjcmlwdG9yU3RhcnQsIGRlc2NyaXB0b3JFbmQgLSBkZXNjcmlwdG9yU3RhcnQsICZp
c1ZhbGlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW1hZ2VTY2FsZUZhY3RvciA9IGNo
YXJhY3RlcnNUb0Zsb2F0KGF0dHJpYnV0ZS5jaGFyYWN0ZXJzMTYoKSArIGRlc2NyaXB0b3JTdGFy
dCwgZGVzY3JpcHRvckVuZCAtIGRlc2NyaXB0b3JTdGFydCwgJmlzVmFsaWQpOwotICAgICAgICBp
c0ZvdW5kU2NhbGVGYWN0b3IgPSB0cnVlOworICAgICAgICB1bnNpZ25lZCBkZXNjcmlwdG9yQ2hh
clBvc2l0aW9uID0gZGVzY3JpcHRvci5sZW5ndGgoKSAtIDE7CisgICAgICAgIFVDaGFyIGRlc2Ny
aXB0b3JDaGFyID0gZGVzY3JpcHRvcltkZXNjcmlwdG9yQ2hhclBvc2l0aW9uXTsKKyAgICAgICAg
ZGVzY3JpcHRvciA9IGRlc2NyaXB0b3Iuc3Vic3RyaW5nKDAsIGRlc2NyaXB0b3JDaGFyUG9zaXRp
b24pOworICAgICAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRlc2NyaXB0
b3JDaGFyID09ICd4JykgeworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNEZW5zaXR5KCkgfHwg
cmVzdWx0Lmhhc0hlaWdodCgpIHx8IHJlc3VsdC5oYXNXaWR0aCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZsb2F0IGRlbnNpdHkgPSBkZXNjcmlwdG9yLnRv
RmxvYXQoaXNWYWxpZCk7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQgfHwgZGVuc2l0eSA8IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0LnNldERl
bnNpdHkoZGVuc2l0eSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvckNoYXIgPT0gJ3cn
KSB7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0RlbnNpdHkoKSB8fCByZXN1bHQuaGFzV2lk
dGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbnQgcmVz
b3VyY2VXaWR0aCA9IGRlc2NyaXB0b3IudG9JbnQoaXNWYWxpZCk7CisgICAgICAgICAgICBpZiAo
IWlzVmFsaWQgfHwgcmVzb3VyY2VXaWR0aCA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yQ2hhciA9PSAnaCcpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgaGVyZSBvbmx5IGZvciBmdXR1cmUgY29tcGF0IHB1cnBvc2VzLgor
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9mIHRoZSAnaCcgZGVzY3JpcHRvciBpcyBub3QgdXNl
ZC4KKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRGVuc2l0eSgpIHx8IHJlc3VsdC5oYXNIZWln
aHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpbnQgcmVz
b3VyY2VIZWlnaHQgPSBkZXNjcmlwdG9yLnRvSW50KGlzVmFsaWQpOworICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkIHx8IHJlc291cmNlSGVpZ2h0IDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmVzdWx0LnNldFJlc291cmNlSGVpZ2h0KHJlc291cmNlSGVp
Z2h0KTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBpc0VtcHR5RGVzY3JpcHRvciB8
fCBpc1ZhbGlkOworICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBTZWUgdGhlIHNwZWNpZmljYXRp
b25zIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGFsZ29yaXRobSB0byBmb2xsb3cuCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELWh0bWwtc3Jjc2V0LTIwMTMwMjI4LyNwcm9jZXNz
aW5nLXRoZS1pbWFnZS1jYW5kaWRhdGVzLgotc3RhdGljIHZvaWQgcGFyc2VJbWFnZXNXaXRoU2Nh
bGVGcm9tU3Jjc2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgc3Jjc2V0QXR0cmlidXRlLCBJbWFn
ZUNhbmRpZGF0ZXMmIGltYWdlQ2FuZGlkYXRlcykKKy8vIGh0dHA6Ly9waWN0dXJlLnJlc3BvbnNp
dmVpbWFnZXMub3JnLyNwYXJzZS1zcmNzZXQtYXR0cgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5
cGU+CitzdGF0aWMgdm9pZCBwYXJzZUltYWdlQ2FuZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGUo
Y29uc3QgQ2hhclR5cGUqIGF0dHJpYnV0ZVN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIFZlY3RvcjxJ
bWFnZUNhbmRpZGF0ZT4mIGltYWdlQ2FuZGlkYXRlcykKIHsKLSAgICBBU1NFUlQoaW1hZ2VDYW5k
aWRhdGVzLmlzRW1wdHkoKSk7CisgICAgY29uc3QgQ2hhclR5cGUqIGF0dHJpYnV0ZUVuZCA9IGF0
dHJpYnV0ZVN0YXJ0ICsgbGVuZ3RoOwogCi0gICAgc2l6ZV90IGltYWdlQ2FuZGlkYXRlU3RhcnQg
PSAwOwotICAgIHVuc2lnbmVkIHNyY3NldEF0dHJpYnV0ZUxlbmd0aCA9IHNyY3NldEF0dHJpYnV0
ZS5sZW5ndGgoKTsKLQotICAgIHdoaWxlIChpbWFnZUNhbmRpZGF0ZVN0YXJ0IDwgc3Jjc2V0QXR0
cmlidXRlTGVuZ3RoKSB7Ci0gICAgICAgIGZsb2F0IGltYWdlU2NhbGVGYWN0b3IgPSAxOwotICAg
ICAgICBzaXplX3Qgc2VwYXJhdG9yOwotCi0gICAgICAgIC8vIDQuIFNwbGl0dGluZyBsb29wOiBT
a2lwIHdoaXRlc3BhY2UuCi0gICAgICAgIHNpemVfdCBpbWFnZVVSTFN0YXJ0ID0gc3Jjc2V0QXR0
cmlidXRlLmZpbmQoaXNOb3RIVE1MU3BhY2UsIGltYWdlQ2FuZGlkYXRlU3RhcnQpOwotICAgICAg
ICBpZiAoaW1hZ2VVUkxTdGFydCA9PSBub3RGb3VuZCkKKyAgICBmb3IgKGNvbnN0IENoYXJUeXBl
KiBwb3NpdGlvbiA9IGF0dHJpYnV0ZVN0YXJ0OyBwb3NpdGlvbiA8IGF0dHJpYnV0ZUVuZDspIHsK
KyAgICAgICAgLy8gNC4gU3BsaXR0aW5nIGxvb3A6IENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFy
YWN0ZXJzIHRoYXQgYXJlIHNwYWNlIGNoYXJhY3RlcnMgb3IgVSswMDJDIENPTU1BIGNoYXJhY3Rl
cnMuCisgICAgICAgIHNraXBXaGlsZTxDaGFyVHlwZSwgaXNIVE1MU3BhY2VPckNvbW1hPENoYXJU
eXBlPiA+KHBvc2l0aW9uLCBhdHRyaWJ1dGVFbmQpOworICAgICAgICBpZiAocG9zaXRpb24gPT0g
YXR0cmlidXRlRW5kKSB7CisgICAgICAgICAgICAvLyBDb250cmFyeSB0byBzcGVjIGxhbmd1YWdl
IC0gZGVzY3JpcHRvciBwYXJzaW5nIGhhcHBlbnMgb24gZWFjaCBjYW5kaWRhdGUsIHNvIHdoZW4g
d2UgcmVhY2ggdGhlIGF0dHJpYnV0ZUVuZCwgd2UgY2FuIGV4aXQuCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgLy8gSWYgVGhlIGN1cnJlbnQgY2FuZGlkYXRlIGlzIGVpdGhlciB0b3RhbGx5
IGVtcHR5IG9yIG9ubHkgY29udGFpbnMgc3BhY2UsIHNraXBwaW5nLgotICAgICAgICBpZiAoc3Jj
c2V0QXR0cmlidXRlW2ltYWdlVVJMU3RhcnRdID09ICcsJykgewotICAgICAgICAgICAgaW1hZ2VD
YW5kaWRhdGVTdGFydCA9IGltYWdlVVJMU3RhcnQgKyAxOwotICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgLy8gNS4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3Rl
cnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMsIGFuZCBsZXQgdGhhdCBiZSB1cmwuCi0g
ICAgICAgIHNpemVfdCBpbWFnZVVSTEVuZCA9IHNyY3NldEF0dHJpYnV0ZS5maW5kKGlzSFRNTFNw
YWNlLCBpbWFnZVVSTFN0YXJ0ICsgMSk7Ci0gICAgICAgIGlmIChpbWFnZVVSTEVuZCA9PSBub3RG
b3VuZCkgewotICAgICAgICAgICAgaW1hZ2VVUkxFbmQgPSBzcmNzZXRBdHRyaWJ1dGVMZW5ndGg7
Ci0gICAgICAgICAgICBzZXBhcmF0b3IgPSBzcmNzZXRBdHRyaWJ1dGVMZW5ndGg7Ci0gICAgICAg
IH0gZWxzZSBpZiAoc3Jjc2V0QXR0cmlidXRlW2ltYWdlVVJMRW5kIC0gMV0gPT0gJywnKSB7Ci0g
ICAgICAgICAgICAtLWltYWdlVVJMRW5kOwotICAgICAgICAgICAgc2VwYXJhdG9yID0gaW1hZ2VV
UkxFbmQ7CisgICAgICAgIGNvbnN0IENoYXJUeXBlKiBpbWFnZVVSTFN0YXJ0ID0gcG9zaXRpb247
CisgICAgICAgIC8vIDYuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJl
IG5vdCBzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgbGV0IHRoYXQgYmUgdXJsLgorCisgICAgICAgIHNr
aXBVbnRpbDxDaGFyVHlwZSwgaXNIVE1MU3BhY2U8Q2hhclR5cGU+ID4ocG9zaXRpb24sIGF0dHJp
YnV0ZUVuZCk7CisgICAgICAgIGNvbnN0IENoYXJUeXBlKiBpbWFnZVVSTEVuZCA9IHBvc2l0aW9u
OworCisgICAgICAgIERlc2NyaXB0b3JQYXJzaW5nUmVzdWx0IHJlc3VsdDsKKworICAgICAgICAv
LyA4LiBJZiB1cmwgZW5kcyB3aXRoIGEgVSswMDJDIENPTU1BIGNoYXJhY3RlciAoLCkKKyAgICAg
ICAgaWYgKGlzQ29tbWEoKihwb3NpdGlvbiAtIDEpKSkgeworICAgICAgICAgICAgLy8gUmVtb3Zl
IGFsbCB0cmFpbGluZyBVKzAwMkMgQ09NTUEgY2hhcmFjdGVycyBmcm9tIHVybC4KKyAgICAgICAg
ICAgIGltYWdlVVJMRW5kID0gcG9zaXRpb24gLSAxOworICAgICAgICAgICAgcmV2ZXJzZVNraXBX
aGlsZTxDaGFyVHlwZSwgaXNDb21tYT4oaW1hZ2VVUkxFbmQsIGltYWdlVVJMU3RhcnQpOworICAg
ICAgICAgICAgKytpbWFnZVVSTEVuZDsKKyAgICAgICAgICAgIC8vIElmIHVybCBpcyBlbXB0eSwg
dGhlbiBqdW1wIHRvIHRoZSBzdGVwIGxhYmVsZWQgc3BsaXR0aW5nIGxvb3AuCisgICAgICAgICAg
ICBpZiAoaW1hZ2VVUkxTdGFydCA9PSBpbWFnZVVSTEVuZCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDcuIENvbGxlY3QgYSBzZXF1
ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCAiLCIgKFUrMDAyQykgY2hhcmFjdGVycywg
YW5kIGxldCB0aGF0IGJlIGRlc2NyaXB0b3JzLgotICAgICAgICAgICAgc2l6ZV90IGltYWdlU2Nh
bGVTdGFydCA9IHNyY3NldEF0dHJpYnV0ZS5maW5kKGlzTm90SFRNTFNwYWNlLCBpbWFnZVVSTEVu
ZCArIDEpOwotICAgICAgICAgICAgaW1hZ2VTY2FsZVN0YXJ0ID0gKGltYWdlU2NhbGVTdGFydCA9
PSBub3RGb3VuZCkgPyBzcmNzZXRBdHRyaWJ1dGVMZW5ndGggOiBpbWFnZVNjYWxlU3RhcnQ7Ci0g
ICAgICAgICAgICBzaXplX3QgaW1hZ2VTY2FsZUVuZCA9IHNyY3NldEF0dHJpYnV0ZS5maW5kKCcs
JyAsIGltYWdlU2NhbGVTdGFydCArIDEpOwotICAgICAgICAgICAgaW1hZ2VTY2FsZUVuZCA9IChp
bWFnZVNjYWxlRW5kID09IG5vdEZvdW5kKSA/IHNyY3NldEF0dHJpYnV0ZUxlbmd0aCA6IGltYWdl
U2NhbGVFbmQ7Ci0KLSAgICAgICAgICAgIGlmICghcGFyc2VEZXNjcmlwdG9ycyhzcmNzZXRBdHRy
aWJ1dGUsIGltYWdlU2NhbGVTdGFydCwgaW1hZ2VTY2FsZUVuZCwgaW1hZ2VTY2FsZUZhY3Rvcikp
IHsKLSAgICAgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gaW1hZ2VTY2FsZUVuZCAr
IDE7CisgICAgICAgICAgICAvLyBBZHZhbmNpbmcgcG9zaXRpb24gaGVyZSAoY29udHJhcnkgdG8g
c3BlYykgdG8gYXZvaWQgYW4gdXNlbGVzcyBleHRyYSBzdGF0ZSBtYWNoaW5lIHN0ZXAuCisgICAg
ICAgICAgICAvLyBGaWxlZCBhIHNwZWMgYnVnOiBodHRwczovL2dpdGh1Yi5jb20vUmVzcG9uc2l2
ZUltYWdlc0NHL3BpY3R1cmUtZWxlbWVudC9pc3N1ZXMvMTg5CisgICAgICAgICAgICArK3Bvc2l0
aW9uOworICAgICAgICAgICAgVmVjdG9yPFN0cmluZ1ZpZXc+IGRlc2NyaXB0b3JUb2tlbnM7Cisg
ICAgICAgICAgICB0b2tlbml6ZURlc2NyaXB0b3JzKHBvc2l0aW9uLCBhdHRyaWJ1dGVFbmQsIGRl
c2NyaXB0b3JUb2tlbnMpOworICAgICAgICAgICAgLy8gQ29udHJhcnkgdG8gc3BlYyBsYW5ndWFn
ZSAtIGRlc2NyaXB0b3IgcGFyc2luZyBoYXBwZW5zIG9uIGVhY2ggY2FuZGlkYXRlLgorICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIGJsYWNrLWJveCBlcXVpdmFsZW50LCB0byBhdm9pZCBzdG9yaW5n
IGRlc2NyaXB0b3IgbGlzdHMgZm9yIGVhY2ggY2FuZGlkYXRlLgorICAgICAgICAgICAgaWYgKCFw
YXJzZURlc2NyaXB0b3JzKGRlc2NyaXB0b3JUb2tlbnMsIHJlc3VsdCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXBhcmF0b3IgPSBpbWFn
ZVNjYWxlRW5kOwogICAgICAgICB9Ci0gICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlKGltYWdl
VVJMU3RhcnQsIGltYWdlVVJMRW5kIC0gaW1hZ2VVUkxTdGFydCwgaW1hZ2VTY2FsZUZhY3Rvcik7
Ci0gICAgICAgIGltYWdlQ2FuZGlkYXRlcy5hcHBlbmQoaW1hZ2UpOworCisgICAgICAgIEFTU0VS
VChpbWFnZVVSTEVuZCA+IGltYWdlVVJMU3RhcnQpOworICAgICAgICB1bnNpZ25lZCBpbWFnZVVS
TExlbmd0aCA9IGltYWdlVVJMRW5kIC0gaW1hZ2VVUkxTdGFydDsKKyAgICAgICAgaW1hZ2VDYW5k
aWRhdGVzLmFwcGVuZChJbWFnZUNhbmRpZGF0ZShTdHJpbmdWaWV3KGltYWdlVVJMU3RhcnQsIGlt
YWdlVVJMTGVuZ3RoKSwgcmVzdWx0LCBJbWFnZUNhbmRpZGF0ZTo6U3Jjc2V0T3JpZ2luKSk7CiAg
ICAgICAgIC8vIDExLiBSZXR1cm4gdG8gdGhlIHN0ZXAgbGFiZWxlZCBzcGxpdHRpbmcgbG9vcC4K
LSAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CiAgICAgfQogfQog
Ci1JbWFnZVdpdGhTY2FsZSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwgY29uc3QgU3RyaW5n
JiBzcmNzZXRBdHRyaWJ1dGUpCitzdGF0aWMgdm9pZCBwYXJzZUltYWdlQ2FuZGlkYXRlc0Zyb21T
cmNzZXRBdHRyaWJ1dGUoU3RyaW5nVmlldyBhdHRyaWJ1dGUsIFZlY3RvcjxJbWFnZUNhbmRpZGF0
ZT4mIGltYWdlQ2FuZGlkYXRlcykKIHsKLSAgICBJbWFnZUNhbmRpZGF0ZXMgaW1hZ2VDYW5kaWRh
dGVzOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVwbGFjaW5nIHRoZSBkaXJl
Y3QgcG9pbnRlcnMgaW4gdGhlIHBhcnNpbmcgcHJvY2VzcyB3aXRoIFN0cmluZ1ZpZXcgYW5kIHBv
c2l0aW9ucy4KKyAgICBpZiAoYXR0cmlidXRlLmlzOEJpdCgpKQorICAgICAgICBwYXJzZUltYWdl
Q2FuZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGU8TENoYXI+KGF0dHJpYnV0ZS5jaGFyYWN0ZXJz
OCgpLCBhdHRyaWJ1dGUubGVuZ3RoKCksIGltYWdlQ2FuZGlkYXRlcyk7CisgICAgZWxzZQorICAg
ICAgICBwYXJzZUltYWdlQ2FuZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGU8VUNoYXI+KGF0dHJp
YnV0ZS5jaGFyYWN0ZXJzMTYoKSwgYXR0cmlidXRlLmxlbmd0aCgpLCBpbWFnZUNhbmRpZGF0ZXMp
OworfQogCi0gICAgcGFyc2VJbWFnZXNXaXRoU2NhbGVGcm9tU3Jjc2V0QXR0cmlidXRlKHNyY3Nl
dEF0dHJpYnV0ZSwgaW1hZ2VDYW5kaWRhdGVzKTsKK3N0YXRpYyBJbWFnZUNhbmRpZGF0ZSBwaWNr
QmVzdEltYWdlQ2FuZGlkYXRlKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBWZWN0b3I8SW1hZ2VD
YW5kaWRhdGU+JiBpbWFnZUNhbmRpZGF0ZXMpCit7CisgICAgaWYgKGltYWdlQ2FuZGlkYXRlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbWFnZUNhbmRpZGF0ZSgpOwogCi0gICAgaWYgKCFz
cmNBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEltYWdlV2l0aFNjYWxlIHNyY1BsYWNl
aG9sZGVySW1hZ2U7Ci0gICAgICAgIGltYWdlQ2FuZGlkYXRlcy5hcHBlbmQoc3JjUGxhY2Vob2xk
ZXJJbWFnZSk7CisgICAgLy8gaHR0cDovL3BpY3R1cmUucmVzcG9uc2l2ZWltYWdlcy5vcmcvI25v
cm1hbGl6ZS1zb3VyY2UtZGVuc2l0aWVzCisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBpbWFn
ZUNhbmRpZGF0ZXMpIHsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZW5zaXR5IDwgMCkKKyAgICAg
ICAgICAgIGNhbmRpZGF0ZS5kZW5zaXR5ID0gRGVmYXVsdERlbnNpdHlWYWx1ZTsKICAgICB9CiAK
LSAgICBpZiAoaW1hZ2VDYW5kaWRhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEltYWdl
V2l0aFNjYWxlKCk7Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0KGltYWdlQ2FuZGlkYXRlcy5iZWdp
bigpLCBpbWFnZUNhbmRpZGF0ZXMuZW5kKCksIGNvbXBhcmVCeVNjYWxlRmFjdG9yKTsKKyAgICBz
dGQ6OnN0YWJsZV9zb3J0KGltYWdlQ2FuZGlkYXRlcy5iZWdpbigpLCBpbWFnZUNhbmRpZGF0ZXMu
ZW5kKCksIGNvbXBhcmVCeURlbnNpdHkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bWFnZUNhbmRpZGF0ZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGlmIChpbWFnZUNhbmRp
ZGF0ZXNbaV0uc2NhbGVGYWN0b3IoKSA+PSBkZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgICAg
IHJldHVybiBpbWFnZUNhbmRpZGF0ZXNbaV07CisgICAgdW5zaWduZWQgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgaW1hZ2VDYW5kaWRhdGVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBpZiAo
KGltYWdlQ2FuZGlkYXRlc1tpXS5kZW5zaXR5ID49IGRldmljZVNjYWxlRmFjdG9yKSkKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGZsb2F0IHdpbm5pbmdEZW5zaXR5ID0gaW1hZ2VD
YW5kaWRhdGVzW2ldLmRlbnNpdHk7CisKKyAgICB1bnNpZ25lZCB3aW5uZXIgPSBpOwogICAgIC8v
IDE2LiBJZiBhbiBlbnRyeSBiIGluIGNhbmRpZGF0ZXMgaGFzIHRoZSBzYW1lIGFzc29jaWF0ZWQg
Li4uIHBpeGVsIGRlbnNpdHkgYXMgYW4gZWFybGllciBlbnRyeSBhIGluIGNhbmRpZGF0ZXMsCiAg
ICAgLy8gdGhlbiByZW1vdmUgZW50cnkgYgotICAgIHNpemVfdCB3aW5uZXIgPSBpbWFnZUNhbmRp
ZGF0ZXMuc2l6ZSgpIC0gMTsKLSAgICBzaXplX3QgcHJldmlvdXNDYW5kaWRhdGUgPSB3aW5uZXI7
Ci0gICAgZmxvYXQgd2lubmluZ1NjYWxlRmFjdG9yID0gaW1hZ2VDYW5kaWRhdGVzLmxhc3QoKS5z
Y2FsZUZhY3RvcigpOwotICAgIHdoaWxlICgocHJldmlvdXNDYW5kaWRhdGUgPiAwKSAmJiAoaW1h
Z2VDYW5kaWRhdGVzWy0tcHJldmlvdXNDYW5kaWRhdGVdLnNjYWxlRmFjdG9yKCkgPT0gd2lubmlu
Z1NjYWxlRmFjdG9yKSkKLSAgICAgICAgd2lubmVyID0gcHJldmlvdXNDYW5kaWRhdGU7CisgICAg
d2hpbGUgKChpID4gMCkgJiYgKGltYWdlQ2FuZGlkYXRlc1stLWldLmRlbnNpdHkgPT0gd2lubmlu
Z0RlbnNpdHkpKQorICAgICAgICB3aW5uZXIgPSBpOwogCiAgICAgcmV0dXJuIGltYWdlQ2FuZGlk
YXRlc1t3aW5uZXJdOwogfQogCitJbWFnZUNhbmRpZGF0ZSBiZXN0Rml0U291cmNlRm9ySW1hZ2VB
dHRyaWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBBdG9taWNTdHJpbmcmIHNy
Y0F0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBzcmNzZXRBdHRyaWJ1dGUpCit7CisgICAg
aWYgKHNyY3NldEF0dHJpYnV0ZS5pc051bGwoKSkgeworICAgICAgICBpZiAoc3JjQXR0cmlidXRl
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEltYWdlQ2FuZGlkYXRlKCk7CisgICAgICAg
IHJldHVybiBJbWFnZUNhbmRpZGF0ZShTdHJpbmdWaWV3KHNyY0F0dHJpYnV0ZSksIERlc2NyaXB0
b3JQYXJzaW5nUmVzdWx0KCksIEltYWdlQ2FuZGlkYXRlOjpTcmNPcmlnaW4pOworICAgIH0KKwor
ICAgIFZlY3RvcjxJbWFnZUNhbmRpZGF0ZT4gaW1hZ2VDYW5kaWRhdGVzOworCisgICAgcGFyc2VJ
bWFnZUNhbmRpZGF0ZXNGcm9tU3Jjc2V0QXR0cmlidXRlKFN0cmluZ1ZpZXcoc3Jjc2V0QXR0cmli
dXRlKSwgaW1hZ2VDYW5kaWRhdGVzKTsKKworICAgIGlmICghc3JjQXR0cmlidXRlLmlzRW1wdHko
KSkKKyAgICAgICAgaW1hZ2VDYW5kaWRhdGVzLmFwcGVuZChJbWFnZUNhbmRpZGF0ZShTdHJpbmdW
aWV3KHNyY0F0dHJpYnV0ZSksIERlc2NyaXB0b3JQYXJzaW5nUmVzdWx0KCksIEltYWdlQ2FuZGlk
YXRlOjpTcmNPcmlnaW4pKTsKKworICAgIHJldHVybiBwaWNrQmVzdEltYWdlQ2FuZGlkYXRlKGRl
dmljZVNjYWxlRmFjdG9yLCBpbWFnZUNhbmRpZGF0ZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmgK
aW5kZXggMzQ1OGI1OTZlMjg0OTcwMzAzZGM5YmRjZDdiZmEwMzQ5Y2NiYTE4Ny4uNjI0NzI5NDJh
ZDUyZTQwZmU1NzdiNjM2OTM3YjhmMzM1ZmU0Nzg5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNyY3NldFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTcmNzZXRQYXJzZXIuaApAQCAtMSw3MyArMSwxMDQgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSFRNTFNyY3NldFBhcnNlcl9oCiAj
ZGVmaW5lIEhUTUxTcmNzZXRQYXJzZXJfaAogCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEltYWdlV2l0aFNjYWxlIHsKK2NvbnN0IGludCBVbmluaXRpYWxpemVkRGVz
Y3JpcHRvciA9IC0xOworY29uc3QgZmxvYXQgRGVmYXVsdERlbnNpdHlWYWx1ZSA9IDEuMDsKKwor
Y2xhc3MgRGVzY3JpcHRvclBhcnNpbmdSZXN1bHQgewogcHVibGljOgotICAgIEltYWdlV2l0aFNj
YWxlKCkKLSAgICAgICAgOiBtX2ltYWdlVVJMU3RhcnQoMCkKLSAgICAgICAgLCBtX2ltYWdlVVJM
TGVuZ3RoKDApCi0gICAgICAgICwgbV9zY2FsZUZhY3RvcigxKQorICAgIERlc2NyaXB0b3JQYXJz
aW5nUmVzdWx0KCkKKyAgICAgICAgOiBtX2RlbnNpdHkoVW5pbml0aWFsaXplZERlc2NyaXB0b3Ip
CisgICAgICAgICwgbV9yZXNvdXJjZVdpZHRoKFVuaW5pdGlhbGl6ZWREZXNjcmlwdG9yKQorICAg
ICAgICAsIG1fcmVzb3VyY2VIZWlnaHQoVW5pbml0aWFsaXplZERlc2NyaXB0b3IpCiAgICAgewog
ICAgIH0KIAotICAgIEltYWdlV2l0aFNjYWxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIGZsb2F0IHNjYWxlRmFjdG9yKQotICAgICAgICA6IG1faW1hZ2VVUkxTdGFydChzdGFydCkK
LSAgICAgICAgLCBtX2ltYWdlVVJMTGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX3NjYWxlRmFj
dG9yKHNjYWxlRmFjdG9yKQorICAgIGJvb2wgaGFzRGVuc2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVuc2l0eSA+PSAwOyB9CisgICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VXaWR0aCA+PSAwOyB9CisgICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlSGVpZ2h0ID49IDA7IH0KKworICAgIGZsb2F0IGRlbnNpdHkoKSBjb25zdCB7IEFT
U0VSVChoYXNEZW5zaXR5KCkpOyByZXR1cm4gbV9kZW5zaXR5OyB9CisgICAgdW5zaWduZWQgcmVz
b3VyY2VXaWR0aCgpIGNvbnN0IHsgQVNTRVJUKGhhc1dpZHRoKCkpOyByZXR1cm4gbV9yZXNvdXJj
ZVdpZHRoOyB9CisgICAgdW5zaWduZWQgcmVzb3VyY2VIZWlnaHQoKSBjb25zdCB7IEFTU0VSVCho
YXNIZWlnaHQoKSk7IHJldHVybiBtX3Jlc291cmNlSGVpZ2h0OyB9CisKKyAgICB2b2lkIHNldFJl
c291cmNlV2lkdGgoaW50IHdpZHRoKSB7IEFTU0VSVCh3aWR0aCA+PSAwKTsgbV9yZXNvdXJjZVdp
ZHRoID0gKHVuc2lnbmVkKXdpZHRoOyB9CisgICAgdm9pZCBzZXRSZXNvdXJjZUhlaWdodChpbnQg
aGVpZ2h0KSB7IEFTU0VSVChoZWlnaHQgPj0gMCk7IG1fcmVzb3VyY2VIZWlnaHQgPSAodW5zaWdu
ZWQpaGVpZ2h0OyB9CisgICAgdm9pZCBzZXREZW5zaXR5KGZsb2F0IGRlbnNpdHlUb1NldCkgeyBB
U1NFUlQoZGVuc2l0eVRvU2V0ID49IDApOyBtX2RlbnNpdHkgPSBkZW5zaXR5VG9TZXQ7IH0KKwor
cHJpdmF0ZToKKyAgICBmbG9hdCBtX2RlbnNpdHk7CisgICAgaW50IG1fcmVzb3VyY2VXaWR0aDsK
KyAgICBpbnQgbV9yZXNvdXJjZUhlaWdodDsKK307CisKK3N0cnVjdCBJbWFnZUNhbmRpZGF0ZSB7
CisgICAgZW51bSBPcmlnaW5BdHRyaWJ1dGUgeworICAgICAgICBTcmNzZXRPcmlnaW4sCisgICAg
ICAgIFNyY09yaWdpbgorICAgIH07CisKKyAgICBJbWFnZUNhbmRpZGF0ZSgpCisgICAgICAgIDog
ZGVuc2l0eShEZWZhdWx0RGVuc2l0eVZhbHVlKQorICAgICAgICAsIHJlc291cmNlV2lkdGgoVW5p
bml0aWFsaXplZERlc2NyaXB0b3IpCisgICAgICAgICwgb3JpZ2luQXR0cmlidXRlKFNyY3NldE9y
aWdpbikKICAgICB7CiAgICAgfQogCi0gICAgU3RyaW5nIGltYWdlVVJMKGNvbnN0IFN0cmluZyYg
c3JjQXR0cmlidXRlLCBjb25zdCBTdHJpbmcmIHNyY3NldEF0dHJpYnV0ZSkgY29uc3QKKyAgICBJ
bWFnZUNhbmRpZGF0ZShjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2UsIGNvbnN0IERlc2NyaXB0b3JQ
YXJzaW5nUmVzdWx0JiByZXN1bHQsIE9yaWdpbkF0dHJpYnV0ZSBvcmlnaW5BdHRyaWJ1dGUpCisg
ICAgICAgIDogc3RyaW5nKHNvdXJjZSkKKyAgICAgICAgLCBkZW5zaXR5KHJlc3VsdC5oYXNEZW5z
aXR5KCkgPyByZXN1bHQuZGVuc2l0eSgpIDogVW5pbml0aWFsaXplZERlc2NyaXB0b3IpCisgICAg
ICAgICwgcmVzb3VyY2VXaWR0aChyZXN1bHQuaGFzV2lkdGgoKSA/IHJlc3VsdC5yZXNvdXJjZVdp
ZHRoKCkgOiBVbmluaXRpYWxpemVkRGVzY3JpcHRvcikKKyAgICAgICAgLCBvcmlnaW5BdHRyaWJ1
dGUob3JpZ2luQXR0cmlidXRlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VVUkxMZW5n
dGggPyBzcmNzZXRBdHRyaWJ1dGUuc3Vic3RyaW5nU2hhcmluZ0ltcGwobV9pbWFnZVVSTFN0YXJ0
LCBtX2ltYWdlVVJMTGVuZ3RoKSA6IHNyY0F0dHJpYnV0ZTsKICAgICB9CiAKLSAgICBmbG9hdCBz
Y2FsZUZhY3RvcigpIGNvbnN0CisgICAgYm9vbCBzcmNPcmlnaW4oKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2NhbGVGYWN0b3I7CisgICAgICAgIHJldHVybiAob3JpZ2luQXR0cmli
dXRlID09IFNyY09yaWdpbik7CiAgICAgfQogCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1faW1h
Z2VVUkxTdGFydDsKLSAgICB1bnNpZ25lZCBtX2ltYWdlVVJMTGVuZ3RoOwotICAgIGZsb2F0IG1f
c2NhbGVGYWN0b3I7CisgICAgU3RyaW5nVmlldyBzdHJpbmc7CisgICAgZmxvYXQgZGVuc2l0eTsK
KyAgICBpbnQgcmVzb3VyY2VXaWR0aDsKKyAgICBPcmlnaW5BdHRyaWJ1dGUgb3JpZ2luQXR0cmli
dXRlOwogfTsKIAotLy8gU3BhY2UgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIHNw
ZWNpZmljYXRpb24uCi1ib29sIGlzSFRNTFNwYWNlKFVDaGFyKTsKLWJvb2wgaXNIVE1MTGluZUJy
ZWFrKFVDaGFyKTsKLWJvb2wgaXNOb3RIVE1MU3BhY2UoVUNoYXIpOwotYm9vbCBpc0hUTUxTcGFj
ZUJ1dE5vdExpbmVCcmVhayhVQ2hhciBjaGFyYWN0ZXIpOwotCi1JbWFnZVdpdGhTY2FsZSBiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25z
dCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VTZXRBdHRyaWJ1dGUp
OworSW1hZ2VDYW5kaWRhdGUgYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgQXRvbWljU3RyaW5nJiBzcmNBdHRyaWJ1dGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgc3Jjc2V0QXR0cmlidXRlKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODgyYjgwMGJmMzk4
ZTllOTUxYWEzOWUxZmYyMmJmNDBjNDgyNDNhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaApAQCAtMCwwICsxLDgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBQYXJzaW5nVXRpbGl0aWVzX2gKKyNkZWZpbmUgUGFyc2luZ1V0aWxpdGllc19oCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlw
ZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0ZXIpCit7
CisgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKKyAg
ICAgICAgKytwb3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVy
UHJlZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBw
b3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKK3sKKyAgICBpZiAocG9zaXRpb24gPCBlbmQg
JiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpIHsKKyAgICAgICAgKytwb3NpdGlvbjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Cit2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSom
IHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0ZXIpCit7Cisg
ICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiAhPSBkZWxpbWl0ZXIpCisgICAg
ICAgICsrcG9zaXRpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNo
YXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlw
ZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQoreworICAgIHdoaWxlIChwb3NpdGlv
biA8IGVuZCAmJiAhY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCisgICAgICAgICsrcG9z
aXRpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclBy
ZWRpY2F0ZShDaGFyVHlwZSk+Cit2b2lkIHNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0
aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQoreworICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAm
JiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKKyAgICAgICAgKytwb3NpdGlvbjsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENo
YXJUeXBlKT4KK3ZvaWQgcmV2ZXJzZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9u
LCBjb25zdCBDaGFyVHlwZSogc3RhcnQpCit7CisgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0
ICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQorICAgICAgICAtLXBvc2l0aW9uOwor
fQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9QYXJz
aW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1BhcnNpbmdVdGlsaXRp
ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE4ZmE5ZTU1Mjk1Zjc2MzQ2YjU2
YTAyZDg4YWEyMmQyZjg1OGEzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1BhcnNpbmdVdGlsaXRpZXMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhcnNpbmdVdGlsaXRpZXNfaAot
I2RlZmluZSBQYXJzaW5nVXRpbGl0aWVzX2gKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+
Ci1ib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJU
eXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKLXsKLSAgICBpZiAocG9zaXRpb24gPCBlbmQg
JiYgKnBvc2l0aW9uID09IGRlbGltaXRlcikgewotICAgICAgICArK3Bvc2l0aW9uOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgotYm9v
bCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSog
ZW5kKQotewotICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBv
c2l0aW9uKSkgewotICAgICAgICArK3Bvc2l0aW9uOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4K
LXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBl
KiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKLXsKLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQg
JiYgKnBvc2l0aW9uICE9IGRlbGltaXRlcikKLSAgICAgICAgKytwb3NpdGlvbjsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBl
KT4KLXZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJU
eXBlKiBlbmQpCi17Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICFjaGFyYWN0ZXJQcmVk
aWNhdGUoKnBvc2l0aW9uKSkKLSAgICAgICAgKytwb3NpdGlvbjsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KLXZvaWQg
c2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQp
Ci17Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9z
aXRpb24pKQotICAgICAgICArK3Bvc2l0aW9uOwotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU4N2Uw
ODBmYWQ5NWE2OGE5Y2ViMDU1MDk1MGMwM2ZlNTcyODMyZDUuLmRmOTE0YWM4YjE1OTNiZGQxMzkx
MTU0MGI5ODdkNzVmYmJmNGM4YzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNC0wNi0wNCAg
WW9hdiBXZWlzcyAgPHlvYXZAeW9hdi53cz4KKworICAgICAgICBBbGlnbiBzcmNzZXQgcGFyc2Vy
IHdpdGggcmVjZW50IHNwZWMgY2hhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNTA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgSSBoYXZlIGNoYW5nZWQgdGhlICJpbnZhbGlkLWRlc2NyaXB0b3IiIHRl
c3QgYW5kIHJlbW92ZWQgdGhlICJpbnZhbGlkCisgICAgICAgIGlucHV0cyBjb3JyZWN0IHNyYyIg
dGVzdCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgaW52YWxpZCBkZXNjcmlwdG9ycworICAgICAg
ICBhcmUgbm93IHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gbnVsbCBkZXNjcmlwdG9ycy4gVGhhdCBp
cyBhY2NvcmRpbmcgdG8KKyAgICAgICAgdGhlIHNwZWMuCisgICAgICAgIEkndmUgYWxzbyBhZGRl
ZCBuZXcgdGVzdHMgdGhhdCBtYWtlIHN1cmUgdGhhdCB0aGUgc3BlYydzIGZ1dHVyZQorICAgICAg
ICBjb21wYXRpYmxlIGNoYW5nZXMgYXJlIHdvcmtpbmcuCisKKyAgICAgICAgKiBmYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1pbnZhbGlkLWRlc2NyaXB0b3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtZGVzY3JpcHRvci5odG1sOgorICAgICAg
ICAqIGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWNvcnJlY3Qtc3JjLWV4
cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1p
bnZhbGlkLWlucHV0cy1jb3JyZWN0LXNyYy5odG1sOiBSZW1vdmVkLgorCiAyMDE0LTA2LTA0ICBC
ZW0gSm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhcGVz
XSBJbWFnZSBsaWZldGltZSBpcyBub3QgcHJvcGVybHkgaGFuZGxlZCBmb3IgZ3JhZGllbnQgc2hh
cGVzCkBAIC05MzE1LDggKzkzMzQsOCBAQAogICAgICAgICAqIG1lZGlhL3RyYWNrL3czYy90cmFj
ay93ZWJ2dHQvc3VwcG9ydC9hbGlnbl9lbmRfbG9uZy52dHQ6IENvcGllZCBmcm9tIG1lZGlhL3Ry
YWNrL29wZXJhL3RyYWNrL3dlYnZ0dC9yZW5kZXJpbmcvcmVmdGVzdC9zdXBwb3J0L2FsaWduX2Vu
ZF9sb25nLnZ0dC4KICAgICAgICAgKiBtZWRpYS90cmFjay93M2MvdHJhY2svd2VidnR0L3N1cHBv
cnQvZm9vLnZ0dDogQ29waWVkIGZyb20gbWVkaWEvdHJhY2svb3BlcmEvdHJhY2svd2VidnR0L3Jl
bmRlcmluZy9yZWZ0ZXN0L3N1cHBvcnQvZm9vLnZ0dC4KICAgICAgICAgKiBtZWRpYS90cmFjay93
M2MvdHJhY2svd2VidnR0L3N1cHBvcnQvcmVmVGVzdFdhaXQuanM6IENvcGllZCBmcm9tIG1lZGlh
L3RyYWNrL29wZXJhL3RyYWNrL3dlYnZ0dC9yZW5kZXJpbmcvcmVmdGVzdC9zdXBwb3J0L3JlZlRl
c3RXYWl0LmpzLgotCQkqIHBsYXRmb3JtL2VmdC9UZXN0RXhwZWN0YXRpb25zOiBTa2lwIHczYyB0
ZXN0cy4KLQkJKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczogU2tpcCB3M2MgdGVzdHMu
CisgICAgICAgICogcGxhdGZvcm0vZWZ0L1Rlc3RFeHBlY3RhdGlvbnM6IFNraXAgdzNjIHRlc3Rz
LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOiBTa2lwIHczYyB0ZXN0
cy4KIAogMjAxNC0wNC0wOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWRlc2Ny
aXB0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
aW52YWxpZC1kZXNjcmlwdG9yLWV4cGVjdGVkLnR4dAppbmRleCA2ZGI1YmMxNGJhZTRlNDg5OWQ4
M2JkNjYzNjBiODYxNTMxNDBlNzhmLi5lMjJlODVkMjhiNWQ5MjUzNWM4MmNlOGE4NDhmYjlhNWVl
MzEyMjRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1p
bnZhbGlkLWRlc2NyaXB0b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtZGVzY3JpcHRvci1leHBlY3RlZC50eHQKQEAgLTEsOCAr
MSwxMiBAQAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
Ci1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRXaWR0aD09MTAwIGlz
IHRydWUKLVBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbzIiKS5jbGllbnRXaWR0aD09
MjAwIGlzIHRydWUKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImludmFsaWRfd2l0aF94
IikuY2xpZW50V2lkdGggaXMgMTAwCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnZh
bGlkX3dpdGhvdXRfeCIpLmNsaWVudFdpZHRoIGlzIDEwMAorUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZnV0dXJlX2Rlc2NyaXB0b3IiKS5jbGllbnRXaWR0aCBpcyAxMDAKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ1dHVyZV9kZXNjcmlwdG9yX3dpdGhvdXRfeCIpLmNsaWVu
dFdpZHRoIGlzIDEwMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieF93aXRoX3dfaWdu
b3JlZCIpLmNsaWVudFdpZHRoIGlzIDIwMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
eF93aXRoX2hfaWdub3JlZCIpLmNsaWVudFdpZHRoIGlzIDIwMAogVGhpcyB0ZXN0IHBhc3NlcyBp
ZiB0aGUgaW1hZ2UgYmVsb3cgaXMgYSAxMDBweCBibHVlIHNxdWFyZSB3aGVuIHRoZSBkZXZpY2VT
Y2FsZUZhY3RvciBpcyAxLgogSXQgdGVzdHMgdGhhdCBldmVuIHRob3VnaCB0aGUgMXggcmVzb3Vy
Y2UgY29udGFpbnMgbWFueSBpbnZhbGlkIGRlc2NyaXB0b3JzLCBvbmx5IHRoZSBpbnZhbGlkIGRl
c2NyaXB0b3JzIGFyZSBpZ25vcmVkIChhY2NvcmRpbmcgdG8gdGhlIHNwZWMpLgotICAKKyAgICAg
ICAgIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52
YWxpZC1kZXNjcmlwdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3Nl
dC1pbnZhbGlkLWRlc2NyaXB0b3IuaHRtbAppbmRleCBiMWMwMmU4NzU5YWQ3OTVkODAwNDVlMmI0
ZWYxNDcxMjg2MDEzMTU4Li45NTA2OTk2OTIyOWJkOWYwOWU3NGRiODQ1YThlMTliOTQ1ZmUwMjE4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlk
LWRlc2NyaXB0b3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3Nl
dC1pbnZhbGlkLWRlc2NyaXB0b3IuaHRtbApAQCAtNyw4ICs3LDEyIEBACiA8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICAgICBhZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgn
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT0xMDAnKTsKLSAgICAg
ICAgc2hvdWxkQmVUcnVlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vMiIpLmNsaWVudFdp
ZHRoPT0yMDAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJp
bnZhbGlkX3dpdGhfeCIpLmNsaWVudFdpZHRoJywgJzEwMCcpOworICAgICAgICBzaG91bGRCZSgn
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImludmFsaWRfd2l0aG91dF94IikuY2xpZW50V2lkdGgn
LCAnMTAwJyk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnV0
dXJlX2Rlc2NyaXB0b3IiKS5jbGllbnRXaWR0aCcsICcxMDAnKTsKKyAgICAgICAgc2hvdWxkQmUo
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdXR1cmVfZGVzY3JpcHRvcl93aXRob3V0X3giKS5j
bGllbnRXaWR0aCcsICcxMDAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ4X3dpdGhfd19pZ25vcmVkIikuY2xpZW50V2lkdGgnLCAnMjAwJyk7CisgICAgICAg
IHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieF93aXRoX2hfaWdub3JlZCIpLmNs
aWVudFdpZHRoJywgJzIwMCcpOwogICAgIH0sIGZhbHNlKTsKIDwvc2NyaXB0PgogPC9oZWFkPgpA
QCAtMTcsNyArMjEsMTEgQEAKICAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdl
IGJlbG93IGlzIGEgMTAwcHggYmx1ZSBzcXVhcmUgd2hlbiB0aGUgZGV2aWNlU2NhbGVGYWN0b3Ig
aXMgMS48L2Rpdj4KICAgICA8ZGl2PiBJdCB0ZXN0cyB0aGF0IGV2ZW4gdGhvdWdoIHRoZSAxeCBy
ZXNvdXJjZSBjb250YWlucyBtYW55IGludmFsaWQgZGVzY3JpcHRvcnMsCiAgICAgICAgIG9ubHkg
dGhlIGludmFsaWQgZGVzY3JpcHRvcnMgYXJlIGlnbm9yZWQgKGFjY29yZGluZyB0byB0aGUgc3Bl
YykuPC9kaXY+Ci0gICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSJyZXNvdXJjZXMvYmx1
ZS0xMDAtcHgtc3F1YXJlLnBuZyA0M3EgMXggZGZzIDNkZCwgcmVzb3VyY2VzL2dyZWVuLTQwMC1w
eC1zcXVhcmUucG5nIDJ4Ij4KLSAgICA8aW1nIGlkPSJmb28yIiBzcmM9IiIgc3Jjc2V0PSJyZXNv
dXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZyAzMDBxLCByZXNvdXJjZXMvZ3JlZW4tNDAwLXB4
LXNxdWFyZS5wbmcgMngiPgorICAgIDxpbWcgaWQ9ImludmFsaWRfd2l0aF94IiBzcmM9IiIgc3Jj
c2V0PSJyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZyA0M3EgMXggZGZzIDNkZCwgcmVz
b3VyY2VzL2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1nIGlkPSJpbnZhbGlk
X3dpdGhvdXRfeCIgc3JjPSIiIHNyY3NldD0icmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5w
bmcgMzAwcSwgcmVzb3VyY2VzL2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1n
IGlkPSJmdXR1cmVfZGVzY3JpcHRvciIgc3Jjc2V0PSIscmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNx
dWFyZS5wbmcgMXggZnV0dXJlLWRlc2NyaXB0b3IoM3gsIDRoLCB3aGF0ZXZlciksIHJlc291cmNl
cy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+CisgICAgPGltZyBpZD0iZnV0dXJlX2Rlc2Ny
aXB0b3Jfd2l0aG91dF94IiBzcmNzZXQ9IixyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBu
ZyBmdXR1cmUtZGVzY3JpcHRvcigzeCwgNGgsIHdoYXRldmVyKSwgcmVzb3VyY2VzL2dyZWVuLTQw
MC1weC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1nIGlkPSJ4X3dpdGhfd19pZ25vcmVkIiBzcmNz
ZXQ9IixyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZyAxeCAxMDB3LCByZXNvdXJjZXMv
Z3JlZW4tNDAwLXB4LXNxdWFyZS5wbmcgMngiPgorICAgIDxpbWcgaWQ9Inhfd2l0aF9oX2lnbm9y
ZWQiIHNyY3NldD0iLHJlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5nIDF4IDEwMGgsIHJl
c291cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+CiA8L2JvZHk+CiA8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlu
cHV0cy1jb3JyZWN0LXNyYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1jb3JyZWN0LXNyYy1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YjdlZGM4YzNkYzRhNDI4YjdmZTViMThiZjE1MzIw
YmM5MDE0MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVj
dC1zcmMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1QQVNTIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRXaWR0aD09NDAwIGlzIHRydWUKLVRo
aXMgdGVzdCBwYXNzZXMgaWYgdGhpcyBpbWcgdGFnIGJlbG93IGlzIGEgZ3JlZW4gc3F1YXJlIHJl
Z2FyZGxlc3Mgb2YgdGhlIHNjYWxlIGZhY3Rvci4gSXQgZW5zdXJlcyB0aGF0IGludmFsaWQgaW5w
dXRzIGZyb20gc3Jjc2V0IGFyZSBpZ25vcmVkLCBhbmQgc3JjIGlzIHNlbGVjdGVkIChzaW5jZSBp
dCdzIHRoZSBvbmx5IGNhbmRpZGF0ZSBsZWZ0KQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1jb3JyZWN0LXNyYy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVj
dC1zcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcwYmMyMWY1NDE0NWE2
MWQ3YjlkZDY5ZGJiM2UyZTQzZWQ3MmI3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZh
bGlkLWlucHV0cy1jb3JyZWN0LXNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBA
QAotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Jjc2V0LWhlbHBlci5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgIH0KLQotICAgIGFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgc2hvdWxkQmVUcnVlKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTQwMCcpOwotICAgIH0sIGZhbHNlKTsK
LTwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBpZD0iYm9keSI+Ci0gICAgPGRpdj5UaGlzIHRl
c3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBhIGdyZWVuIHNxdWFyZSByZWdhcmRs
ZXNzIG9mIHRoZSBzY2FsZSBmYWN0b3IuIEl0IGVuc3VyZXMgdGhhdCBpbnZhbGlkIGlucHV0cwot
ICAgIGZyb20gc3Jjc2V0IGFyZSBpZ25vcmVkLCBhbmQgc3JjIGlzIHNlbGVjdGVkIChzaW5jZSBp
dCdzIHRoZSBvbmx5IGNhbmRpZGF0ZSBsZWZ0KTwvZGl2PgotICAgIDxpbWcgaWQ9ImZvbyIgc3Jj
PSJyZXNvdXJjZXMvZ3JlZW4tNDAwLXB4LXNxdWFyZS5wbmciIHNyY3NldD0iMXggNXcsLCAgLCAg
ICAgICwgMnggIDYwMGgsLCI+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232534</attachid>
            <date>2014-06-05 03:51:03 -0700</date>
            <delta_ts>2014-06-05 23:06:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133504-20140605125041.patch</filename>
            <type>text/plain</type>
            <size>60173</size>
            <attacher name="Yoav Weiss">yoav</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1MDFlNmFlYTVlZWNiNjQ3ZjkxNzg3
ZjBlNDhmZDU3OTBhOTI4Y2UuLjZhMzMxZGIzYTM0MmNkOTZmOTA4YmFmYzRjMGUzNWU0OTJiZDg1
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTQtMDYtMDQgIFlvYXYgV2Vpc3MgIDx5b2F2QHlv
YXYud3M+CisKKyAgICAgICAgQWxpZ24gc3Jjc2V0IHBhcnNlciB3aXRoIHJlY2VudCBzcGVjIGNo
YW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MzUwNAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEkndmUg
YWRkZWQgdG9JbnQgYW5kIHRvRmxvYXQgbWV0aG9kcyB0byBTdHJpbmdWaWV3LCBhbmQgZXhwb3Nl
ZAorICAgICAgICBjaGFyYWN0ZXJzVG9JbnQgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGJ5Cisg
ICAgICAgIEhUTUxTcmNzZXRQYXJzZXIuY3BwLgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3Ry
aW5nLmg6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAgICAoV1RGOjpT
dHJpbmdWaWV3Ojp0b0ludCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvRmxvYXQpOgor
CiAyMDE0LTA2LTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgRW5hYmxlIFdlYkdMIG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmNiODQ5
ZWQzNTMzZWUxNzIwZDY5MzE5MzVkOTQ0ZmFhMTMxYjk0ZS4uODA5MDkwZTg4ZTJiZDNjNjg0ZDFi
MzFkMDJiZDI4ZDg1NzFhM2QxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE0LTA2
LTA0ICBZb2F2IFdlaXNzICA8eW9hdkB5b2F2LndzPgorCisgICAgICAgIEFsaWduIHNyY3NldCBw
YXJzZXIgd2l0aCByZWNlbnQgc3BlYyBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1MDQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBOZXcgdGVzdHMgd2VyZSBhZGRlZCB0byBmYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1pbnZhbGlkLWRlc2NyaXB0b3IuaHRtbAorCisgICAgICAgIFRoZSBzcmNzZXQg
cGFyc2VyIGNoYW5nZXMgYWxpZ24gaXQgd2l0aCB0aGUgc3BlYzoKKyAgICAgICAgaHR0cDovL3Bp
Y3R1cmUucmVzcG9uc2l2ZWltYWdlcy5vcmcvI3BhcnNlLXNyY3NldC1hdHRyLgorICAgICAgICBU
aGUgc3BlYyBjaGFuZ2VzIGFyZSBtZWFudCB0byBnaXZlIHRoZSBwYXJzZXIgYmV0dGVyIGZ1dHVy
ZQorICAgICAgICBjb21wYXRpYmlsaXR5LCBhbmQgZW5hYmxlIGl0IHRvIHdvcmsgd2VsbCB3aXRo
IHRoZSAndycgZGVzY3JpcHRvciwgdGhlCisgICAgICAgIHNvb24gdG8gYmUgYWRkZWQgJ2gnIGRl
c2NyaXB0b3IgYW5kIGZ1bmN0aW9uIGRlc2NyaXB0b3JzIChlLmcuCisgICAgICAgIGZ1dHVyZS1k
ZXNjcmlwdG9yKGEsIGIsIGMpICkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEJlc3RGaXRVUkxBbmRE
UFJGcm9tSW1hZ2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzSFRNTFNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ29tbWEpOgorICAgICAgICAo
V2ViQ29yZTo6aXNIVE1MU3BhY2VPckNvbW1hKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
UHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW5QcmVsb2FkU2Nhbm5l
cjo6U3RhcnRUYWdTY2FubmVyOjpwcm9jZXNzQXR0cmlidXRlcyk6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTFNyY3NldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQnlE
ZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZERlc2NyaXB0b3JBbmRSZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjphcHBlbmRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNF
T0YpOgorICAgICAgICAoV2ViQ29yZTo6dG9rZW5pemVEZXNjcmlwdG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpzdHJpbmdWaWV3VG9GbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdWaWV3
VG9JbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZXNjcmlwdG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUltYWdlQ2FuZGlkYXRlc0Zyb21TcmNzZXRBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6cGlja0Jlc3RJbWFnZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpi
ZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBh
cmVCeVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSW1hZ2Vz
V2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTFNyY3NldFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGVzY3JpcHRvclBh
cnNpbmdSZXN1bHQ6OkRlc2NyaXB0b3JQYXJzaW5nUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlc2NyaXB0b3JQYXJzaW5nUmVzdWx0OjpoYXNEZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlc2NyaXB0b3JQYXJzaW5nUmVzdWx0OjpoYXNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdDo6aGFzSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
c2NyaXB0b3JQYXJzaW5nUmVzdWx0OjpkZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2Ny
aXB0b3JQYXJzaW5nUmVzdWx0OjpyZXNvdXJjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
c2NyaXB0b3JQYXJzaW5nUmVzdWx0OjpyZXNvdXJjZUhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdDo6c2V0UmVzb3VyY2VXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdDo6c2V0UmVzb3VyY2VIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVzY3JpcHRvclBhcnNpbmdSZXN1bHQ6OnNldERlbnNpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VDYW5kaWRhdGU6OkltYWdlQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUNhbmRpZGF0ZTo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpz
ZXREZW5zaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpkZW5zaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpyZXNvdXJjZVdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQ2FuZGlkYXRlOjpzcmNPcmlnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VDYW5kaWRhdGU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VXaXRo
U2NhbGU6OkltYWdlV2l0aFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
V2l0aFNjYWxlOjppbWFnZVVSTCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVdp
dGhTY2FsZTo6c2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvcGFyc2VyL1Bh
cnNpbmdVdGlsaXRpZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
UGFyc2luZ1V0aWxpdGllcy5oLgorICAgICAgICAoc2tpcEV4YWN0bHkpOgorICAgICAgICAoc2tp
cFVudGlsKToKKyAgICAgICAgKHNraXBXaGlsZSk6CisgICAgICAgIChyZXZlcnNlU2tpcFdoaWxl
KToKKwogMjAxNC0wNi0wNCAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KIAog
ICAgICAgICBbQ1NTIFNoYXBlc10gSW1hZ2UgbGlmZXRpbWUgaXMgbm90IHByb3Blcmx5IGhhbmRs
ZWQgZm9yIGdyYWRpZW50IHNoYXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCA2Mzkz
NWEwYmQxYWY2N2IwZmE2Y2JjMjRhYjdmODY3OTMyNTAxMzFkLi4zNGY5ODIyYjhjN2U3YzUxN2Rh
N2U0YzQwOTkwZGU2NTljZDc2MWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTQy
LDYgKzE0MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKTsKICAgICB9CiAKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQp
CisgICAgeworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gY2hhcmFj
dGVyc1RvRmxvYXQoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCksICZpc1ZhbGlkKTsKKyAgICAgICAg
cmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFs
aWQpOworICAgIH0KKworICAgIGludCB0b0ludChib29sJiBpc1ZhbGlkKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFy
YWN0ZXJzOCgpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVy
c1RvSW50KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOworICAgIH0KKwogICAg
IFN0cmluZyB0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChpczhCaXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IGM0ZjY5YTc0OWNmZDQ4Mjhm
YzhlNDZjYWZlNjNkYTJlYTZkZTMxMGIuLmM1NmUyNjZlOTJkNmI5ZGE3NTQzZDZiMDI5ZWY0MzU5
MjcxYmFkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtNTAsNyArNTAsNyBAQCB1aW50
NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gMCwgaW50IGJhc2UgPQogaW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyU3RyaWN0KGNv
bnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwogaW50cHRy
X3QgY2hhcmFjdGVyc1RvSW50UHRyU3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBv
ayA9IDAsIGludCBiYXNlID0gMTApOwogCi1pbnQgY2hhcmFjdGVyc1RvSW50KGNvbnN0IExDaGFy
Kiwgc2l6ZV90LCBib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKK1dU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBpbnQgY2hhcmFjdGVyc1RvSW50KGNvbnN0IExDaGFyKiwgc2l6
ZV90LCBib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBpbnQgY2hhcmFjdGVyc1RvSW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIHVuc2lnbmVkIGNoYXJh
Y3RlcnNUb1VJbnQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9y
ZXMgdHJhaWxpbmcgZ2FyYmFnZQogdW5zaWduZWQgY2hhcmFjdGVyc1RvVUludChjb25zdCBVQ2hh
ciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CmluZGV4IGI4ZmFkMjM1NWY3ODU0NzkwOWJiNGJmN2U4ODhmOWI3ODE5
YzlkNzYuLjAxNGRjYTIzMTA0ODI1MjZhZmRlZWUwMjdhYWI0YjRmMThiN2VhOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC0xNzAwLDYgKzE3MDAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKICAgICBodG1sL3Bh
cnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFBhcnNl
cklkaW9tcy5jcHAKKyAgICBodG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmNwcAogICAgIGh0
bWwvcGFyc2VyL0hUTUxQYXJzZXJPcHRpb25zLmNwcAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJz
ZXJTY2hlZHVsZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXgg
ODBhNzE4M2NjZjE1YzAyYzJmODRjNTk1ZTQxMTQxOGUwNTkzYWIyYS4uM2RjZmNiY2Q0OThmZDE4
NjY2NjA3MmM5MDZhNDJhNDNkZDM2ZGZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0yMDY3NCw2ICsyMDY3NCw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MVHJlZUJ1aWxkZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXElucHV0U3RyZWFtUHJlcHJvY2Vz
c29yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxOZXN0aW5n
TGV2ZWxJbmNyZW1lbnRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxw
YXJzZXJcUGFyc2luZ1V0aWxpdGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aHRtbFxwYXJzZXJcVGV4dERvY3VtZW50UGFyc2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXHBhcnNlclxYU1NBdWRpdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXHBhcnNlclxYU1NBdWRpdG9yRGVsZWdhdGUuaCIgLz4KQEAgLTIwNjk2LDcg
KzIwNjk3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcSW5iYW5k
VGV4dFRyYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXElu
YmFuZFdlYlZUVFRleHRUcmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFx0cmFja1xMb2FkYWJsZVRleHRUcmFjay5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caHRtbFx0cmFja1xQYXJzaW5nVXRpbGl0aWVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxodG1sXHRyYWNrXFRleHRUcmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFx0cmFja1xUZXh0VHJhY2tDdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGh0bWxcdHJhY2tcVGV4dFRyYWNrQ3VlTGlzdC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4
IGZkODBhNGUyMjBhMGQ5NTRmNzM5MDU1YjE2MjYxZGE3MGQyZWUyZDAuLjE0MDZhNTQyMjg0YzNm
Y2E5NTdkZTQ5MzlhMmQ5NWE3NDY5YTBhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTExMjI3LDYgKzEx
MjI3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXE5lc3RpbmdM
ZXZlbEluY3JlbWVudGVyLmgiPgogICAgICAgPEZpbHRlcj5odG1sXHBhcnNlcjwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJc
UGFyc2luZ1V0aWxpdGllcy5oIj4KKyAgICAgIDxGaWx0ZXI+aHRtbFxwYXJzZXI8L0ZpbHRlcj4K
KyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2Vy
XFRleHREb2N1bWVudFBhcnNlci5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbFxwYXJzZXI8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTExMjkzLDkgKzExMjk2LDYgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcTG9hZGFibGVUZXh0VHJhY2suaCI+CiAgICAgICA8
RmlsdGVyPmh0bWxcdHJhY2s8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcUGFyc2luZ1V0aWxpdGllcy5oIj4KLSAgICAgIDxG
aWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xUZXh0VHJhY2suaCI+CiAgICAgICA8RmlsdGVyPmh0
bWxcdHJhY2s8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMTI5OWJhZmRlMWI2MTJm
MmEwMTQ4NzJjODY5ZjNlNjQzOTIyYzhlLi4wYjk1YTZmMTFkZTBjYTY2MGQyZWQ2OTg3OWVlYzdm
MzBjMjM3NGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yMDEzLDYgKzIwMTMsNyBAQAogCQk1MzE3NjEyMzEzQzUxNjY5MDAy
NkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTc2MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZs
ZXhpYmxlQm94RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRjE5
M0UxOEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9OwogCQk1MzZENUEyMTE5
M0UxOEVFMDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRTE5M0UxOEQwMDBDRTRDQUIgLyog
SFRNTFNyY3NldFBhcnNlci5jcHAgKi87IH07CisJCTUzNkQ1QTIzMTkzRThFMEMwMENFNENBQiAv
KiBQYXJzaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzZENUEyMjE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5o
ICovOyB9OwogCQk1M0M4Mjk4RDEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVyRmxleGlibGVCb3gu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDODI5
OEIxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94LmNwcCAqLzsgfTsKIAkJNTND
ODI5OEUxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M4Mjk4QzEzRDhEOTI3MDBERTJE
RUIgLyogUmVuZGVyRmxleGlibGVCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1M0UyOUU1RTE2N0E4QTE5MDA1ODZEM0QgLyogSW50ZXJuYWxT
ZXR0aW5nc0dlbmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0UyOUU1QzE2N0E4QTE5MDA1ODZEM0QgLyogSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5jcHAgKi87IH07CkBAIC0yMzM5LDcgKzIzNDAsNiBAQAogCQk3QTc0RUNCQTEwMTgz
OUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5
RSAvKiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwICovOyB9OwogCQk3QTc0RUNCQjEwMTgz
OUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUg
LyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggKi87IH07CiAJCTdBNzRFQ0JEMTAxODM5REEw
MEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCQzEwMTgzOURBMDBCRjkz
OUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwICovOyB9OwotCQk3QTkzODY4
NDE4RENDMTQ1MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5Mzg2ODExOERDQzE0NTAwQjgyNjNEIC8q
IFBhcnNpbmdVdGlsaXRpZXMuaCAqLzsgfTsKIAkJN0E5Mzg2ODUxOERDQzE0NTAwQjgyNjNEIC8q
IFZUVFNjYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0E5Mzg2ODIxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuY3BwICovOyB9Owog
CQk3QTkzODY4NjE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5Mzg2ODMxOERDQzE0NTAwQjgyNjNE
IC8qIFZUVFNjYW5uZXIuaCAqLzsgfTsKIAkJN0FBQkEyNTkxNEJDNjEzMzAwQUE5QTExIC8qIERP
TUVkaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUFCQTI1NzE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmNwcCAqLzsgfTsKQEAgLTkw
NzYsNiArOTA3Niw3IEBACiAJCTUzMTc2MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhp
YmxlQm94RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUZsZXhp
YmxlQm94RGF0YS5oOyBwYXRoID0gc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2RDVBMUUxOTNFMThEMDAwQ0U0Q0FCIC8qIEhUTUxT
cmNzZXRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSFRN
TFNyY3NldFBhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvSFRNTFNyY3NldFBhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNkQ1QTFGMTkzRTE4RTkwMENFNENBQiAvKiBI
VE1MU3Jjc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxT
cmNzZXRQYXJzZXIuaDsgcGF0aCA9IHBhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5n
VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBhcnNpbmdVdGls
aXRpZXMuaDsgcGF0aCA9IHBhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzQzgyOThCMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJs
ZUJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGbGV4
aWJsZUJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzgyOThDMTNEOEQ5
MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJGbGV4aWJsZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0UyOUU1QzE2N0E4QTE5MDA1ODZEM0QgLyogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm5hbFNldHRp
bmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0MzYsNyAr
OTQzNyw2IEBACiAJCTdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E3
NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E3NEVDQkMxMDE4MzlEQTAwQkY5MzlFIC8q
IEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0E5Mzg2ODExOERDQzE0NTAwQjgyNjNEIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2luZ1V0
aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTkzODY4MjE4RENDMTQ1
MDBCODI2M0QgLyogVlRUU2Nhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBWVFRTY2FubmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5
Mzg2ODMxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVlRUU2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QUFCQTI1NzE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUVkaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODIwMyw2ICsxODIwMyw3IEBACiAJCQkJOTc3QjM3MjIxMjI4NzIxNzAw
QjgxRkY4IC8qIEhUTUxUcmVlQnVpbGRlci5oICovLAogCQkJCUE4ODA1QUYxMTZDOTZBRUEwMDBF
OUQ5OCAvKiBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5oICovLAogCQkJCThBMzA5QzlFMTIzOTUw
QkUwMENCOTIwNCAvKiBOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlci5oICovLAorCQkJCTUzNkQ1QTIy
MTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi8sCiAJCQkJOTdCQzg0ODEx
MjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5jcHAgKi8sCiAJCQkJOTdCQzg0
ODIxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5oICovLAogCQkJCTk3N0Uy
RTBCMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmNwcCAqLywKQEAgLTE5NTA2LDcgKzE5
NTA3LDYgQEAKIAkJQjFBRDRFNzcxM0ExMkE3MjAwODQ2QjI3IC8qIHRyYWNrICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3QTkzODY4MTE4RENDMTQ1MDBC
ODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oICovLAogCQkJCTdBNDUwMzJEMThEQjcxNzIwMDM3
N0IzNCAvKiBCdWZmZXJlZExpbmVSZWFkZXIuY3BwICovLAogCQkJCTdBNDUwMzJFMThEQjcxNzIw
MDM3N0IzNCAvKiBCdWZmZXJlZExpbmVSZWFkZXIuaCAqLywKIAkJCQlCRTg4RTBDQzE3MTVEMkEy
MDA2NThEOTggLyogQXVkaW9UcmFjay5jcHAgKi8sCkBAIC0yNDIyNSw3ICsyNDIyNSw2IEBACiAJ
CQkJQTg3MURFMkIwQTE1MkFDODAwQjEyQTY4IC8qIEhUTUxGcmFtZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RkZFMzFEMEFFMTk2MzMwMDEzNkJGNSAvKiBIVE1MRnJhbWVFbGVtZW50
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFMjQxRkYwQjJCNEU0MDAwQzczMkExIC8qIEhU
TUxGcmFtZU93bmVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0E5Mzg2ODQxOERDQzE0
NTAwQjgyNjNEIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFE
RTI4MEExNTJBQzgwMEIxMkE2OCAvKiBIVE1MRnJhbWVTZXRFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODcxREUyRDBBMTUyQUM4MDBCMTJBNjggLyogSFRNTEhlYWRFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEVBN0NCODBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEhlYWRpbmdF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MzI0LDYgKzI0MzIzLDcgQEAKIAkJCQk1MTAx
OTQ0NTE4MzZGN0U1MDA5MjU1MjMgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxRDcxOUM0MTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRo
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUM3MTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FC
IC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzcxQzhGMTgyREI0
QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RDcxOUNBMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFENzE5Q0MxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50LmNwcAppbmRleCBlYTc4MmU1YzRhZWI3ODUwMjA3MGIxMGQ4M2QxZWRhZDlhOTlhZDEwLi45
YTMyZjUzMTgwNDY0NGVjNzA3NjY2MTJlZDJkMGJlZjZjODE4YjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKQEAgLTEyMywxOSArMTIzLDIzIEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6aW1hZ2VTb3VyY2VVUkwoKSBjb25zdAogICAg
IHJldHVybiBtX2Jlc3RGaXRJbWFnZVVSTC5pc0VtcHR5KCkgPyBmYXN0R2V0QXR0cmlidXRlKHNy
Y0F0dHIpIDogbV9iZXN0Rml0SW1hZ2VVUkw7CiB9CiAKK3ZvaWQgSFRNTEltYWdlRWxlbWVudDo6
c2V0QmVzdEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRpZGF0ZShjb25zdCBJbWFnZUNhbmRpZGF0
ZSYgY2FuZGlkYXRlKQoreworICAgIG1fYmVzdEZpdEltYWdlVVJMID0gY2FuZGlkYXRlLnN0cmlu
Zy50b1N0cmluZygpOworICAgIGlmIChjYW5kaWRhdGUuZGVuc2l0eSA+PSAwKQorICAgICAgICBt
X2ltYWdlRGV2aWNlUGl4ZWxSYXRpbyA9IDEgLyBjYW5kaWRhdGUuZGVuc2l0eTsKKyAgICBpZiAo
cmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ltYWdlKCkpCisgICAgICAgIHRvUmVuZGVySW1h
Z2UocmVuZGVyZXIoKSktPnNldEltYWdlRGV2aWNlUGl4ZWxSYXRpbyhtX2ltYWdlRGV2aWNlUGl4
ZWxSYXRpbyk7Cit9CisKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAg
ICBpZiAobmFtZSA9PSBhbHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRl
cmVyKCktPmlzUmVuZGVySW1hZ2UoKSkKICAgICAgICAgICAgIHRvUmVuZGVySW1hZ2UocmVuZGVy
ZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gc3JjQXR0ciB8
fCBuYW1lID09IHNyY3NldEF0dHIpIHsKLSAgICAgICAgSW1hZ2VXaXRoU2NhbGUgY2FuZGlkYXRl
ID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhkb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCksIGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0ciksIGZhc3RHZXRBdHRyaWJ1dGUoc3Jj
c2V0QXR0cikpOwotICAgICAgICBtX2Jlc3RGaXRJbWFnZVVSTCA9IGNhbmRpZGF0ZS5pbWFnZVVS
TChmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLCBmYXN0R2V0QXR0cmlidXRlKHNyY3NldEF0dHIp
KTsKLSAgICAgICAgZmxvYXQgY2FuZGlkYXRlU2NhbGVGYWN0b3IgPSBjYW5kaWRhdGUuc2NhbGVG
YWN0b3IoKTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZVNjYWxlRmFjdG9yID4gMCkKLSAgICAgICAg
ICAgIG1faW1hZ2VEZXZpY2VQaXhlbFJhdGlvID0gMSAvIGNhbmRpZGF0ZVNjYWxlRmFjdG9yOwot
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ltYWdlKCkpCi0gICAgICAg
ICAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKCkpLT5zZXRJbWFnZURldmljZVBpeGVsUmF0aW8o
bV9pbWFnZURldmljZVBpeGVsUmF0aW8pOworICAgICAgICBJbWFnZUNhbmRpZGF0ZSBjYW5kaWRh
dGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSwgZmFzdEdldEF0dHJpYnV0ZShz
cmNzZXRBdHRyKSk7CisgICAgICAgIHNldEJlc3RGaXRVUkxBbmREUFJGcm9tSW1hZ2VDYW5kaWRh
dGUoY2FuZGlkYXRlKTsKICAgICAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudEln
bm9yaW5nUHJldmlvdXNFcnJvcigpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSB1c2VtYXBBdHRy
KSB7CiAgICAgICAgIHNldElzTGluayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0
TGlua3ModGhpcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAppbmRleCA1
NDI3ZjljNDBiN2I4MDI2NjY2MzM4OWEyN2UwNzdkYmQ2MjhmZTQ1Li5kZTgyNzhlYmQxZTVmYjcz
YzcyMzA0OTE4MzQ2ZTViMDIyNjc5YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuaApAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBI
VE1MRm9ybUVsZW1lbnQ7CitzdHJ1Y3QgSW1hZ2VDYW5kaWRhdGU7CiAKIGNsYXNzIEhUTUxJbWFn
ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBGb3JtTmFtZWRJdGVtIHsKICAg
ICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50OwpAQCAtOTksNiArMTAwLDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRBdHRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIo
UGFzc1JlZjxSZW5kZXJTdHlsZT4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmVzdEZpdFVSTEFu
ZERQUkZyb21JbWFnZUNhbmRpZGF0ZShjb25zdCBJbWFnZUNhbmRpZGF0ZSYpOwogCiAgICAgdmly
dHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAppbmRleCA2NTczMTEzOTkz
MjMzYzhjYWRkN2JiYTgwOWIxZGQ3MTcyNTEzM2NmLi5kYTNiZDdiYTAwOGFhMzhmOTlmYzFiZDYy
MDkxNGVkNTdjODRmZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBh
cnNlcklkaW9tcy5oCkBAIC0zNCw3ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IERlY2ltYWw7CiAKIC8vIFNwYWNlIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBieSB0aGUgSFRNTCBz
cGVjaWZpY2F0aW9uLgotYm9vbCBpc0hUTUxTcGFjZShVQ2hhcik7CiBib29sIGlzSFRNTExpbmVC
cmVhayhVQ2hhcik7CiBib29sIGlzTm90SFRNTFNwYWNlKFVDaGFyKTsKIGJvb2wgaXNIVE1MU3Bh
Y2VCdXROb3RMaW5lQnJlYWsoVUNoYXIgY2hhcmFjdGVyKTsKQEAgLTY2LDggKzY1LDggQEAgYm9v
bCBwYXJzZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYsIGludCYpOwogYm9vbCBwYXJzZUhUTUxO
b25OZWdhdGl2ZUludGVnZXIoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgaW50Jik7CiAKIC8vIElu
bGluZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc29tZSBvZiB0aGUgZnVuY3Rpb25zIGRlY2xhcmVkIGFi
b3ZlLgotCi1pbmxpbmUgYm9vbCBpc0hUTUxTcGFjZShVQ2hhciBjaGFyYWN0ZXIpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK2lubGluZSBib29sIGlzSFRNTFNwYWNlKENoYXJUeXBlIGNo
YXJhY3RlcikKIHsKICAgICAvLyBIaXN0b2dyYW0gZnJvbSBBcHBsZSdzIHBhZ2UgbG9hZCB0ZXN0
IGNvbWJpbmVkIHdpdGggc29tZSBhZCBob2MgYnJvd3Npbmcgc29tZSBvdGhlciB0ZXN0IHN1aXRl
cy4KICAgICAvLwpAQCAtODcsNiArODYsMTggQEAgaW5saW5lIGJvb2wgaXNIVE1MTGluZUJyZWFr
KFVDaGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4gY2hhcmFjdGVyIDw9ICdccicgJiYgKGNoYXJh
Y3RlciA9PSAnXG4nIHx8IGNoYXJhY3RlciA9PSAnXHInKTsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhclR5cGU+CitpbmxpbmUgYm9vbCBpc0NvbW1hKENoYXJUeXBlIGNoYXJhY3RlcikKK3sK
KyAgICByZXR1cm4gY2hhcmFjdGVyID09ICcsJzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGU+CitpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9yQ29tbWEoQ2hhclR5cGUgY2hhcmFjdGVy
KQoreworICAgIHJldHVybiBpc0NvbW1hKGNoYXJhY3RlcikgfHwgaXNIVE1MU3BhY2U8Q2hhclR5
cGU+KGNoYXJhY3Rlcik7Cit9CisKIGlubGluZSBib29sIGlzTm90SFRNTFNwYWNlKFVDaGFyIGNo
YXJhY3RlcikKIHsKICAgICByZXR1cm4gIWlzSFRNTFNwYWNlKGNoYXJhY3Rlcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAppbmRleCBh
NGEzYTE1MjZhYWE2NDQ3MTMwYTEwMzZiNWZiYjlmOGMwNzUwNTNmLi43MGJkZDU1YzNiYjJhNzBl
MWNjZDllMjIwZTQxZmZkMTc5ZTJiNWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKQEAgLTEwNSw5ICsxMDUsOCBAQCBwdWJsaWM6
CiAKICAgICAgICAgLy8gUmVzb2x2ZSBiZXR3ZWVuIHNyYyBhbmQgc3JjU2V0IGlmIHdlIGhhdmUg
dGhlbS4KICAgICAgICAgaWYgKCFtX3NyY1NldEF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlQ2FuZGlkYXRlID0gYmVzdEZpdFNvdXJjZUZvcklt
YWdlQXR0cmlidXRlcyhtX2RldmljZVNjYWxlRmFjdG9yLCBtX3VybFRvTG9hZCwgbV9zcmNTZXRB
dHRyaWJ1dGUpOwotICAgICAgICAgICAgU3RyaW5nIHNyY01hdGNoaW5nU2NhbGUgPSBpbWFnZUNh
bmRpZGF0ZS5pbWFnZVVSTChtX3VybFRvTG9hZCwgbV9zcmNTZXRBdHRyaWJ1dGUpOwotICAgICAg
ICAgICAgc2V0VXJsVG9Mb2FkKHNyY01hdGNoaW5nU2NhbGUsIHRydWUpOworICAgICAgICAgICAg
SW1hZ2VDYW5kaWRhdGUgaW1hZ2VDYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRy
aWJ1dGVzKG1fZGV2aWNlU2NhbGVGYWN0b3IsIG1fdXJsVG9Mb2FkLCBtX3NyY1NldEF0dHJpYnV0
ZSk7CisgICAgICAgICAgICBzZXRVcmxUb0xvYWQoaW1hZ2VDYW5kaWRhdGUuc3RyaW5nLnRvU3Ry
aW5nKCksIHRydWUpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTcmNzZXRQYXJzZXIuY3BwCmluZGV4IDQzNDc0M2ViMGZjMWM4NzU0OTkx
ODhkZDE1NTM5MDM3Yzk3NDMzMDUuLmY3Y2U4MGU1YmMxNTcyYjI1ZmQ0YWYzYTkwODBhYTVhZTU1
MGQzMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTcmNzZXRQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTcmNzZXRQYXJz
ZXIuY3BwCkBAIC0xLDE1OCArMSwyNjggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MU3Jjc2V0UGFyc2VyLmgi
CiAKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxp
dGllcy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmVjdG9yPEltYWdlV2l0
aFNjYWxlPiBJbWFnZUNhbmRpZGF0ZXM7CitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUJ5RGVu
c2l0eShjb25zdCBJbWFnZUNhbmRpZGF0ZSYgZmlyc3QsIGNvbnN0IEltYWdlQ2FuZGlkYXRlJiBz
ZWNvbmQpCit7CisgICAgcmV0dXJuIGZpcnN0LmRlbnNpdHkgPCBzZWNvbmQuZGVuc2l0eTsKK30K
IAotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVCeVNjYWxlRmFjdG9yKGNvbnN0IEltYWdlV2l0
aFNjYWxlJiBmaXJzdCwgY29uc3QgSW1hZ2VXaXRoU2NhbGUmIHNlY29uZCkKK2VudW0gRGVzY3Jp
cHRvclRva2VuaXplclN0YXRlIHsKKyAgICBTdGFydCwKKyAgICBJblBhcmVudGhlc2lzLAorICAg
IEFmdGVyVG9rZW4sCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyB2
b2lkIGFwcGVuZERlc2NyaXB0b3JBbmRSZXNldChjb25zdCBDaGFyVHlwZSomIGRlc2NyaXB0b3JT
dGFydCwgY29uc3QgQ2hhclR5cGUqIHBvc2l0aW9uLCBWZWN0b3I8U3RyaW5nVmlldz4mIGRlc2Ny
aXB0b3JzKQogewotICAgIHJldHVybiBmaXJzdC5zY2FsZUZhY3RvcigpIDwgc2Vjb25kLnNjYWxl
RmFjdG9yKCk7CisgICAgaWYgKHBvc2l0aW9uID4gZGVzY3JpcHRvclN0YXJ0KQorICAgICAgICBk
ZXNjcmlwdG9ycy5hcHBlbmQoU3RyaW5nVmlldyhkZXNjcmlwdG9yU3RhcnQsIHBvc2l0aW9uIC0g
ZGVzY3JpcHRvclN0YXJ0KSk7CisgICAgZGVzY3JpcHRvclN0YXJ0ID0gbnVsbHB0cjsKIH0KIAot
c3RhdGljIGJvb2wgcGFyc2VEZXNjcmlwdG9ycyhjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgc2l6
ZV90IHN0YXJ0LCBzaXplX3QgZW5kLCBmbG9hdCYgaW1hZ2VTY2FsZUZhY3RvcikKKy8vIFRoZSBm
b2xsb3dpbmcgaXMgY2FsbGVkIGFwcGVuZENoYXJhY3RlciB0byBtYXRjaCB0aGUgc3BlYydzIHRl
cm1pbm9sb2d5LgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CitzdGF0aWMgdm9pZCBhcHBl
bmRDaGFyYWN0ZXIoY29uc3QgQ2hhclR5cGUqIGRlc2NyaXB0b3JTdGFydCwgY29uc3QgQ2hhclR5
cGUqIHBvc2l0aW9uKQogewotICAgIHNpemVfdCBkZXNjcmlwdG9yU3RhcnQ7Ci0gICAgc2l6ZV90
IGRlc2NyaXB0b3JFbmQ7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gc3RhcnQ7Ci0gICAgYm9vbCBp
c0ZvdW5kU2NhbGVGYWN0b3IgPSBmYWxzZTsKLSAgICBib29sIGlzRW1wdHlEZXNjcmlwdG9yID0g
IShlbmQgPiBzdGFydCk7Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7Ci0KLSAgICB3aGlsZSAo
cG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGF0dHJpYnV0ZVtw
b3NpdGlvbl0pICYmIHBvc2l0aW9uIDwgZW5kKQotICAgICAgICAgICAgKytwb3NpdGlvbjsKKyAg
ICAvLyBTaW5jZSB3ZSBkb24ndCBjb3B5IHRoZSB0b2tlbnMsIHRoaXMganVzdCBzZXQgdGhlIHBv
aW50IHdoZXJlIHRoZSBkZXNjcmlwdG9yIHRva2VucyBzdGFydC4KKyAgICBpZiAoIWRlc2NyaXB0
b3JTdGFydCkKICAgICAgICAgZGVzY3JpcHRvclN0YXJ0ID0gcG9zaXRpb247Ci0gICAgICAgIHdo
aWxlIChpc05vdEhUTUxTcGFjZShhdHRyaWJ1dGVbcG9zaXRpb25dKSAmJiBwb3NpdGlvbiA8IGVu
ZCkKLSAgICAgICAgICAgICsrcG9zaXRpb247Ci0gICAgICAgIGRlc2NyaXB0b3JFbmQgPSBwb3Np
dGlvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+CitzdGF0aWMgYm9vbCBpc0VP
Rihjb25zdCBDaGFyVHlwZSogcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQpCit7CisgICAg
cmV0dXJuIHBvc2l0aW9uID49IGVuZDsKK30KIAotICAgICAgICAvLyBMZWF2ZSBpZiB0aGVyZSBp
cyBvbmx5IHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgZGVzY3JpcHRvcnMKLSAgICAgICAg
aWYgKGRlc2NyaXB0b3JFbmQgPD0gZGVzY3JpcHRvclN0YXJ0KQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGU+CitzdGF0aWMgdm9pZCB0b2tlbml6ZURlc2NyaXB0b3JzKGNvbnN0IENoYXJUeXBl
KiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBhdHRyaWJ1dGVFbmQsIFZlY3RvcjxTdHJpbmdW
aWV3PiYgZGVzY3JpcHRvcnMpCit7CisgICAgRGVzY3JpcHRvclRva2VuaXplclN0YXRlIHN0YXRl
ID0gU3RhcnQ7CisgICAgY29uc3QgQ2hhclR5cGUqIGRlc2NyaXB0b3JzU3RhcnQgPSBwb3NpdGlv
bjsKKyAgICBjb25zdCBDaGFyVHlwZSogY3VycmVudERlc2NyaXB0b3JTdGFydCA9IGRlc2NyaXB0
b3JzU3RhcnQ7CisgICAgZm9yICg7IDsgKytwb3NpdGlvbikgeworICAgICAgICBzd2l0Y2ggKHN0
YXRlKSB7CisgICAgICAgIGNhc2UgU3RhcnQ6CisgICAgICAgICAgICBpZiAoaXNFT0YocG9zaXRp
b24sIGF0dHJpYnV0ZUVuZCkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmREZXNjcmlwdG9yQW5k
UmVzZXQoY3VycmVudERlc2NyaXB0b3JTdGFydCwgYXR0cmlidXRlRW5kLCBkZXNjcmlwdG9ycyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGlzQ29tbWEoKnBvc2l0aW9uKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZERlc2NyaXB0b3JB
bmRSZXNldChjdXJyZW50RGVzY3JpcHRvclN0YXJ0LCBwb3NpdGlvbiwgZGVzY3JpcHRvcnMpOwor
ICAgICAgICAgICAgICAgICsrcG9zaXRpb247CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpwb3NpdGlvbikpIHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmREZXNjcmlwdG9yQW5kUmVzZXQoY3VycmVudERlc2NyaXB0b3JT
dGFydCwgcG9zaXRpb24sIGRlc2NyaXB0b3JzKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RGVz
Y3JpcHRvclN0YXJ0ID0gcG9zaXRpb24gKyAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gQWZ0
ZXJUb2tlbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnBvc2l0aW9uID09ICcoJykgeworICAg
ICAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcihjdXJyZW50RGVzY3JpcHRvclN0YXJ0LCBwb3Np
dGlvbik7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBJblBhcmVudGhlc2lzOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQ2hhcmFjdGVyKGN1cnJlbnREZXNjcmlw
dG9yU3RhcnQsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
UGFyZW50aGVzaXM6CisgICAgICAgICAgICBpZiAoaXNFT0YocG9zaXRpb24sIGF0dHJpYnV0ZUVu
ZCkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmREZXNjcmlwdG9yQW5kUmVzZXQoY3VycmVudERl
c2NyaXB0b3JTdGFydCwgYXR0cmlidXRlRW5kLCBkZXNjcmlwdG9ycyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpwb3NpdGlvbiA9PSAn
KScpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoY3VycmVudERlc2NyaXB0b3JT
dGFydCwgcG9zaXRpb24pOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhcnQ7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoY3VycmVudERlc2Ny
aXB0b3JTdGFydCwgcG9zaXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QWZ0ZXJUb2tlbjoKKyAgICAgICAgICAgIGlmIChpc0VPRihwb3NpdGlvbiwgYXR0cmlidXRlRW5k
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoIWlzSFRNTFNwYWNl
KCpwb3NpdGlvbikpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXJ0OworICAgICAgICAg
ICAgICAgIGN1cnJlbnREZXNjcmlwdG9yU3RhcnQgPSBwb3NpdGlvbjsKKyAgICAgICAgICAgICAg
ICAtLXBvc2l0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9Cit9CiAKLSAgICAgICAgLS1kZXNjcmlwdG9yRW5kOwotICAgICAgICAvLyBUaGlz
IHBhcnQgZGlmZmVycyBmcm9tIHRoZSBzcGVjIGFzIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IG9ubHkgc3VwcG9ydHMgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9ycy4KLSAgICAgICAgaWYgKGF0
dHJpYnV0ZVtkZXNjcmlwdG9yRW5kXSAhPSAneCcpCitzdGF0aWMgYm9vbCBwYXJzZURlc2NyaXB0
b3JzKFZlY3RvcjxTdHJpbmdWaWV3PiYgZGVzY3JpcHRvcnMsIERlc2NyaXB0b3JQYXJzaW5nUmVz
dWx0JiByZXN1bHQpCit7CisgICAgZm9yIChhdXRvJiBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMp
IHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGlzRm91bmRTY2FsZUZhY3RvcikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBpZiAoYXR0cmlidXRlLmlzOEJpdCgpKQotICAgICAgICAgICAg
aW1hZ2VTY2FsZUZhY3RvciA9IGNoYXJhY3RlcnNUb0Zsb2F0KGF0dHJpYnV0ZS5jaGFyYWN0ZXJz
OCgpICsgZGVzY3JpcHRvclN0YXJ0LCBkZXNjcmlwdG9yRW5kIC0gZGVzY3JpcHRvclN0YXJ0LCAm
aXNWYWxpZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGltYWdlU2NhbGVGYWN0b3IgPSBj
aGFyYWN0ZXJzVG9GbG9hdChhdHRyaWJ1dGUuY2hhcmFjdGVyczE2KCkgKyBkZXNjcmlwdG9yU3Rh
cnQsIGRlc2NyaXB0b3JFbmQgLSBkZXNjcmlwdG9yU3RhcnQsICZpc1ZhbGlkKTsKLSAgICAgICAg
aXNGb3VuZFNjYWxlRmFjdG9yID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgZGVzY3JpcHRvckNo
YXJQb3NpdGlvbiA9IGRlc2NyaXB0b3IubGVuZ3RoKCkgLSAxOworICAgICAgICBVQ2hhciBkZXNj
cmlwdG9yQ2hhciA9IGRlc2NyaXB0b3JbZGVzY3JpcHRvckNoYXJQb3NpdGlvbl07CisgICAgICAg
IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLnN1YnN0cmluZygwLCBkZXNjcmlwdG9yQ2hhclBvc2l0
aW9uKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGlmIChkZXNjcmlw
dG9yQ2hhciA9PSAneCcpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRGVuc2l0eSgpIHx8
IHJlc3VsdC5oYXNIZWlnaHQoKSB8fCByZXN1bHQuaGFzV2lkdGgoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmbG9hdCBkZW5zaXR5ID0gZGVzY3JpcHRvci50
b0Zsb2F0KGlzVmFsaWQpOworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkIHx8IGRlbnNpdHkgPCAw
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRE
ZW5zaXR5KGRlbnNpdHkpOworICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3JDaGFyID09ICd3
JykgeworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNEZW5zaXR5KCkgfHwgcmVzdWx0Lmhhc1dp
ZHRoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW50IHJl
c291cmNlV2lkdGggPSBkZXNjcmlwdG9yLnRvSW50KGlzVmFsaWQpOworICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkIHx8IHJlc291cmNlV2lkdGggPD0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvckNoYXIgPT0gJ2gnKSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIGhlcmUgb25seSBmb3IgZnV0dXJlIGNvbXBhdCBwdXJwb3Nlcy4K
KyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvZiB0aGUgJ2gnIGRlc2NyaXB0b3IgaXMgbm90IHVz
ZWQuCisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0RlbnNpdHkoKSB8fCByZXN1bHQuaGFzSGVp
Z2h0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW50IHJl
c291cmNlSGVpZ2h0ID0gZGVzY3JpcHRvci50b0ludChpc1ZhbGlkKTsKKyAgICAgICAgICAgIGlm
ICghaXNWYWxpZCB8fCByZXNvdXJjZUhlaWdodCA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRSZXNvdXJjZUhlaWdodChyZXNvdXJjZUhl
aWdodCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gaXNFbXB0eURlc2NyaXB0b3Ig
fHwgaXNWYWxpZDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gU2VlIHRoZSBzcGVjaWZpY2F0
aW9ucyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBhbGdvcml0aG0gdG8gZm9sbG93LgotLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1odG1sLXNyY3NldC0yMDEzMDIyOC8jcHJvY2Vz
c2luZy10aGUtaW1hZ2UtY2FuZGlkYXRlcy4KLXN0YXRpYyB2b2lkIHBhcnNlSW1hZ2VzV2l0aFNj
YWxlRnJvbVNyY3NldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNyY3NldEF0dHJpYnV0ZSwgSW1h
Z2VDYW5kaWRhdGVzJiBpbWFnZUNhbmRpZGF0ZXMpCisvLyBodHRwOi8vcGljdHVyZS5yZXNwb25z
aXZlaW1hZ2VzLm9yZy8jcGFyc2Utc3Jjc2V0LWF0dHIKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJU
eXBlPgorc3RhdGljIHZvaWQgcGFyc2VJbWFnZUNhbmRpZGF0ZXNGcm9tU3Jjc2V0QXR0cmlidXRl
KGNvbnN0IENoYXJUeXBlKiBhdHRyaWJ1dGVTdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBWZWN0b3I8
SW1hZ2VDYW5kaWRhdGU+JiBpbWFnZUNhbmRpZGF0ZXMpCiB7Ci0gICAgQVNTRVJUKGltYWdlQ2Fu
ZGlkYXRlcy5pc0VtcHR5KCkpOworICAgIGNvbnN0IENoYXJUeXBlKiBhdHRyaWJ1dGVFbmQgPSBh
dHRyaWJ1dGVTdGFydCArIGxlbmd0aDsKIAotICAgIHNpemVfdCBpbWFnZUNhbmRpZGF0ZVN0YXJ0
ID0gMDsKLSAgICB1bnNpZ25lZCBzcmNzZXRBdHRyaWJ1dGVMZW5ndGggPSBzcmNzZXRBdHRyaWJ1
dGUubGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAoaW1hZ2VDYW5kaWRhdGVTdGFydCA8IHNyY3NldEF0
dHJpYnV0ZUxlbmd0aCkgewotICAgICAgICBmbG9hdCBpbWFnZVNjYWxlRmFjdG9yID0gMTsKLSAg
ICAgICAgc2l6ZV90IHNlcGFyYXRvcjsKLQotICAgICAgICAvLyA0LiBTcGxpdHRpbmcgbG9vcDog
U2tpcCB3aGl0ZXNwYWNlLgotICAgICAgICBzaXplX3QgaW1hZ2VVUkxTdGFydCA9IHNyY3NldEF0
dHJpYnV0ZS5maW5kKGlzTm90SFRNTFNwYWNlLCBpbWFnZUNhbmRpZGF0ZVN0YXJ0KTsKLSAgICAg
ICAgaWYgKGltYWdlVVJMU3RhcnQgPT0gbm90Rm91bmQpCisgICAgZm9yIChjb25zdCBDaGFyVHlw
ZSogcG9zaXRpb24gPSBhdHRyaWJ1dGVTdGFydDsgcG9zaXRpb24gPCBhdHRyaWJ1dGVFbmQ7KSB7
CisgICAgICAgIC8vIDQuIFNwbGl0dGluZyBsb29wOiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hh
cmFjdGVycyB0aGF0IGFyZSBzcGFjZSBjaGFyYWN0ZXJzIG9yIFUrMDAyQyBDT01NQSBjaGFyYWN0
ZXJzLgorICAgICAgICBza2lwV2hpbGU8Q2hhclR5cGUsIGlzSFRNTFNwYWNlT3JDb21tYTxDaGFy
VHlwZT4gPihwb3NpdGlvbiwgYXR0cmlidXRlRW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09
IGF0dHJpYnV0ZUVuZCkgeworICAgICAgICAgICAgLy8gQ29udHJhcnkgdG8gc3BlYyBsYW5ndWFn
ZSAtIGRlc2NyaXB0b3IgcGFyc2luZyBoYXBwZW5zIG9uIGVhY2ggY2FuZGlkYXRlLCBzbyB3aGVu
IHdlIHJlYWNoIHRoZSBhdHRyaWJ1dGVFbmQsIHdlIGNhbiBleGl0LgogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIC8vIElmIFRoZSBjdXJyZW50IGNhbmRpZGF0ZSBpcyBlaXRoZXIgdG90YWxs
eSBlbXB0eSBvciBvbmx5IGNvbnRhaW5zIHNwYWNlLCBza2lwcGluZy4KLSAgICAgICAgaWYgKHNy
Y3NldEF0dHJpYnV0ZVtpbWFnZVVSTFN0YXJ0XSA9PSAnLCcpIHsKLSAgICAgICAgICAgIGltYWdl
Q2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVSTFN0YXJ0ICsgMTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIC8vIDUuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0
ZXJzIHRoYXQgYXJlIG5vdCBzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgbGV0IHRoYXQgYmUgdXJsLgot
ICAgICAgICBzaXplX3QgaW1hZ2VVUkxFbmQgPSBzcmNzZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxT
cGFjZSwgaW1hZ2VVUkxTdGFydCArIDEpOwotICAgICAgICBpZiAoaW1hZ2VVUkxFbmQgPT0gbm90
Rm91bmQpIHsKLSAgICAgICAgICAgIGltYWdlVVJMRW5kID0gc3Jjc2V0QXR0cmlidXRlTGVuZ3Ro
OwotICAgICAgICAgICAgc2VwYXJhdG9yID0gc3Jjc2V0QXR0cmlidXRlTGVuZ3RoOwotICAgICAg
ICB9IGVsc2UgaWYgKHNyY3NldEF0dHJpYnV0ZVtpbWFnZVVSTEVuZCAtIDFdID09ICcsJykgewot
ICAgICAgICAgICAgLS1pbWFnZVVSTEVuZDsKLSAgICAgICAgICAgIHNlcGFyYXRvciA9IGltYWdl
VVJMRW5kOworICAgICAgICBjb25zdCBDaGFyVHlwZSogaW1hZ2VVUkxTdGFydCA9IHBvc2l0aW9u
OworICAgICAgICAvLyA2LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFy
ZSBub3Qgc3BhY2UgY2hhcmFjdGVycywgYW5kIGxldCB0aGF0IGJlIHVybC4KKworICAgICAgICBz
a2lwVW50aWw8Q2hhclR5cGUsIGlzSFRNTFNwYWNlPENoYXJUeXBlPiA+KHBvc2l0aW9uLCBhdHRy
aWJ1dGVFbmQpOworICAgICAgICBjb25zdCBDaGFyVHlwZSogaW1hZ2VVUkxFbmQgPSBwb3NpdGlv
bjsKKworICAgICAgICBEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdCByZXN1bHQ7CisKKyAgICAgICAg
Ly8gOC4gSWYgdXJsIGVuZHMgd2l0aCBhIFUrMDAyQyBDT01NQSBjaGFyYWN0ZXIgKCwpCisgICAg
ICAgIGlmIChpc0NvbW1hKCoocG9zaXRpb24gLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIFJlbW92
ZSBhbGwgdHJhaWxpbmcgVSswMDJDIENPTU1BIGNoYXJhY3RlcnMgZnJvbSB1cmwuCisgICAgICAg
ICAgICBpbWFnZVVSTEVuZCA9IHBvc2l0aW9uIC0gMTsKKyAgICAgICAgICAgIHJldmVyc2VTa2lw
V2hpbGU8Q2hhclR5cGUsIGlzQ29tbWE+KGltYWdlVVJMRW5kLCBpbWFnZVVSTFN0YXJ0KTsKKyAg
ICAgICAgICAgICsraW1hZ2VVUkxFbmQ7CisgICAgICAgICAgICAvLyBJZiB1cmwgaXMgZW1wdHks
IHRoZW4ganVtcCB0byB0aGUgc3RlcCBsYWJlbGVkIHNwbGl0dGluZyBsb29wLgorICAgICAgICAg
ICAgaWYgKGltYWdlVVJMU3RhcnQgPT0gaW1hZ2VVUkxFbmQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyA3LiBDb2xsZWN0IGEgc2Vx
dWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgIiwiIChVKzAwMkMpIGNoYXJhY3RlcnMs
IGFuZCBsZXQgdGhhdCBiZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgICAgIHNpemVfdCBpbWFnZVNj
YWxlU3RhcnQgPSBzcmNzZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VVUkxF
bmQgKyAxKTsKLSAgICAgICAgICAgIGltYWdlU2NhbGVTdGFydCA9IChpbWFnZVNjYWxlU3RhcnQg
PT0gbm90Rm91bmQpID8gc3Jjc2V0QXR0cmlidXRlTGVuZ3RoIDogaW1hZ2VTY2FsZVN0YXJ0Owot
ICAgICAgICAgICAgc2l6ZV90IGltYWdlU2NhbGVFbmQgPSBzcmNzZXRBdHRyaWJ1dGUuZmluZCgn
LCcgLCBpbWFnZVNjYWxlU3RhcnQgKyAxKTsKLSAgICAgICAgICAgIGltYWdlU2NhbGVFbmQgPSAo
aW1hZ2VTY2FsZUVuZCA9PSBub3RGb3VuZCkgPyBzcmNzZXRBdHRyaWJ1dGVMZW5ndGggOiBpbWFn
ZVNjYWxlRW5kOwotCi0gICAgICAgICAgICBpZiAoIXBhcnNlRGVzY3JpcHRvcnMoc3Jjc2V0QXR0
cmlidXRlLCBpbWFnZVNjYWxlU3RhcnQsIGltYWdlU2NhbGVFbmQsIGltYWdlU2NhbGVGYWN0b3Ip
KSB7Ci0gICAgICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IGltYWdlU2NhbGVFbmQg
KyAxOworICAgICAgICAgICAgLy8gQWR2YW5jaW5nIHBvc2l0aW9uIGhlcmUgKGNvbnRyYXJ5IHRv
IHNwZWMpIHRvIGF2b2lkIGFuIHVzZWxlc3MgZXh0cmEgc3RhdGUgbWFjaGluZSBzdGVwLgorICAg
ICAgICAgICAgLy8gRmlsZWQgYSBzcGVjIGJ1ZzogaHR0cHM6Ly9naXRodWIuY29tL1Jlc3BvbnNp
dmVJbWFnZXNDRy9waWN0dXJlLWVsZW1lbnQvaXNzdWVzLzE4OQorICAgICAgICAgICAgKytwb3Np
dGlvbjsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmdWaWV3PiBkZXNjcmlwdG9yVG9rZW5zOwor
ICAgICAgICAgICAgdG9rZW5pemVEZXNjcmlwdG9ycyhwb3NpdGlvbiwgYXR0cmlidXRlRW5kLCBk
ZXNjcmlwdG9yVG9rZW5zKTsKKyAgICAgICAgICAgIC8vIENvbnRyYXJ5IHRvIHNwZWMgbGFuZ3Vh
Z2UgLSBkZXNjcmlwdG9yIHBhcnNpbmcgaGFwcGVucyBvbiBlYWNoIGNhbmRpZGF0ZS4KKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBibGFjay1ib3ggZXF1aXZhbGVudCwgdG8gYXZvaWQgc3Rvcmlu
ZyBkZXNjcmlwdG9yIGxpc3RzIGZvciBlYWNoIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIGlmICgh
cGFyc2VEZXNjcmlwdG9ycyhkZXNjcmlwdG9yVG9rZW5zLCByZXN1bHQpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VwYXJhdG9yID0gaW1h
Z2VTY2FsZUVuZDsKICAgICAgICAgfQotICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZShpbWFn
ZVVSTFN0YXJ0LCBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3RhcnQsIGltYWdlU2NhbGVGYWN0b3Ip
OwotICAgICAgICBpbWFnZUNhbmRpZGF0ZXMuYXBwZW5kKGltYWdlKTsKKworICAgICAgICBBU1NF
UlQoaW1hZ2VVUkxFbmQgPiBpbWFnZVVSTFN0YXJ0KTsKKyAgICAgICAgdW5zaWduZWQgaW1hZ2VV
UkxMZW5ndGggPSBpbWFnZVVSTEVuZCAtIGltYWdlVVJMU3RhcnQ7CisgICAgICAgIGltYWdlQ2Fu
ZGlkYXRlcy5hcHBlbmQoSW1hZ2VDYW5kaWRhdGUoU3RyaW5nVmlldyhpbWFnZVVSTFN0YXJ0LCBp
bWFnZVVSTExlbmd0aCksIHJlc3VsdCwgSW1hZ2VDYW5kaWRhdGU6OlNyY3NldE9yaWdpbikpOwog
ICAgICAgICAvLyAxMS4gUmV0dXJuIHRvIHRoZSBzdGVwIGxhYmVsZWQgc3BsaXR0aW5nIGxvb3Au
Ci0gICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOwogICAgIH0KIH0K
IAotSW1hZ2VXaXRoU2NhbGUgYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgU3RyaW5nJiBzcmNBdHRyaWJ1dGUsIGNvbnN0IFN0cmlu
ZyYgc3Jjc2V0QXR0cmlidXRlKQorc3RhdGljIHZvaWQgcGFyc2VJbWFnZUNhbmRpZGF0ZXNGcm9t
U3Jjc2V0QXR0cmlidXRlKFN0cmluZ1ZpZXcgYXR0cmlidXRlLCBWZWN0b3I8SW1hZ2VDYW5kaWRh
dGU+JiBpbWFnZUNhbmRpZGF0ZXMpCiB7Ci0gICAgSW1hZ2VDYW5kaWRhdGVzIGltYWdlQ2FuZGlk
YXRlczsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlcGxhY2luZyB0aGUgZGly
ZWN0IHBvaW50ZXJzIGluIHRoZSBwYXJzaW5nIHByb2Nlc3Mgd2l0aCBTdHJpbmdWaWV3IGFuZCBw
b3NpdGlvbnMuCisgICAgaWYgKGF0dHJpYnV0ZS5pczhCaXQoKSkKKyAgICAgICAgcGFyc2VJbWFn
ZUNhbmRpZGF0ZXNGcm9tU3Jjc2V0QXR0cmlidXRlPExDaGFyPihhdHRyaWJ1dGUuY2hhcmFjdGVy
czgoKSwgYXR0cmlidXRlLmxlbmd0aCgpLCBpbWFnZUNhbmRpZGF0ZXMpOworICAgIGVsc2UKKyAg
ICAgICAgcGFyc2VJbWFnZUNhbmRpZGF0ZXNGcm9tU3Jjc2V0QXR0cmlidXRlPFVDaGFyPihhdHRy
aWJ1dGUuY2hhcmFjdGVyczE2KCksIGF0dHJpYnV0ZS5sZW5ndGgoKSwgaW1hZ2VDYW5kaWRhdGVz
KTsKK30KIAotICAgIHBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY3NldEF0dHJpYnV0ZShzcmNz
ZXRBdHRyaWJ1dGUsIGltYWdlQ2FuZGlkYXRlcyk7CitzdGF0aWMgSW1hZ2VDYW5kaWRhdGUgcGlj
a0Jlc3RJbWFnZUNhbmRpZGF0ZShmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgVmVjdG9yPEltYWdl
Q2FuZGlkYXRlPiYgaW1hZ2VDYW5kaWRhdGVzKQoreworICAgIGlmIChpbWFnZUNhbmRpZGF0ZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW1hZ2VDYW5kaWRhdGUoKTsKIAotICAgIGlmICgh
c3JjQXR0cmlidXRlLmlzRW1wdHkoKSkgewotICAgICAgICBJbWFnZVdpdGhTY2FsZSBzcmNQbGFj
ZWhvbGRlckltYWdlOwotICAgICAgICBpbWFnZUNhbmRpZGF0ZXMuYXBwZW5kKHNyY1BsYWNlaG9s
ZGVySW1hZ2UpOworICAgIC8vIGh0dHA6Ly9waWN0dXJlLnJlc3BvbnNpdmVpbWFnZXMub3JnLyNu
b3JtYWxpemUtc291cmNlLWRlbnNpdGllcworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogaW1h
Z2VDYW5kaWRhdGVzKSB7CisgICAgICAgIGlmIChjYW5kaWRhdGUuZGVuc2l0eSA8IDApCisgICAg
ICAgICAgICBjYW5kaWRhdGUuZGVuc2l0eSA9IERlZmF1bHREZW5zaXR5VmFsdWU7CiAgICAgfQog
Ci0gICAgaWYgKGltYWdlQ2FuZGlkYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbWFn
ZVdpdGhTY2FsZSgpOwotCi0gICAgc3RkOjpzdGFibGVfc29ydChpbWFnZUNhbmRpZGF0ZXMuYmVn
aW4oKSwgaW1hZ2VDYW5kaWRhdGVzLmVuZCgpLCBjb21wYXJlQnlTY2FsZUZhY3Rvcik7CisgICAg
c3RkOjpzdGFibGVfc29ydChpbWFnZUNhbmRpZGF0ZXMuYmVnaW4oKSwgaW1hZ2VDYW5kaWRhdGVz
LmVuZCgpLCBjb21wYXJlQnlEZW5zaXR5KTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW1hZ2VDYW5kaWRhdGVzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBpZiAoaW1hZ2VDYW5k
aWRhdGVzW2ldLnNjYWxlRmFjdG9yKCkgPj0gZGV2aWNlU2NhbGVGYWN0b3IpCi0gICAgICAgICAg
ICByZXR1cm4gaW1hZ2VDYW5kaWRhdGVzW2ldOworICAgIHVuc2lnbmVkIGk7CisgICAgZm9yIChp
ID0gMDsgaSA8IGltYWdlQ2FuZGlkYXRlcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgaWYg
KChpbWFnZUNhbmRpZGF0ZXNbaV0uZGVuc2l0eSA+PSBkZXZpY2VTY2FsZUZhY3RvcikpCisgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBmbG9hdCB3aW5uaW5nRGVuc2l0eSA9IGltYWdl
Q2FuZGlkYXRlc1tpXS5kZW5zaXR5OworCisgICAgdW5zaWduZWQgd2lubmVyID0gaTsKICAgICAv
LyAxNi4gSWYgYW4gZW50cnkgYiBpbiBjYW5kaWRhdGVzIGhhcyB0aGUgc2FtZSBhc3NvY2lhdGVk
IC4uLiBwaXhlbCBkZW5zaXR5IGFzIGFuIGVhcmxpZXIgZW50cnkgYSBpbiBjYW5kaWRhdGVzLAog
ICAgIC8vIHRoZW4gcmVtb3ZlIGVudHJ5IGIKLSAgICBzaXplX3Qgd2lubmVyID0gaW1hZ2VDYW5k
aWRhdGVzLnNpemUoKSAtIDE7Ci0gICAgc2l6ZV90IHByZXZpb3VzQ2FuZGlkYXRlID0gd2lubmVy
OwotICAgIGZsb2F0IHdpbm5pbmdTY2FsZUZhY3RvciA9IGltYWdlQ2FuZGlkYXRlcy5sYXN0KCku
c2NhbGVGYWN0b3IoKTsKLSAgICB3aGlsZSAoKHByZXZpb3VzQ2FuZGlkYXRlID4gMCkgJiYgKGlt
YWdlQ2FuZGlkYXRlc1stLXByZXZpb3VzQ2FuZGlkYXRlXS5zY2FsZUZhY3RvcigpID09IHdpbm5p
bmdTY2FsZUZhY3RvcikpCi0gICAgICAgIHdpbm5lciA9IHByZXZpb3VzQ2FuZGlkYXRlOworICAg
IHdoaWxlICgoaSA+IDApICYmIChpbWFnZUNhbmRpZGF0ZXNbLS1pXS5kZW5zaXR5ID09IHdpbm5p
bmdEZW5zaXR5KSkKKyAgICAgICAgd2lubmVyID0gaTsKIAogICAgIHJldHVybiBpbWFnZUNhbmRp
ZGF0ZXNbd2lubmVyXTsKIH0KIAorSW1hZ2VDYW5kaWRhdGUgYmVzdEZpdFNvdXJjZUZvckltYWdl
QXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgQXRvbWljU3RyaW5nJiBz
cmNBdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgc3Jjc2V0QXR0cmlidXRlKQoreworICAg
IGlmIChzcmNzZXRBdHRyaWJ1dGUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKHNyY0F0dHJpYnV0
ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBJbWFnZUNhbmRpZGF0ZSgpOworICAgICAg
ICByZXR1cm4gSW1hZ2VDYW5kaWRhdGUoU3RyaW5nVmlldyhzcmNBdHRyaWJ1dGUpLCBEZXNjcmlw
dG9yUGFyc2luZ1Jlc3VsdCgpLCBJbWFnZUNhbmRpZGF0ZTo6U3JjT3JpZ2luKTsKKyAgICB9CisK
KyAgICBWZWN0b3I8SW1hZ2VDYW5kaWRhdGU+IGltYWdlQ2FuZGlkYXRlczsKKworICAgIHBhcnNl
SW1hZ2VDYW5kaWRhdGVzRnJvbVNyY3NldEF0dHJpYnV0ZShTdHJpbmdWaWV3KHNyY3NldEF0dHJp
YnV0ZSksIGltYWdlQ2FuZGlkYXRlcyk7CisKKyAgICBpZiAoIXNyY0F0dHJpYnV0ZS5pc0VtcHR5
KCkpCisgICAgICAgIGltYWdlQ2FuZGlkYXRlcy5hcHBlbmQoSW1hZ2VDYW5kaWRhdGUoU3RyaW5n
VmlldyhzcmNBdHRyaWJ1dGUpLCBEZXNjcmlwdG9yUGFyc2luZ1Jlc3VsdCgpLCBJbWFnZUNhbmRp
ZGF0ZTo6U3JjT3JpZ2luKSk7CisKKyAgICByZXR1cm4gcGlja0Jlc3RJbWFnZUNhbmRpZGF0ZShk
ZXZpY2VTY2FsZUZhY3RvciwgaW1hZ2VDYW5kaWRhdGVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNyY3Nl
dFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNyY3NldFBhcnNlci5o
CmluZGV4IDM0NThiNTk2ZTI4NDk3MDMwM2RjOWJkY2Q3YmZhMDM0OWNjYmExODcuLjYyNDcyOTQy
YWQ1MmU0MGZlNTc3YjYzNjkzN2I4ZjMzNWZlNDc4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTcmNzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU3Jjc2V0UGFyc2VyLmgKQEAgLTEsNzMgKzEsMTA0IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEhUTUxTcmNzZXRQYXJzZXJfaAog
I2RlZmluZSBIVE1MU3Jjc2V0UGFyc2VyX2gKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJbWFnZVdpdGhTY2FsZSB7Citjb25zdCBpbnQgVW5pbml0aWFsaXplZERl
c2NyaXB0b3IgPSAtMTsKK2NvbnN0IGZsb2F0IERlZmF1bHREZW5zaXR5VmFsdWUgPSAxLjA7CisK
K2NsYXNzIERlc2NyaXB0b3JQYXJzaW5nUmVzdWx0IHsKIHB1YmxpYzoKLSAgICBJbWFnZVdpdGhT
Y2FsZSgpCi0gICAgICAgIDogbV9pbWFnZVVSTFN0YXJ0KDApCi0gICAgICAgICwgbV9pbWFnZVVS
TExlbmd0aCgwKQotICAgICAgICAsIG1fc2NhbGVGYWN0b3IoMSkKKyAgICBEZXNjcmlwdG9yUGFy
c2luZ1Jlc3VsdCgpCisgICAgICAgIDogbV9kZW5zaXR5KFVuaW5pdGlhbGl6ZWREZXNjcmlwdG9y
KQorICAgICAgICAsIG1fcmVzb3VyY2VXaWR0aChVbmluaXRpYWxpemVkRGVzY3JpcHRvcikKKyAg
ICAgICAgLCBtX3Jlc291cmNlSGVpZ2h0KFVuaW5pdGlhbGl6ZWREZXNjcmlwdG9yKQogICAgIHsK
ICAgICB9CiAKLSAgICBJbWFnZVdpdGhTY2FsZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBmbG9hdCBzY2FsZUZhY3RvcikKLSAgICAgICAgOiBtX2ltYWdlVVJMU3RhcnQoc3RhcnQp
Ci0gICAgICAgICwgbV9pbWFnZVVSTExlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9zY2FsZUZh
Y3RvcihzY2FsZUZhY3RvcikKKyAgICBib29sIGhhc0RlbnNpdHkoKSBjb25zdCB7IHJldHVybiBt
X2RlbnNpdHkgPj0gMDsgfQorICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlV2lkdGggPj0gMDsgfQorICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvdXJjZUhlaWdodCA+PSAwOyB9CisKKyAgICBmbG9hdCBkZW5zaXR5KCkgY29uc3QgeyBB
U1NFUlQoaGFzRGVuc2l0eSgpKTsgcmV0dXJuIG1fZGVuc2l0eTsgfQorICAgIHVuc2lnbmVkIHJl
c291cmNlV2lkdGgoKSBjb25zdCB7IEFTU0VSVChoYXNXaWR0aCgpKTsgcmV0dXJuIG1fcmVzb3Vy
Y2VXaWR0aDsgfQorICAgIHVuc2lnbmVkIHJlc291cmNlSGVpZ2h0KCkgY29uc3QgeyBBU1NFUlQo
aGFzSGVpZ2h0KCkpOyByZXR1cm4gbV9yZXNvdXJjZUhlaWdodDsgfQorCisgICAgdm9pZCBzZXRS
ZXNvdXJjZVdpZHRoKGludCB3aWR0aCkgeyBBU1NFUlQod2lkdGggPj0gMCk7IG1fcmVzb3VyY2VX
aWR0aCA9ICh1bnNpZ25lZCl3aWR0aDsgfQorICAgIHZvaWQgc2V0UmVzb3VyY2VIZWlnaHQoaW50
IGhlaWdodCkgeyBBU1NFUlQoaGVpZ2h0ID49IDApOyBtX3Jlc291cmNlSGVpZ2h0ID0gKHVuc2ln
bmVkKWhlaWdodDsgfQorICAgIHZvaWQgc2V0RGVuc2l0eShmbG9hdCBkZW5zaXR5VG9TZXQpIHsg
QVNTRVJUKGRlbnNpdHlUb1NldCA+PSAwKTsgbV9kZW5zaXR5ID0gZGVuc2l0eVRvU2V0OyB9CisK
K3ByaXZhdGU6CisgICAgZmxvYXQgbV9kZW5zaXR5OworICAgIGludCBtX3Jlc291cmNlV2lkdGg7
CisgICAgaW50IG1fcmVzb3VyY2VIZWlnaHQ7Cit9OworCitzdHJ1Y3QgSW1hZ2VDYW5kaWRhdGUg
eworICAgIGVudW0gT3JpZ2luQXR0cmlidXRlIHsKKyAgICAgICAgU3Jjc2V0T3JpZ2luLAorICAg
ICAgICBTcmNPcmlnaW4KKyAgICB9OworCisgICAgSW1hZ2VDYW5kaWRhdGUoKQorICAgICAgICA6
IGRlbnNpdHkoRGVmYXVsdERlbnNpdHlWYWx1ZSkKKyAgICAgICAgLCByZXNvdXJjZVdpZHRoKFVu
aW5pdGlhbGl6ZWREZXNjcmlwdG9yKQorICAgICAgICAsIG9yaWdpbkF0dHJpYnV0ZShTcmNzZXRP
cmlnaW4pCiAgICAgewogICAgIH0KIAotICAgIFN0cmluZyBpbWFnZVVSTChjb25zdCBTdHJpbmcm
IHNyY0F0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBzcmNzZXRBdHRyaWJ1dGUpIGNvbnN0CisgICAg
SW1hZ2VDYW5kaWRhdGUoY29uc3QgU3RyaW5nVmlldyYgc291cmNlLCBjb25zdCBEZXNjcmlwdG9y
UGFyc2luZ1Jlc3VsdCYgcmVzdWx0LCBPcmlnaW5BdHRyaWJ1dGUgb3JpZ2luQXR0cmlidXRlKQor
ICAgICAgICA6IHN0cmluZyhzb3VyY2UpCisgICAgICAgICwgZGVuc2l0eShyZXN1bHQuaGFzRGVu
c2l0eSgpID8gcmVzdWx0LmRlbnNpdHkoKSA6IFVuaW5pdGlhbGl6ZWREZXNjcmlwdG9yKQorICAg
ICAgICAsIHJlc291cmNlV2lkdGgocmVzdWx0Lmhhc1dpZHRoKCkgPyByZXN1bHQucmVzb3VyY2VX
aWR0aCgpIDogVW5pbml0aWFsaXplZERlc2NyaXB0b3IpCisgICAgICAgICwgb3JpZ2luQXR0cmli
dXRlKG9yaWdpbkF0dHJpYnV0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltYWdlVVJMTGVu
Z3RoID8gc3Jjc2V0QXR0cmlidXRlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKG1faW1hZ2VVUkxTdGFy
dCwgbV9pbWFnZVVSTExlbmd0aCkgOiBzcmNBdHRyaWJ1dGU7CiAgICAgfQogCi0gICAgZmxvYXQg
c2NhbGVGYWN0b3IoKSBjb25zdAorICAgIGJvb2wgc3JjT3JpZ2luKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3NjYWxlRmFjdG9yOworICAgICAgICByZXR1cm4gKG9yaWdpbkF0dHJp
YnV0ZSA9PSBTcmNPcmlnaW4pOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2lt
YWdlVVJMU3RhcnQ7Ci0gICAgdW5zaWduZWQgbV9pbWFnZVVSTExlbmd0aDsKLSAgICBmbG9hdCBt
X3NjYWxlRmFjdG9yOworICAgIFN0cmluZ1ZpZXcgc3RyaW5nOworICAgIGZsb2F0IGRlbnNpdHk7
CisgICAgaW50IHJlc291cmNlV2lkdGg7CisgICAgT3JpZ2luQXR0cmlidXRlIG9yaWdpbkF0dHJp
YnV0ZTsKIH07CiAKLS8vIFNwYWNlIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBieSB0aGUgSFRNTCBz
cGVjaWZpY2F0aW9uLgotYm9vbCBpc0hUTUxTcGFjZShVQ2hhcik7Ci1ib29sIGlzSFRNTExpbmVC
cmVhayhVQ2hhcik7Ci1ib29sIGlzTm90SFRNTFNwYWNlKFVDaGFyKTsKLWJvb2wgaXNIVE1MU3Bh
Y2VCdXROb3RMaW5lQnJlYWsoVUNoYXIgY2hhcmFjdGVyKTsKLQotSW1hZ2VXaXRoU2NhbGUgYmVz
dEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29u
c3QgU3RyaW5nJiBzcmNBdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYgc291cmNlU2V0QXR0cmlidXRl
KTsKK0ltYWdlQ2FuZGlkYXRlIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IEF0b21pY1N0cmluZyYgc3JjQXR0cmlidXRlLCBjb25z
dCBBdG9taWNTdHJpbmcmIHNyY3NldEF0dHJpYnV0ZSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MmI4MDBiZjM5
OGU5ZTk1MWFhMzllMWZmMjJiZjQwYzQ4MjQzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw4MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUGFyc2luZ1V0aWxpdGllc19oCisjZGVmaW5lIFBhcnNpbmdVdGlsaXRpZXNfaAorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK2Jvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5
cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQor
eworICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gZGVsaW1pdGVyKSB7Cisg
ICAgICAgICsrcG9zaXRpb247CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3Rl
clByZWRpY2F0ZShDaGFyVHlwZSk+Citib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYg
cG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQpCit7CisgICAgaWYgKHBvc2l0aW9uIDwgZW5k
ICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKSB7CisgICAgICAgICsrcG9zaXRpb247
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgordm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQorewor
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0gZGVsaW1pdGVyKQorICAg
ICAgICArK3Bvc2l0aW9uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBj
aGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwVW50aWwoY29uc3QgQ2hhclR5
cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKK3sKKyAgICB3aGlsZSAocG9zaXRp
b24gPCBlbmQgJiYgIWNoYXJhY3RlclByZWRpY2F0ZSgqcG9zaXRpb24pKQorICAgICAgICArK3Bv
c2l0aW9uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQ
cmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3Np
dGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQg
JiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3NpdGlvbikpCisgICAgICAgICsrcG9zaXRpb247Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShD
aGFyVHlwZSk+Cit2b2lkIHJldmVyc2VTa2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlv
biwgY29uc3QgQ2hhclR5cGUqIHN0YXJ0KQoreworICAgIHdoaWxlIChwb3NpdGlvbiA+PSBzdGFy
dCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBvc2l0aW9uKSkKKyAgICAgICAgLS1wb3NpdGlvbjsK
K30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svUGFy
c2luZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9QYXJzaW5nVXRpbGl0
aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOGZhOWU1NTI5NWY3NjM0NmI1
NmEwMmQ4OGFhMjJkMmY4NThhM2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9QYXJzaW5nVXRpbGl0aWVzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYXJzaW5nVXRpbGl0aWVzX2gK
LSNkZWZpbmUgUGFyc2luZ1V0aWxpdGllc19oCi0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBl
PgotYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFy
VHlwZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0ZXIpCi17Ci0gICAgaWYgKHBvc2l0aW9uIDwgZW5k
ICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKLSAgICAgICAgKytwb3NpdGlvbjsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KLWJv
b2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUq
IGVuZCkKLXsKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpw
b3NpdGlvbikpIHsKLSAgICAgICAgKytwb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+
Ci12b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlw
ZSogZW5kLCBDaGFyVHlwZSBkZWxpbWl0ZXIpCi17Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5k
ICYmICpwb3NpdGlvbiAhPSBkZWxpbWl0ZXIpCi0gICAgICAgICsrcG9zaXRpb247Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlw
ZSk+Ci12b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFy
VHlwZSogZW5kKQotewotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAhY2hhcmFjdGVyUHJl
ZGljYXRlKCpwb3NpdGlvbikpCi0gICAgICAgICsrcG9zaXRpb247Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+Ci12b2lk
IHNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5k
KQotewotICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUoKnBv
c2l0aW9uKSkKLSAgICAgICAgKytwb3NpdGlvbjsKLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlODdl
MDgwZmFkOTVhNjhhOWNlYjA1NTA5NTBjMDNmZTU3MjgzMmQ1Li5kZjkxNGFjOGIxNTkzYmRkMTM5
MTE1NDBiOTg3ZDc1ZmJiZjRjOGMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQtMDYtMDQg
IFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CisKKyAgICAgICAgQWxpZ24gc3Jjc2V0IHBhcnNl
ciB3aXRoIHJlY2VudCBzcGVjIGNoYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMzUwNAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIEkgaGF2ZSBjaGFuZ2VkIHRoZSAiaW52YWxpZC1kZXNjcmlwdG9yIiB0
ZXN0IGFuZCByZW1vdmVkIHRoZSAiaW52YWxpZAorICAgICAgICBpbnB1dHMgY29ycmVjdCBzcmMi
IHRlc3QgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IGludmFsaWQgZGVzY3JpcHRvcnMKKyAgICAg
ICAgYXJlIG5vdyB0cmVhdGVkIGlkZW50aWNhbGx5IHRvIG51bGwgZGVzY3JpcHRvcnMuIFRoYXQg
aXMgYWNjb3JkaW5nIHRvCisgICAgICAgIHRoZSBzcGVjLgorICAgICAgICBJJ3ZlIGFsc28gYWRk
ZWQgbmV3IHRlc3RzIHRoYXQgbWFrZSBzdXJlIHRoYXQgdGhlIHNwZWMncyBmdXR1cmUKKyAgICAg
ICAgY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSB3b3JraW5nLgorCisgICAgICAgICogZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtaW52YWxpZC1kZXNjcmlwdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWRlc2NyaXB0b3IuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1jb3JyZWN0LXNyYy1l
eHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
aW52YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMuaHRtbDogUmVtb3ZlZC4KKwogMjAxNC0wNi0wNCAg
QmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYXBl
c10gSW1hZ2UgbGlmZXRpbWUgaXMgbm90IHByb3Blcmx5IGhhbmRsZWQgZm9yIGdyYWRpZW50IHNo
YXBlcwpAQCAtOTMxNSw4ICs5MzM0LDggQEAKICAgICAgICAgKiBtZWRpYS90cmFjay93M2MvdHJh
Y2svd2VidnR0L3N1cHBvcnQvYWxpZ25fZW5kX2xvbmcudnR0OiBDb3BpZWQgZnJvbSBtZWRpYS90
cmFjay9vcGVyYS90cmFjay93ZWJ2dHQvcmVuZGVyaW5nL3JlZnRlc3Qvc3VwcG9ydC9hbGlnbl9l
bmRfbG9uZy52dHQuCiAgICAgICAgICogbWVkaWEvdHJhY2svdzNjL3RyYWNrL3dlYnZ0dC9zdXBw
b3J0L2Zvby52dHQ6IENvcGllZCBmcm9tIG1lZGlhL3RyYWNrL29wZXJhL3RyYWNrL3dlYnZ0dC9y
ZW5kZXJpbmcvcmVmdGVzdC9zdXBwb3J0L2Zvby52dHQuCiAgICAgICAgICogbWVkaWEvdHJhY2sv
dzNjL3RyYWNrL3dlYnZ0dC9zdXBwb3J0L3JlZlRlc3RXYWl0LmpzOiBDb3BpZWQgZnJvbSBtZWRp
YS90cmFjay9vcGVyYS90cmFjay93ZWJ2dHQvcmVuZGVyaW5nL3JlZnRlc3Qvc3VwcG9ydC9yZWZU
ZXN0V2FpdC5qcy4KLQkJKiBwbGF0Zm9ybS9lZnQvVGVzdEV4cGVjdGF0aW9uczogU2tpcCB3M2Mg
dGVzdHMuCi0JCSogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6IFNraXAgdzNjIHRlc3Rz
LgorICAgICAgICAqIHBsYXRmb3JtL2VmdC9UZXN0RXhwZWN0YXRpb25zOiBTa2lwIHczYyB0ZXN0
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczogU2tpcCB3M2MgdGVz
dHMuCiAKIDIwMTQtMDQtMDggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1kZXNj
cmlwdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0
LWludmFsaWQtZGVzY3JpcHRvci1leHBlY3RlZC50eHQKaW5kZXggNmRiNWJjMTRiYWU0ZTQ4OTlk
ODNiZDY2MzYwYjg2MTUzMTQwZTc4Zi4uZTIyZTg1ZDI4YjVkOTI1MzVjODJjZThhODQ4ZmI5YTVl
ZTMxMjI0ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
aW52YWxpZC1kZXNjcmlwdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWRlc2NyaXB0b3ItZXhwZWN0ZWQudHh0CkBAIC0xLDgg
KzEsMTIgQEAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTEwMCBp
cyB0cnVlCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28yIikuY2xpZW50V2lkdGg9
PTIwMCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnZhbGlkX3dpdGhf
eCIpLmNsaWVudFdpZHRoIGlzIDEwMAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW52
YWxpZF93aXRob3V0X3giKS5jbGllbnRXaWR0aCBpcyAxMDAKK1BBU1MgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImZ1dHVyZV9kZXNjcmlwdG9yIikuY2xpZW50V2lkdGggaXMgMTAwCitQQVNTIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdXR1cmVfZGVzY3JpcHRvcl93aXRob3V0X3giKS5jbGll
bnRXaWR0aCBpcyAxMDAKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhfd2l0aF93X2ln
bm9yZWQiKS5jbGllbnRXaWR0aCBpcyAyMDAKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Inhfd2l0aF9oX2lnbm9yZWQiKS5jbGllbnRXaWR0aCBpcyAyMDAKIFRoaXMgdGVzdCBwYXNzZXMg
aWYgdGhlIGltYWdlIGJlbG93IGlzIGEgMTAwcHggYmx1ZSBzcXVhcmUgd2hlbiB0aGUgZGV2aWNl
U2NhbGVGYWN0b3IgaXMgMS4KIEl0IHRlc3RzIHRoYXQgZXZlbiB0aG91Z2ggdGhlIDF4IHJlc291
cmNlIGNvbnRhaW5zIG1hbnkgaW52YWxpZCBkZXNjcmlwdG9ycywgb25seSB0aGUgaW52YWxpZCBk
ZXNjcmlwdG9ycyBhcmUgaWdub3JlZCAoYWNjb3JkaW5nIHRvIHRoZSBzcGVjKS4KLSAgCisgICAg
ICAgICAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWlu
dmFsaWQtZGVzY3JpcHRvci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNz
ZXQtaW52YWxpZC1kZXNjcmlwdG9yLmh0bWwKaW5kZXggYjFjMDJlODc1OWFkNzk1ZDgwMDQ1ZTJi
NGVmMTQ3MTI4NjAxMzE1OC4uOTUwNjk5NjkyMjliZDlmMDllNzRkYjg0NWE4ZTE5Yjk0NWZlMDIx
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxp
ZC1kZXNjcmlwdG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNz
ZXQtaW52YWxpZC1kZXNjcmlwdG9yLmh0bWwKQEAgLTcsOCArNywxMiBAQAogPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAgICAgYWRk
RXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewotICAgICAgICBzaG91bGRCZVRydWUo
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRXaWR0aD09MTAwJyk7Ci0gICAg
ICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbzIiKS5jbGllbnRX
aWR0aD09MjAwJyk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aW52YWxpZF93aXRoX3giKS5jbGllbnRXaWR0aCcsICcxMDAnKTsKKyAgICAgICAgc2hvdWxkQmUo
J2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnZhbGlkX3dpdGhvdXRfeCIpLmNsaWVudFdpZHRo
JywgJzEwMCcpOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ1
dHVyZV9kZXNjcmlwdG9yIikuY2xpZW50V2lkdGgnLCAnMTAwJyk7CisgICAgICAgIHNob3VsZEJl
KCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnV0dXJlX2Rlc2NyaXB0b3Jfd2l0aG91dF94Iiku
Y2xpZW50V2lkdGgnLCAnMTAwJyk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgieF93aXRoX3dfaWdub3JlZCIpLmNsaWVudFdpZHRoJywgJzIwMCcpOworICAgICAg
ICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhfd2l0aF9oX2lnbm9yZWQiKS5j
bGllbnRXaWR0aCcsICcyMDAnKTsKICAgICB9LCBmYWxzZSk7CiA8L3NjcmlwdD4KIDwvaGVhZD4K
QEAgLTE3LDcgKzIxLDExIEBACiAgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFn
ZSBiZWxvdyBpcyBhIDEwMHB4IGJsdWUgc3F1YXJlIHdoZW4gdGhlIGRldmljZVNjYWxlRmFjdG9y
IGlzIDEuPC9kaXY+CiAgICAgPGRpdj4gSXQgdGVzdHMgdGhhdCBldmVuIHRob3VnaCB0aGUgMXgg
cmVzb3VyY2UgY29udGFpbnMgbWFueSBpbnZhbGlkIGRlc2NyaXB0b3JzLAogICAgICAgICBvbmx5
IHRoZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFyZSBpZ25vcmVkIChhY2NvcmRpbmcgdG8gdGhlIHNw
ZWMpLjwvZGl2PgotICAgIDxpbWcgaWQ9ImZvbyIgc3JjPSIiIHNyY3NldD0icmVzb3VyY2VzL2Js
dWUtMTAwLXB4LXNxdWFyZS5wbmcgNDNxIDF4IGRmcyAzZGQsIHJlc291cmNlcy9ncmVlbi00MDAt
cHgtc3F1YXJlLnBuZyAyeCI+Ci0gICAgPGltZyBpZD0iZm9vMiIgc3JjPSIiIHNyY3NldD0icmVz
b3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgMzAwcSwgcmVzb3VyY2VzL2dyZWVuLTQwMC1w
eC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1nIGlkPSJpbnZhbGlkX3dpdGhfeCIgc3JjPSIiIHNy
Y3NldD0icmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgNDNxIDF4IGRmcyAzZGQsIHJl
c291cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+CisgICAgPGltZyBpZD0iaW52YWxp
ZF93aXRob3V0X3giIHNyYz0iIiBzcmNzZXQ9InJlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUu
cG5nIDMwMHEsIHJlc291cmNlcy9ncmVlbi00MDAtcHgtc3F1YXJlLnBuZyAyeCI+CisgICAgPGlt
ZyBpZD0iZnV0dXJlX2Rlc2NyaXB0b3IiIHNyY3NldD0iLHJlc291cmNlcy9ibHVlLTEwMC1weC1z
cXVhcmUucG5nIDF4IGZ1dHVyZS1kZXNjcmlwdG9yKDN4LCA0aCwgd2hhdGV2ZXIpLCByZXNvdXJj
ZXMvZ3JlZW4tNDAwLXB4LXNxdWFyZS5wbmcgMngiPgorICAgIDxpbWcgaWQ9ImZ1dHVyZV9kZXNj
cmlwdG9yX3dpdGhvdXRfeCIgc3Jjc2V0PSIscmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5w
bmcgZnV0dXJlLWRlc2NyaXB0b3IoM3gsIDRoLCB3aGF0ZXZlciksIHJlc291cmNlcy9ncmVlbi00
MDAtcHgtc3F1YXJlLnBuZyAyeCI+CisgICAgPGltZyBpZD0ieF93aXRoX3dfaWdub3JlZCIgc3Jj
c2V0PSIscmVzb3VyY2VzL2JsdWUtMTAwLXB4LXNxdWFyZS5wbmcgMXggMTAwdywgcmVzb3VyY2Vz
L2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIDJ4Ij4KKyAgICA8aW1nIGlkPSJ4X3dpdGhfaF9pZ25v
cmVkIiBzcmNzZXQ9IixyZXNvdXJjZXMvYmx1ZS0xMDAtcHgtc3F1YXJlLnBuZyAxeCAxMDBoLCBy
ZXNvdXJjZXMvZ3JlZW4tNDAwLXB4LXNxdWFyZS5wbmcgMngiPgogPC9ib2R5PgogPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1p
bnB1dHMtY29ycmVjdC1zcmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9p
bWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMtZXhwZWN0ZWQudHh0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmI3ZWRjOGMzZGM0YTQyOGI3ZmU1YjE4YmYxNTMy
MGJjOTAxNDI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWNvcnJl
Y3Qtc3JjLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTQwMCBpcyB0cnVlCi1U
aGlzIHRlc3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBhIGdyZWVuIHNxdWFyZSBy
ZWdhcmRsZXNzIG9mIHRoZSBzY2FsZSBmYWN0b3IuIEl0IGVuc3VyZXMgdGhhdCBpbnZhbGlkIGlu
cHV0cyBmcm9tIHNyY3NldCBhcmUgaWdub3JlZCwgYW5kIHNyYyBpcyBzZWxlY3RlZCAoc2luY2Ug
aXQncyB0aGUgb25seSBjYW5kaWRhdGUgbGVmdCkKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWNvcnJl
Y3Qtc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MGJjMjFmNTQxNDVh
NjFkN2I5ZGQ2OWRiYjNlMmU0M2VkNzJiNzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52
YWxpZC1pbnB1dHMtY29ycmVjdC1zcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAg
QEAKLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NyY3NldC1oZWxwZXIu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewotICAg
ICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB9Ci0KLSAgICBhZGRFdmVudExpc3Rl
bmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT00MDAnKTsKLSAgICB9LCBmYWxzZSk7
Ci08L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJvZHkgaWQ9ImJvZHkiPgotICAgIDxkaXY+VGhpcyB0
ZXN0IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgYSBncmVlbiBzcXVhcmUgcmVnYXJk
bGVzcyBvZiB0aGUgc2NhbGUgZmFjdG9yLiBJdCBlbnN1cmVzIHRoYXQgaW52YWxpZCBpbnB1dHMK
LSAgICBmcm9tIHNyY3NldCBhcmUgaWdub3JlZCwgYW5kIHNyYyBpcyBzZWxlY3RlZCAoc2luY2Ug
aXQncyB0aGUgb25seSBjYW5kaWRhdGUgbGVmdCk8L2Rpdj4KLSAgICA8aW1nIGlkPSJmb28iIHNy
Yz0icmVzb3VyY2VzL2dyZWVuLTQwMC1weC1zcXVhcmUucG5nIiBzcmNzZXQ9IjF4IDV3LCwgICwg
ICAgICAsIDJ4ICA2MDBoLCwiPgotPC9ib2R5PgotPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>