<?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>233276</bug_id>
          
          <creation_ts>2021-11-17 12:44:43 -0800</creation_ts>
          <short_desc>[WGSL] Implement enough of the lexer for the simplest shaders</short_desc>
          <delta_ts>2022-03-08 16:52:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>236783</blocked>
    
    <blocked>237629</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1816071</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-11-17 12:44:43 -0800</bug_when>
    <thetext>It begins!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816073</commentid>
    <comment_count>1</comment_count>
      <attachid>444554</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-11-17 12:45:28 -0800</bug_when>
    <thetext>Created attachment 444554
WIP

Not ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816079</commentid>
    <comment_count>2</comment_count>
      <attachid>444557</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-11-17 13:14:56 -0800</bug_when>
    <thetext>Created attachment 444557
WIP

without forgetting Lexer.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817683</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-24 12:45:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/85732675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818492</commentid>
    <comment_count>4</comment_count>
      <attachid>445349</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-11-29 14:49:27 -0800</bug_when>
    <thetext>Created attachment 445349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818611</commentid>
    <comment_count>5</comment_count>
      <attachid>445349</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-29 23:06:08 -0800</bug_when>
    <thetext>Comment on attachment 445349
Patch

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

&gt; Source/WebGPU/WGSL/AST/ASTNode.h:30
&gt; +namespace WGSL { namespace AST {

namespace WGSL::AST {

&gt; Source/WebGPU/WGSL/AST/ASTNode.h:39
&gt; +// FIXME: all of these should probably be marked FAST_MALLOC or whatever it is to use bmalloc/libpas

I did something similar in https://trac.webkit.org/changeset/286224/webkit

&gt; Source/WebGPU/WGSL/AST/Attribute.h:32
&gt; +class Attribute : public ASTNode {};

Nit: Can classes have the } on a new line?

Why are attributes represented as AST nodes? They&apos;re not recursive. Why not treat them as data?

&gt; Source/WebGPU/WGSL/AST/Attribute.h:36
&gt; +class AttributeGroup : public Attribute {

Nit: Usually descriptions go before the thing they&apos;re describing, so this should probably be GroupAttribute (and ditto for below).

&gt; Source/WebGPU/WGSL/AST/Attribute.h:38
&gt; +    unsigned group() const { return m_value; }

Nit: usually we have an empty line before private: (or protected:)

&gt; Source/WebGPU/WGSL/AST/Attribute.h:52
&gt; +    enum Stage : uint8_t {

enum class?

&gt; Source/WebGPU/WGSL/AST/Expression.h:32
&gt; +class Expression : public ASTNode {};

This file is going to get quite big. Are you sure you want to have all nodes defined in a single file?

&gt; Source/WebGPU/WGSL/AST/GlobalDecl.h:50
&gt; +    // Each of the following may be null

Nit: I don&apos;t think this comment is particularly helpful, because we have a class UniqueRef for non-nullable unique ptrs, so the type says that it can be null.

The comment on the next line, though, is helpful.

&gt; Source/WebGPU/WGSL/AST/GlobalDecl.h:63
&gt; +    StringView m_name;

It&apos;s cool that you&apos;re using StringViews and not Strings.

&gt; Source/WebGPU/WGSL/AST/GlobalDecl.h:66
&gt; +class StructDecl : public GlobalDecl {

Nit: Blank line between classes, please.

&gt; Source/WebGPU/WGSL/AST/GlobalDecl.h:85
&gt; +};

Ditto.

&gt; Source/WebGPU/WGSL/AST/GlobalDecl.h:92
&gt; +    Type* maybeReturnType() { return m_returnType.get(); }

Because this returns a pointer, I don&apos;t see much value in calling it &quot;maybe&quot;. If it wasn&apos;t &quot;maybe,&quot; it would return a reference.

&gt; Source/WebGPU/WGSL/AST/Statement.h:34
&gt; +class CompoundStatement : public Statement {

Why not &quot;Block&quot;?

&gt; Source/WebGPU/WGSL/AST/Statement.h:41
&gt; +class ReturnStatement : public Statement {

You&apos;re probably going to want the SPECIALIZE_TYPE_TRAITS stuff and virtual functions to be able to downcast these.

&gt; Source/WebGPU/WGSL/AST/Statement.h:43
&gt; +    Expression* maybeExpression() { return m_expression.get(); }

Ditto about &quot;maybe&quot;

&gt; Source/WebGPU/WGSL/AST/Statement.h:50
&gt; +    Expression* maybeLhs() { return m_lhs.get(); }

... and other places too

&gt; Source/WebGPU/WGSL/AST/Statement.h:51
&gt; +    Expression* rhs() { return m_rhs.get(); }

This should probably return a &amp;

&gt; Source/WebGPU/WGSL/AST/Statement.h:55
&gt; +    std::unique_ptr&lt;Expression&gt; m_rhs;

This should probably be a UniqueRef

&gt; Source/WebGPU/WGSL/AST/Type.h:44
&gt; +    enum Kind {

Woah. I guess that&apos;s cool, since we don&apos;t have real templates/generics (yet).

&gt; Source/WebGPU/WGSL/AST/Type.h:68
&gt; +class BoolType : public Type {};
&gt; +class Float32Type : public Type {};
&gt; +class Int32Type : public Type {};
&gt; +class Uint32Type : public Type {};

Should these really be C++ types? User-defined types will be represented in C++ as instances of a C++ class, not as new C++ classes. Why not just have an instance of Type in-memory that is &quot;the Float32 type&quot;?

&gt; Source/WebGPU/WGSL/AST/VariableQualifier.h:40
&gt; +enum class AccessMode : uint8_t {

Other places you have the enum class inside the class its used in. How do you decide whether it should be in the class or outside the class?

&gt; Source/WebGPU/WGSL/Lexer.cpp:33
&gt; +Token Lexer&lt;T&gt;::lex()

Aren&apos;t there lexer generators? Did you consider using one of them?

&gt; Source/WebGPU/WGSL/Lexer.cpp:60
&gt; +        case &apos;(&apos;:

WebKit style is to put the cases at the same indentation as the switch.

&gt; Source/WebGPU/WGSL/Lexer.cpp:107
&gt; +            std::optional&lt;uint64_t&gt; postPeriod = parseDecimalInteger();

How does this work with &quot;a.b&quot;?

&gt; Source/WebGPU/WGSL/Lexer.cpp:111
&gt; +            literalValue /= pow(10, m_offset - offset);

How confident are you that we&apos;re getting the right ULPs here?

&gt; Source/WebGPU/WGSL/Lexer.cpp:123
&gt; +            break;

I don&apos;t understand how this works. surely &quot;a - b&quot; shouldn&apos;t return an invalid token?

How does unary minus work?

&gt; Source/WebGPU/WGSL/Lexer.cpp:155
&gt; +                        fractionalPart /= pow(10, m_offset - offset);

Ditto about ULPs

&gt; Source/WebGPU/WGSL/Lexer.cpp:222
&gt; +                // FIXME: a trie would be more efficient here, look at JavaScriptCore/KeywordLookupGenerator.py for an example of code autogeneration that produces such a trie.

Yep.

Do we actually need a custom python script, or can we use some existing package? Maybe something in lex/yacc/bison/something else?

&gt; Source/WebGPU/WGSL/Lexer.cpp:224
&gt; +                // FIXME: I don&apos;t think that true/false/f32/u32/i32/bool need to be their own tokens, they could just be regular identifiers.

Is it legal to say &quot;let f32 = 7;&quot;? If not, they should probably be their own tokens.

&gt; Source/WebGPU/WGSL/Lexer.cpp:270
&gt; +        if (m_current == &apos;\n&apos;) {

we have a name &quot;newlineCharacter&quot; for this in wtf/CharacterNames.h

&gt; Source/WebGPU/WGSL/Lexer.cpp:309
&gt; +    if (value.hasOverflowed())
&gt; +        return std::nullopt;

Surely this should fail in a different way than the !isDecimal() check above?

&gt; Source/WebGPU/WGSL/Lexer.cpp:450
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isWhiteSpace(UChar ch)
&gt; +{
&gt; +    // WGSL does not currently support any non-ASCII whitespace characters
&gt; +    return Lexer&lt;LChar&gt;::isWhiteSpace(static_cast&lt;LChar&gt;(ch));
&gt; +}
&gt; +
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isIdentifierStart(UChar ch)
&gt; +{
&gt; +    // WGSL does not currently support any non-ASCII characters in identifiers
&gt; +    return Lexer&lt;LChar&gt;::isIdentifierStart(static_cast&lt;LChar&gt;(ch));
&gt; +}
&gt; +
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isValidIdentifierCharacter(UChar ch)
&gt; +{
&gt; +    // WGSL does not currently support any non-ASCII characters in identifiers
&gt; +    return Lexer&lt;LChar&gt;::isValidIdentifierCharacter(static_cast&lt;LChar&gt;(ch));
&gt; +}
&gt; +
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isDecimal(UChar ch)
&gt; +{
&gt; +    return Lexer&lt;LChar&gt;::isDecimal(static_cast&lt;LChar&gt;(ch));
&gt; +}
&gt; +
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isHexadecimal(UChar ch)
&gt; +{
&gt; +    return Lexer&lt;LChar&gt;::isHexadecimal(static_cast&lt;LChar&gt;(ch));
&gt; +}
&gt; +
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE uint64_t Lexer&lt;UChar&gt;::readDecimal(UChar ch)
&gt; +{
&gt; +    return Lexer&lt;LChar&gt;::readDecimal(static_cast&lt;LChar&gt;(ch));
&gt; +}
&gt; +
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE uint64_t Lexer&lt;UChar&gt;::readHexadecimal(UChar ch)
&gt; +{
&gt; +    return Lexer&lt;LChar&gt;::readHexadecimal(static_cast&lt;LChar&gt;(ch));
&gt; +}

This I think is more evidence that a StringView and a size_t will be sufficient.

&gt; Source/WebGPU/WGSL/Lexer.h:39
&gt; +        if constexpr (std::is_same&lt;T, LChar&gt;::value) {

https://mobile.twitter.com/Litherum/status/1456047144519954436

I&apos;m still not convinced that we actually need this template goop though. A StringView and a size_t should be sufficient.

&gt; Source/WebGPU/WGSL/Lexer.h:71
&gt; +    // Parse pattern (e|E)(\+|-)?[0-9]+f? if it is present, and return the exponent

Perhaps these comments would be more useful around the definition, rather than the declaration.

&gt; Source/WebGPU/WGSL/Lexer.h:75
&gt; +    const T* m_code;

Why did you choose to hold this in a pointer, rather than a StringView and a size_t? If you did it that way, this whole thing wouldn&apos;t need to be templated.

&gt; Source/WebGPU/WGSL/Parser.cpp:35
&gt; +    (void) lexer;

UNUSED_VARIABLE(lexer);

&gt; Source/WebGPU/WGSL/Parser.cpp:37
&gt; +    return { { }, { } };

This is my favorite shader. 😜

&gt; Source/WebGPU/WGSL/Parser.h:32
&gt; +template&lt;typename Lexer&gt;

Are you planning on having more than one kind of lexer? Why not just hardcode the one lexer that we&apos;ve got?

&gt; Source/WebGPU/WGSL/SourceSpan.h:40
&gt; +    unsigned m_line;
&gt; +    unsigned m_lineOffset;
&gt; +    unsigned m_offset;
&gt; +    unsigned m_length;

Can we derive 2 of these 4 fields at reporting time, so we can store half the data in all the nodes?

&gt; Source/WebGPU/WGSL/SourceSpan.h:42
&gt; +    SourceSpan(unsigned line, unsigned lineOffset, unsigned offset, unsigned length)

This is unnecessary. In the places where you could have written SourceSpan(1, 2, 3, 4) you can instead write SourceSpan { 1, 2, 3, 4 } (or sometimes even just { 1, 2, 3, 4 }). Using { } is preferred according to webkit style.

&gt; Source/WebGPU/WGSL/Token.h:51
&gt; +    // FIXME: add all the other keywords: file:///Users/rmorisset/MyGPUWeb/wgsl/wgsl.html#keyword-summary

putting paths inside your local machine probably isn&apos;t the best thing

&gt; Source/WebGPU/WGSL/Token.h:76
&gt; +    union {

Can we use Variant instead?

&gt; Source/WebGPU/WGSL/Token.h:102
&gt; +        ASSERT(type == TokenType::IntegerLiteral
&gt; +            || type == TokenType::IntegerLiteralSigned
&gt; +            || type == TokenType::IntegerLiteralUnsigned
&gt; +            || type == TokenType::DecimalFloatLiteral
&gt; +            || type == TokenType::HexFloatLiteral);

I think there&apos;s a way to use the C++ type system to turn these into compile errors rather than runtime errors. Same for the other constructors.

&gt; Source/WebGPU/WGSL/Token.h:136
&gt; +        if (m_type == TokenType::Identifier)
&gt; +            (&amp;m_ident)-&gt;~StringView();

Using a variant would get rid of this

&gt; Source/WebGPU/WGSLUnitTests/WGSLLexerTests.mm:109
&gt; +    ++lineNumber;
&gt; +    checkNextTokenIsIdentifier(&quot;a&quot;);
&gt; +    checkNextToken(WGSL::TokenType::Colon);
&gt; +    checkNextTokenIsIdentifier(&quot;i32&quot;);
&gt; +    checkNextToken(WGSL::TokenType::Semicolon);

Cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841264</commentid>
    <comment_count>6</comment_count>
      <attachid>451907</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-14 08:39:54 -0800</bug_when>
    <thetext>Created attachment 451907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841265</commentid>
    <comment_count>7</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-14 08:42:01 -0800</bug_when>
    <thetext>Thanks for the review. I&apos;ve tried to fix the issues you found in the lexer, and separated the rest of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841269</commentid>
    <comment_count>8</comment_count>
      <attachid>451909</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-14 08:53:49 -0800</bug_when>
    <thetext>Created attachment 451909
Patch

Make true/false/i32/u32/f32/bool be keywords to match the spec.
Also fix various nits found by the style linter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841305</commentid>
    <comment_count>9</comment_count>
      <attachid>451909</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-02-14 10:02:27 -0800</bug_when>
    <thetext>Comment on attachment 451909
Patch

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

&gt; Source/WebGPU/WGSLUnitTests/WGSLLexerTests.mm:31
&gt; +@interface WGSLLexerTests : XCTestCase

Seems weird to use XCTest here when we use GTest for the unit tests elsewhere in the code base. Given the cross platform history of WebKit, I don&apos;t think using a single platform testing tool likely makes long term sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841307</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-02-14 10:04:30 -0800</bug_when>
    <thetext>How does one get text into the WGSL parser from the web (or rather, how will one)? If it is always from a file resource, perhaps we should consider making things UTF-8 only? If it might come from a DOMString / JavaScript string, that would be much less compelling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841315</commentid>
    <comment_count>11</comment_count>
      <attachid>451909</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-14 10:33:34 -0800</bug_when>
    <thetext>Comment on attachment 451909
Patch

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

&gt; Source/WebGPU/ChangeLog:17
&gt; +        - space efficiency: we don&apos;t use an extra word of memory for the variant&apos;s tag

https://github.com/akrzemi1/compact_optional can solve this.

&gt; Source/WebGPU/Configurations/WGSLUnitTests.xcconfig:24
&gt; +EXECUTABLE_PREFIX = lib;

I think I deleted this on purpose. https://trac.webkit.org/changeset/288608/webkit

&gt; Source/WebGPU/WGSL/Lexer.cpp:32
&gt; +Token Lexer&lt;T&gt;::lex()

Why not generate this?

&gt; Source/WebGPU/WGSL/Lexer.cpp:44
&gt; +        return makeToken(TokenType::ParenLeft);

Can you add a Token(TokenType) implicit constructor to avoid all these makeToken() calls?

&gt; Source/WebGPU/WGSL/Lexer.cpp:197
&gt; +        if (isIdentifierStart(m_current)) {

It might be worth doing the same kind of range check for 1-9 instead of having a bunch of case statements.

&gt; Source/WebGPU/WGSL/Lexer.cpp:372
&gt; +    case &apos; &apos;:
&gt; +    case &apos;\t&apos;:
&gt; +    case &apos;\n&apos;:
&gt; +    case &apos;\v&apos;:
&gt; +    case &apos;\f&apos;:
&gt; +    case &apos;\r&apos;:

We have more-friendly names for these in wtf/characternames.h

&gt; Source/WebGPU/WGSL/Lexer.cpp:435
&gt; +template &lt;&gt;
&gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isIdentifierStart(UChar ch)
&gt; +{
&gt; +    // WGSL does not currently support any non-ASCII characters in identifiers
&gt; +    return Lexer&lt;LChar&gt;::isIdentifierStart(static_cast&lt;LChar&gt;(ch));
&gt; +}

Why specialize if the implementation is the same?

&gt; Source/WebGPU/WGSL/Lexer.h:39
&gt; +        if constexpr (std::is_same&lt;T, LChar&gt;::value) {

I&apos;d suggest either using template specialization or using `if constexpr` so the `else` block at the bottom can be a static_assert instead of a release_assert.

&gt; Source/WebGPU/WGSL/SourceSpan.h:33
&gt; +    unsigned m_line;
&gt; +    unsigned m_lineOffset;
&gt; +    unsigned m_offset;

Why not have at least one of these fields be derived? That way, we don&apos;t have to track as much in the common case (the compile succeeds)

&gt; Source/WebGPU/WGSL/Token.cpp:31
&gt; +String toString(TokenType type)

Again, wish this could be generated.

&gt; Source/WebGPU/WGSL/Token.h:37
&gt; +    // - space efficiency: we don&apos;t use an extra word of memory for the variant&apos;s tag

See changelog.

&gt; Source/WebGPU/WGSL/Token.h:38
&gt; +    // - ease of use: everywhere that we check for a given TokenType, we would have to first check that the Token is not nullopt, and then check the TokenType.

I think this is slightly misstated - it&apos;s that users will already have to check the token type, so if we fold the optional into the token type, users get 2 checks for the price of one. Easier to use, and slightly more performant, and still just as type-safe as the alternative.

&gt;&gt; Source/WebGPU/WGSLUnitTests/WGSLLexerTests.mm:31
&gt;&gt; +@interface WGSLLexerTests : XCTestCase
&gt; 
&gt; Seems weird to use XCTest here when we use GTest for the unit tests elsewhere in the code base. Given the cross platform history of WebKit, I don&apos;t think using a single platform testing tool likely makes long term sense.

The integration point of WebGPU is above this. Non-apple ports want to use Dawn or wgpu instead of WebGPU.framework, so they wouldn&apos;t ever run these tests. WebGPU.framework, and this compiler inside it, is already Metal-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841316</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-14 10:35:24 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #10)
&gt; How does one get text into the WGSL parser from the web (or rather, how will
&gt; one)? If it is always from a file resource, perhaps we should consider
&gt; making things UTF-8 only? If it might come from a DOMString / JavaScript
&gt; string, that would be much less compelling.

It&apos;s specified as a USVString passed to a JS method. https://gpuweb.github.io/gpuweb/#dom-gpudevice-createshadermodule</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841327</commentid>
    <comment_count>13</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-14 11:08:36 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebGPU/ChangeLog:17
&gt; &gt; +        - space efficiency: we don&apos;t use an extra word of memory for the variant&apos;s tag
&gt; 
&gt; https://github.com/akrzemi1/compact_optional can solve this.

Thanks, I&apos;ll mention it in the comment/Changelog as an alternative; I did not know of this library.

&gt; &gt; Source/WebGPU/Configurations/WGSLUnitTests.xcconfig:24
&gt; &gt; +EXECUTABLE_PREFIX = lib;
&gt; 
&gt; I think I deleted this on purpose.
&gt; https://trac.webkit.org/changeset/288608/webkit

Thanks, fixed.

&gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:32
&gt; &gt; +Token Lexer&lt;T&gt;::lex()
&gt; 
&gt; Why not generate this?

I followed JSC&apos;s code. Using lex/yacc would probably have been easier, but would have made the build system even more of a nightmare, and would also have made it much harder to customize the error messages, or generally adding special customizations to the code later on.

&gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:44
&gt; &gt; +        return makeToken(TokenType::ParenLeft);
&gt; 
&gt; Can you add a Token(TokenType) implicit constructor to avoid all these
&gt; makeToken() calls?

No: makeToken() also looks at variables inside the Lexer to produce accurate localization.

&gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:197
&gt; &gt; +        if (isIdentifierStart(m_current)) {
&gt; 
&gt; It might be worth doing the same kind of range check for 1-9 instead of
&gt; having a bunch of case statements.

I am not sure I understand what you mean, or why it would be better.

&gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:372
&gt; &gt; +    case &apos; &apos;:
&gt; &gt; +    case &apos;\t&apos;:
&gt; &gt; +    case &apos;\n&apos;:
&gt; &gt; +    case &apos;\v&apos;:
&gt; &gt; +    case &apos;\f&apos;:
&gt; &gt; +    case &apos;\r&apos;:
&gt; 
&gt; We have more-friendly names for these in wtf/characternames.h

I&apos;ve only found 4 of them, I could not find any equivalent name for `\f` nor `\r`.
Do you want me to replace the top 4 anyway?

&gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:435
&gt; &gt; +template &lt;&gt;
&gt; &gt; +ALWAYS_INLINE bool Lexer&lt;UChar&gt;::isIdentifierStart(UChar ch)
&gt; &gt; +{
&gt; &gt; +    // WGSL does not currently support any non-ASCII characters in identifiers
&gt; &gt; +    return Lexer&lt;LChar&gt;::isIdentifierStart(static_cast&lt;LChar&gt;(ch));
&gt; &gt; +}
&gt; 
&gt; Why specialize if the implementation is the same?

No idea what I was thinking, fixed, thanks.
&gt; 
&gt; &gt; Source/WebGPU/WGSL/Lexer.h:39
&gt; &gt; +        if constexpr (std::is_same&lt;T, LChar&gt;::value) {
&gt; 
&gt; I&apos;d suggest either using template specialization or using `if constexpr` so
&gt; the `else` block at the bottom can be a static_assert instead of a
&gt; release_assert.

Done, thanks.

&gt; &gt; Source/WebGPU/WGSL/SourceSpan.h:33
&gt; &gt; +    unsigned m_line;
&gt; &gt; +    unsigned m_lineOffset;
&gt; &gt; +    unsigned m_offset;
&gt; 
&gt; Why not have at least one of these fields be derived? That way, we don&apos;t
&gt; have to track as much in the common case (the compile succeeds)

This sounds not-trivial to implement, putting it in a FIXME.

&gt; 
&gt; &gt; Source/WebGPU/WGSL/Token.h:38
&gt; &gt; +    // - ease of use: everywhere that we check for a given TokenType, we would have to first check that the Token is not nullopt, and then check the TokenType.
&gt; 
&gt; I think this is slightly misstated - it&apos;s that users will already have to
&gt; check the token type, so if we fold the optional into the token type, users
&gt; get 2 checks for the price of one. Easier to use, and slightly more
&gt; performant, and still just as type-safe as the alternative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841329</commentid>
    <comment_count>14</comment_count>
      <attachid>451926</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-14 11:09:15 -0800</bug_when>
    <thetext>Created attachment 451926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841330</commentid>
    <comment_count>15</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-14 11:15:51 -0800</bug_when>
    <thetext>(In reply to Robin Morisset from comment #13)
&gt; &gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:32
&gt; &gt; &gt; +Token Lexer&lt;T&gt;::lex()
&gt; &gt; 
&gt; &gt; Why not generate this?
&gt; 
&gt; I followed JSC&apos;s code. Using lex/yacc would probably have been easier, but
&gt; would have made the build system even more of a nightmare, and would also
&gt; have made it much harder to customize the error messages, or generally
&gt; adding special customizations to the code later on.

It might be worth mentioning this in the ChangeLog.

&gt; &gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:197
&gt; &gt; &gt; +        if (isIdentifierStart(m_current)) {
&gt; &gt; 
&gt; &gt; It might be worth doing the same kind of range check for 1-9 instead of
&gt; &gt; having a bunch of case statements.
&gt; 
&gt; I am not sure I understand what you mean, or why it would be better.

You don&apos;t have
case &apos;a&apos;:
case &apos;b&apos;:
case &apos;c&apos;:
...

but you do have
case &apos;1&apos;:
case &apos;2&apos;:
case &apos;3&apos;:

I&apos;m just suggesting you might want to use the same approach for both of these.

&gt; 
&gt; &gt; &gt; Source/WebGPU/WGSL/Lexer.cpp:372
&gt; &gt; &gt; +    case &apos; &apos;:
&gt; &gt; &gt; +    case &apos;\t&apos;:
&gt; &gt; &gt; +    case &apos;\n&apos;:
&gt; &gt; &gt; +    case &apos;\v&apos;:
&gt; &gt; &gt; +    case &apos;\f&apos;:
&gt; &gt; &gt; +    case &apos;\r&apos;:
&gt; &gt; 
&gt; &gt; We have more-friendly names for these in wtf/characternames.h
&gt; 
&gt; I&apos;ve only found 4 of them, I could not find any equivalent name for `\f` nor
&gt; `\r`.
&gt; Do you want me to replace the top 4 anyway?

I think you should add the human-readable names for the missing characters into characternames.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841363</commentid>
    <comment_count>16</comment_count>
      <attachid>451932</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-14 12:40:55 -0800</bug_when>
    <thetext>Created attachment 451932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841629</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-15 01:38:19 -0800</bug_when>
    <thetext>Committed r289799 (247264@main): &lt;https://commits.webkit.org/247264@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451932.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841752</commentid>
    <comment_count>18</comment_count>
      <attachid>451932</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-15 09:30:03 -0800</bug_when>
    <thetext>Comment on attachment 451932
Patch

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

&gt; Source/WebGPU/WGSL/Lexer.cpp:369
&gt; +    switch (ch) {
&gt; +    case WTF::Unicode::space:
&gt; +    case WTF::Unicode::tabCharacter:
&gt; +    case WTF::Unicode::carriageReturn:
&gt; +    case WTF::Unicode::newlineCharacter:
&gt; +    case WTF::Unicode::verticalTabulation:
&gt; +    case WTF::Unicode::formFeed:
&gt; +        return true;
&gt; +    default:
&gt; +        return false;
&gt; +    }

We have carefully-written and optimized versions of some of these checks in ASCIICType.h, and they should be used in places like this. If there is a reason we must not use those, I would like to know it. Here it would be * isASCIISpace*, and I believe its implementation is more efficient than the idiom here so using it could slightly help performance.

&gt; Source/WebGPU/WGSL/Lexer.cpp:375
&gt; +    return (ch &gt;= &apos;a&apos; &amp;&amp; ch &lt;= &apos;z&apos;) || (ch &gt;= &apos;A&apos; &amp;&amp; ch &lt;= &apos;Z&apos;);

isASCIIAlpha

&gt; Source/WebGPU/WGSL/Lexer.cpp:381
&gt; +    return (ch &gt;= &apos;a&apos; &amp;&amp; ch &lt;= &apos;z&apos;) || (ch &gt;= &apos;A&apos; &amp;&amp; ch &lt;= &apos;Z&apos;) || (ch &gt;= &apos;0&apos; &amp;&amp; ch &lt;= &apos;9&apos;) || ch == &apos;_&apos;;

isASCIIAlphanumeric

&gt; Source/WebGPU/WGSL/Lexer.cpp:387
&gt; +    return (ch &gt;= &apos;0&apos; &amp;&amp; ch &lt;= &apos;9&apos;);

isASCIIDigit

&gt; Source/WebGPU/WGSL/Lexer.cpp:393
&gt; +    return (ch &gt;= &apos;0&apos; &amp;&amp; ch &lt;= &apos;9&apos;) || (ch &gt;= &apos;a&apos; &amp;&amp; ch &lt;= &apos;f&apos;) || (ch &gt;= &apos;A&apos; &amp;&amp; ch &lt;= &apos;F&apos;);

isASCIIHexDigit

&gt; Source/WebGPU/WGSL/Lexer.cpp:412
&gt; +    ASSERT(isHexadecimal(ch));
&gt; +    if (ch &gt;= &apos;0&apos; &amp;&amp; ch &lt;= &apos;9&apos;)
&gt; +        return ch - &apos;0&apos;;
&gt; +    if (ch &gt;= &apos;a&apos; &amp;&amp; ch &lt;= &apos;f&apos;)
&gt; +        return ch - &apos;a&apos;;
&gt; +    ASSERT(ch &gt;= &apos;A&apos; &amp;&amp; ch &lt;= &apos;F&apos;);
&gt; +    return ch - &apos;A&apos;;

toASCIIHexValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842920</commentid>
    <comment_count>19</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-17 08:53:40 -0800</bug_when>
    <thetext>Thank you, I did not know about these functions in WTF.

I made a trivial patch to use them: https://bugs.webkit.org/show_bug.cgi?id=236783.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444554</attachid>
            <date>2021-11-17 12:45:28 -0800</date>
            <delta_ts>2021-11-17 13:14:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>patchWGSL</filename>
            <type>text/plain</type>
            <size>53696</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvQVNUTm9kZS5oIGIvU291cmNlL1dl
YkdQVS9XR1NML0FTVC9BU1ROb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi41YjQzZGVkYzAzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0FTVE5vZGUuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJTb3VyY2VTcGFuLmgiCisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNw
YWNlIEFTVCB7CisKK2NsYXNzIEFTVE5vZGUgeworcHVibGljOgorICAgIGNvbnN0IFNvdXJjZVNw
YW4mIHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KK3ByaXZhdGU6CisgICAgU291cmNl
U3BhbiBtX3NwYW47Cit9OworCisvLyBGSVhNRTogYWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJs
eSBiZSBtYXJrZWQgRkFTVF9NQUxMT0Mgb3Igd2hhdGV2ZXIgaXQgaXMgdG8gdXNlIGJtYWxsb2Mv
bGlicGFzCisvLyBGSVhNRTogbW9zdCBvZiB0aGUgdmVjdG9ycyBpbiBBU1Qgbm9kZXMgc2hvdWxk
IGJlIHNpemVkIHNtYWxsZXIgdGhhbiBkZWZhdWx0CisvLyBGSVhNRTogc29tZSBvZiB0aGUgbWV0
aG9kcyByZXR1cm5pbmcgcG9pbnRlcnMgaW4gQVNUIG5vZGVzIHNob3VsZCBwcm9iYWJseSBiZSBt
YXJrZWQgY29uc3QKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0F0dHJpYnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2Nl
ODkzZjVmYzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRy
aWJ1dGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBU1ROb2RlLmgiCisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CisK
K2NsYXNzIEF0dHJpYnV0ZSA6IHB1YmxpYyBBU1ROb2RlIHt9OworCitjbGFzcyBBdHRyaWJ1dGVC
bG9jayA6IHB1YmxpYyBBdHRyaWJ1dGUge307CisKK2NsYXNzIEF0dHJpYnV0ZUdyb3VwIDogcHVi
bGljIEF0dHJpYnV0ZSB7CitwdWJsaWM6CisgICAgdW5zaWduZWQgZ3JvdXAoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCitj
bGFzcyBBdHRyaWJ1dGVCaW5kaW5nIDogcHVibGljIEF0dHJpYnV0ZSB7CitwdWJsaWM6CisgICAg
dW5zaWduZWQgYmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbV92YWx1ZTsKK307CisKK2NsYXNzIEF0dHJpYnV0ZVN0YWdlIDogcHVibGlj
IEF0dHJpYnV0ZSB7CitwdWJsaWM6CisgICAgZW51bSBTdGFnZSA6IHVpbnQ4X3QgeworICAgICAg
ICBDb21wdXRlLAorICAgICAgICBWZXJ0ZXgsCisgICAgICAgIEZyYWdtZW50CisgICAgfTsKKyAg
ICBTdGFnZSBzdGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhZ2U7IH0KK3ByaXZhdGU6CisgICAg
U3RhZ2UgbV9zdGFnZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNzFiYTI5MmJhYTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9FeHByZXNzaW9uLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBFeHByZXNzaW9uIDogcHVibGljIEFTVE5vZGUge307CisKK2NsYXNz
IEJvb2xMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIGJvb2wgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAgIGJvb2wgbV92YWx1
ZTsKK307CisKK2NsYXNzIEludDMyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1Ymxp
YzoKKyAgICBpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorcHJpdmF0
ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBVaW50MzJMaXRlcmFsIDogcHVi
bGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX3ZhbHVlOworfTsKKwor
Y2xhc3MgRmxvYXQzMkxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAg
ZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAgIGZs
b2F0IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0dsb2JhbERlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmYzZGEwMzc0MDhlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvR2xvYmFsRGVjbC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5j
bHVkZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlR5
cGUuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVF1YWxpZmllci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBHbG9iYWxEZWNsIDogcHVibGljIEFTVE5vZGUge307CisKK2NsYXNzIEdsb2JhbFZhcmlhYmxl
RGVjbCA6IHB1YmxpYyBHbG9iYWxEZWNsIHsKK3B1YmxpYzoKKyAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEF0dHJpYnV0ZT4+JiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIFZhcmlhYmxlUXVhbGlmaWVyKiBtYXliZVF1YWxpZmllcigpIHsgcmV0
dXJuIG1fcXVhbGlmaWVyLmdldCgpOyB9CisgICAgVHlwZSogbWF5YmVUeXBlKCkgeyByZXR1cm4g
bV90eXBlLmdldCgpOyB9CisgICAgRXhwcmVzc2lvbiogbWF5YmVJbml0aWFsaXplcigpIHsgcmV0
dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBdHRyaWJ1dGU+PiBtX2F0dHJpYnV0ZXM7CisgICAgU3RyaW5nVmlldyBtX25hbWU7
CisgICAgLy8gRWFjaCBvZiB0aGUgZm9sbG93aW5nIG1heSBiZSBudWxsCisgICAgLy8gQnV0IGF0
IGxlYXN0IG9uZSBvZiB0eXBlIGFuZCBpbml0aWFsaXplciBtdXN0IGJlIG5vbi1udWxsCisgICAg
c3RkOjp1bmlxdWVfcHRyPFZhcmlhYmxlUXVhbGlmaWVyPiBtX3F1YWxpZmllcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
PiBtX2luaXRpYWxpemVyOworfTsKKworY2xhc3MgU3RydWN0TWVtYmVyIDogcHVibGljIEFTVE5v
ZGUgeworICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4mIGF0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBTdHJpbmdW
aWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVHlwZSogdHlwZSgpIHsg
cmV0dXJuIG1fdHlwZS5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEF0dHJpYnV0ZT4+IG1fYXR0cmlidXRlczsKKyAgICBTdHJpbmdWaWV3IG1fbmFtZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV90eXBlOworfTsKK2NsYXNzIFN0cnVjdERlY2wgOiBw
dWJsaWMgR2xvYmFsRGVjbCB7CitwdWJsaWM6CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBdHRyaWJ1dGU+PiYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
czsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICBjb25zdCBWZWN0b3I8U3RydWN0TWVtYmVyPiYgbWVtYmVycygpIGNvbnN0IHsgcmV0
dXJuIG1fbWVtYmVyczsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEF0
dHJpYnV0ZT4+IG1fYXR0cmlidXRlczsKKyAgICBTdHJpbmdWaWV3IG1fbmFtZTsKKyAgICBWZWN0
b3I8U3RydWN0TWVtYmVyPiBtX21lbWJlcnM7Cit9OworCitjbGFzcyBQYXJhbWV0ZXIgOiBwdWJs
aWMgQVNUTm9kZSB7CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRyaWJ1dGU+
PiYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNvbnN0
IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBUeXBlKiB0
eXBlKCkgeyByZXR1cm4gbV90eXBlLmdldCgpOyB9Citwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4gbV9hdHRyaWJ1dGVzOworICAgIFN0cmluZ1ZpZXcgbV9u
YW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Cit9OworY2xhc3MgRnVuY3Rp
b25EZWNsIDogcHVibGljIEdsb2JhbERlY2wgeworcHVibGljOgorICAgIGNvbnN0IFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4mIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lOyB9CisgICAgY29uc3QgVmVjdG9yPFBhcmFtZXRlcj4mIHBhcmFtZXRlcnMoKSBj
b25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEF0dHJpYnV0ZT4+JiByZXR1cm5BdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXR1cm5BdHRyaWJ1dGVzOyB9CisgICAgVHlwZSogbWF5YmVSZXR1cm5UeXBlKCkgeyByZXR1cm4g
bV9yZXR1cm5UeXBlLmdldCgpOyB9CisgICAgQ29tcG91bmRTdGF0ZW1lbnQmIGJvZHkoKSB7IHJl
dHVybiBtX2JvZHk7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRy
aWJ1dGU+PiBtX2F0dHJpYnV0ZXM7CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgVmVjdG9y
PFBhcmFtZXRlcj4gbV9wYXJhbWV0ZXJzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0
cmlidXRlPj4gbV9yZXR1cm5BdHRyaWJ1dGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBt
X3JldHVyblR5cGU7IC8vIGNhbiBiZSBudWxsCisgICAgQ29tcG91bmRTdGF0ZW1lbnQgbV9ib2R5
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGlyZWN0aXZlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0dsb2JhbERpcmVjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uM2U2NGExY2MzYmJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9HbG9iYWxEaXJlY3RpdmUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEdsb2Jh
bERpcmVjdGl2ZSA6IHB1YmxpYyBBU1ROb2RlIHsKK3B1YmxpYzoKKyAgICBjb25zdCBTdHJpbmdW
aWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Citwcml2YXRlOgorICAgIFN0cmlu
Z1ZpZXcgbV9uYW1lOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hh
ZGVyLmgKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkdQVS9XR1NM
L0FTVC5oCnJlbmFtZSB0byBTb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlci5oCmluZGV4IDgx
YzNhNDA0ZmQ1ZC4uNzE5YmU1N2FhNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNULmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TaGFkZXIuaApAQCAtMjUsMTAgKzI1
LDE4IEBACiAKICNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV0dTTCB7CisjaW5jbHVkZSAiR2xv
YmFsRGlyZWN0aXZlLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgogCi1jbGFzcyBBU1Qgewor
bmFtZXNwYWNlIFdHU0wgeyBuYW1lc3BhY2UgQVNUIHsKIAorY2xhc3MgU2hhZGVyIHsKK3B1Ymxp
YzoKKyAgICBjb25zdCBWZWN0b3I8R2xvYmFsRGlyZWN0aXZlPiYgZGlyZWN0aXZlcygpIHsgcmV0
dXJuIG1fZGlyZWN0aXZlczsgfQorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R2xv
YmFsRGVjbD4+JiBkZWNscygpIHsgcmV0dXJuIG1fZGVjbHM7IH0KK3ByaXZhdGU6CisgICAgVmVj
dG9yPEdsb2JhbERpcmVjdGl2ZT4gbV9kaXJlY3RpdmVzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8R2xvYmFsRGVjbD4+IG1fZGVjbHM7CiB9OwogCi19Cit9IH0gLy8gbmFtZXNwYWNlIFdH
U0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnQuaCBi
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi44ZmYyMzUxZjY2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKworbmFtZXNwYWNlIFdH
U0wgeyBuYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgU3RhdGVtZW50IDogcHVibGljIEFTVE5vZGUg
e307CisKK2NsYXNzIENvbXBvdW5kU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CitwdWJs
aWM6CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+PiYgc3RhdGVt
ZW50cygpIHsgcmV0dXJuIG1fc3RhdGVtZW50czsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IG1fc3RhdGVtZW50czsKK307CisKK2NsYXNzIFJldHVy
blN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIEV4cHJlc3Npb24q
IG1heWJlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbi5nZXQoKTsgfQorcHJpdmF0
ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9leHByZXNzaW9uOworfTsKKwor
Y2xhc3MgQXNzaWdubWVudFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgor
ICAgIEV4cHJlc3Npb24qIG1heWJlTGhzKCkgeyByZXR1cm4gbV9saHMuZ2V0KCk7IH0KKyAgICBF
eHByZXNzaW9uKiByaHMoKSB7IHJldHVybiBtX3Jocy5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICAv
LyBMSFMgY2FuIGJlIG51bGwgaW4gdGhlIGNhc2UgaXQgaXMgJ18nLCBidXQgUkhTIGlzIG5ldmVy
IG51bGwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9saHM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fcmhzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvVHlwZS5oIGIvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9UeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4zNDI2Y2ZlNDYzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL1R5cGUuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFR5cGUgOiBwdWJs
aWMgQVNUTm9kZSB7fTsKKworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGlj
OgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
K3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7Cit9OworCitjbGFzcyBQYXJhbWV0ZXJp
emVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAg
ICBWZWMyLAorICAgICAgICBWZWMzLAorICAgICAgICBWZWM0LAorICAgICAgICBNYXQyeDIsCisg
ICAgICAgIE1hdDJ4MywKKyAgICAgICAgTWF0Mng0LAorICAgICAgICBNYXQzeDIsCisgICAgICAg
IE1hdDN4MywKKyAgICAgICAgTWF0M3g0LAorICAgICAgICBNYXQ0eDIsCisgICAgICAgIE1hdDR4
MywKKyAgICAgICAgTWF0NHg0CisgICAgfTsKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICBUeXBlKiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuIG1fZWxlbWVudFR5
cGUuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7Cit9OworCitjbGFzcyBCb29sVHlwZSA6IHB1YmxpYyBU
eXBlIHt9OworY2xhc3MgRmxvYXQzMlR5cGUgOiBwdWJsaWMgVHlwZSB7fTsKK2NsYXNzIEludDMy
VHlwZSA6IHB1YmxpYyBUeXBlIHt9OworY2xhc3MgVWludDMyVHlwZSA6IHB1YmxpYyBUeXBlIHt9
OworCit9IH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9WYXJpYWJsZVF1YWxpZmllci5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9W
YXJpYWJsZVF1YWxpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uNjNiOTFiODc2YTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9WYXJpYWJsZVF1YWxpZmllci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKworbmFtZXNwYWNlIFdHU0wgeyBuYW1l
c3BhY2UgQVNUIHsKKworZW51bSBjbGFzcyBTdG9yYWdlQ2xhc3MgOiB1aW50OF90IHsKKyAgICBG
dW5jdGlvbiwKKyAgICBQcml2YXRlLAorICAgIFdvcmtncm91cCwKKyAgICBVbmlmb3JtLAorICAg
IFN0b3JhZ2UKK307CisKK2VudW0gY2xhc3MgQWNjZXNzTW9kZSA6IHVpbnQ4X3QgeworICAgIFJl
YWQsCisgICAgV3JpdGUsCisgICAgUmVhZFdyaXRlCit9OworCitjbGFzcyBWYXJpYWJsZVF1YWxp
ZmllciA6IHB1YmxpYyBBU1ROb2RlIHsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQ2xhc3Mgc3RvcmFn
ZUNsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQ2xhc3M7IH0KKyAgICBBY2Nlc3NNb2Rl
IGFjY2Vzc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc01vZGU7IH0KK3ByaXZhdGU6Cisg
ICAgU3RvcmFnZUNsYXNzIG1fc3RvcmFnZUNsYXNzOworICAgIEFjY2Vzc01vZGUgbV9hY2Nlc3NN
b2RlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9MZXhlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWQ5YWFjNTRjZDE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNwcApAQCAtMCwwICsxLDQ1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXhlci5o
IgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorVG9rZW4gTGV4
ZXI8VD46OmxleCgpCit7CisgICAgc2tpcFdoaXRlc3BhY2UoKTsKKworICAgIFNvdXJjZVBvc2l0
aW9uIHN0YXJ0aW5nUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKKyAgICBhdXRvIG1ha2VU
b2tlbiA9IFsmXSAoVG9rZW5UeXBlIHR5cGUpIC0+IFRva2VuIHsKKyAgICAgICAgcmV0dXJuIHsg
dHlwZSwgc3RhcnRpbmdQb3NpdGlvbiwgbV9vZmZzZXQgLSBzdGFydGluZ1Bvc2l0aW9uLm1fb2Zm
c2V0IH07CisgICAgfTsKKyAgICBhdXRvIG1ha2VMaXRlcmFsVG9rZW4gPSBbJl0gKFRva2VuVHlw
ZSB0eXBlLCBkb3VibGUgbGl0ZXJhbFZhbHVlKSAtPiBUb2tlbiB7CisgICAgICAgIHJldHVybiB7
IHR5cGUsIHN0YXJ0aW5nUG9zaXRpb24sIG1fb2Zmc2V0IC0gc3RhcnRpbmdQb3NpdGlvbi5tX29m
ZnNldCwgbGl0ZXJhbFZhbHVlIH07CisgICAgfTsKKyAgICBhdXRvIGZpbmlzaEludGVnZXJMaXRl
cmFsID0gWyZdIChkb3VibGUgbGl0ZXJhbFZhbHVlKSAtPiBUb2tlbiB7CisgICAgICAgIGlmICht
X2N1cnJlbnQgPT0gJ2knKSB7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZCwgbGl0
ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9jdXJyZW50ID09ICd1Jykgewor
ICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2Vu
KFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkludGVnZXJM
aXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgIH07CisKKyAgICBpZiAoaXNBdEVuZE9mRmlsZSgp
KQorICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKKworICAg
IHN3aXRjaCAobV9jdXJyZW50KSB7CisgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpQYXJlbkxlZnQp
OworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgICAgIGNhc2UgJ3sn
OgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpCcmFjZUxlZnQpOworICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QnJhY2VSaWdodCk7
CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QXR0ckxlZnQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ10nKSB7CisgICAgICAgICAg
ICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6QXR0clJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICc6JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVRva2VuKFRva2VuVHlwZTo6Q29sb24pOworICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6Q29tbWEp
OworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RXF1YWwpOworICAgICAgICBjYXNlICc+JzoKKyAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6R1QpOworICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6TFQpOworICAgICAgICBjYXNlICcuJzog
eworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1f
b2Zmc2V0OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBlcmlvZCA9
IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgIGlmICghcG9zdFBlcmlvZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGVyaW9kKTsKKyAgICAg
ICAgICAgIGRvdWJsZSBsaXRlcmFsVmFsdWUgPSBwb3N0UGVyaW9kLnZhbHVlKCk7CisgICAgICAg
ICAgICBsaXRlcmFsVmFsdWUgLz0gcG93KDEwLCBtX29mZnNldCAtIG9mZnNldCk7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsRmxvYXRF
eHBvbmVudCgpOworICAgICAgICAgICAgaWYgKGV4cG9uZW50KQorICAgICAgICAgICAgICAgIGxp
dGVyYWxWYWx1ZSAqPSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRl
cmFsVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJz4nKSB7CisgICAgICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6
QXJyb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
JzAnOiB7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgZG91YmxlIGxpdGVyYWxW
YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICd4JykgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9p
bnQgbGl0ZXJhbHMKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIGJv
b2wgaGV4TnVtYmVySXNFbXB0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzSGV4
YWRlY2ltYWwobV9jdXJyZW50KSkgeworICAgICAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUg
Kj0gMTY7CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSArPSByZWFkSGV4YWRlY2lt
YWwobV9jdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaGV4TnVtYmVySXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoaGV4TnVtYmVySXNFbXB0eSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmlzaEludGVnZXJMaXRlcmFsKGxpdGVy
YWxWYWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWwobV9j
dXJyZW50KSB8fCBtX2N1cnJlbnQgPT0gJy4nIHx8IG1fY3VycmVudCA9PSAnZScgfHwgbV9jdXJy
ZW50ID09ICdFJykgeworICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGlu
dGVnZXJQYXJ0ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgICAgICAgICAgICAgIGlmIChp
bnRlZ2VyUGFydCkKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlID0gaW50ZWdlclBh
cnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBib29sIGlzRmxvYXRpbmdQb2ludCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUgd2l0aCB0
aGUgWzEtOV0gY2FzZQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX29m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBl
cmlvZCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBv
c3RQZXJpb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsUGFy
dCA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9u
YWxQYXJ0IC89IHBvdygxMCwgbV9vZmZzZXQgLSBvZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbGl0ZXJhbFZhbHVlICs9IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFs
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNp
bWFsRmxvYXRFeHBvbmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSAq
PSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxW
YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgaW50
ZWdlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0YXJ0IHdpdGggMC4KKyAgICAgICAgICAgICAgICBp
ZiAoIWlzRmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bihUb2tlblR5cGU6OkludmFsaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1f
Y3VycmVudCA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJh
bCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmaW5p
c2hJbnRlZ2VyTGl0ZXJhbChsaXRlcmFsVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
JzEnOgorICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgY2FzZSAnMyc6CisgICAgICAgIGNhc2Ug
JzQnOgorICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgY2FzZSAnNic6CisgICAgICAgIGNhc2Ug
JzcnOgorICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgY2FzZSAnOSc6IHsKKyAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHZhbHVlID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2Vu
KFRva2VuVHlwZTo6SW52YWxpZCk7CisgICAgICAgICAgICBkb3VibGUgbGl0ZXJhbFZhbHVlID0g
dmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIGJvb2wgaXNGbG9hdGluZ1BvaW50ID0gZmFsc2U7
CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgeworICAgICAgICAgICAgICAgIGlz
RmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX29mZnNldDsKKyAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3N0UGVyaW9kID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOwor
ICAgICAgICAgICAgICAgIGlmIChwb3N0UGVyaW9kKSB7CisgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBmcmFjdGlvbmFsUGFydCA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJhY3Rpb25hbFBhcnQgLz0gcG93KDEwLCBtX29mZnNldCAtIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSArPSBmcmFjdGlvbmFsUGFydDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxp
bnQ2NF90PiBleHBvbmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGxpdGVyYWxWYWx1ZSAqPSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZs
b2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExp
dGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlz
RmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmluaXNoSW50ZWdlckxpdGVy
YWwobGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRv
a2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYoaXNJZGVudGlmZXJTdGFydChtX2N1cnJl
bnQpKSB7CisgICAgICAgICAgICAgICAgVCogc3RhcnRPZlRva2VuID0gbV9jb2RlOworICAgICAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUoaXNWYWxpZElkZW50aWZp
ZXJDaGFyYWN0ZXIobV9jdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogYSB0cmllIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGhl
cmUsIGxvb2sgYXQgSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSBmb3Ig
YW4gZXhhbXBsZSBvZiBjb2RlIGF1dG9nZW5lcmF0aW9uIHRoYXQgcHJvZHVjZXMgc3VjaCBhIHRy
aWUuCisgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB2aWV3IHtzdGFydE9mVG9rZW4sIG1fb2Zm
c2V0IC0gc3RhcnRpbmdQb3NpdGlvbi5tX29mZnNldH07CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEkgZG9uJ3QgdGhpbmsgdGhhdCB0cnVlL2ZhbHNlL2YzMi91MzIvaTMyL2Jvb2wgbmVlZCB0
byBiZSB0aGVpciBvd24gdG9rZW5zLCB0aGV5IGNvdWxkIGp1c3QgYmUgcmVndWxhciBpZGVudGlm
aWVycy4KKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAidHJ1ZSIpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpUcnVlTGl0ZXJhbCk7CisgICAgICAg
ICAgICAgICAgaWYgKHZpZXcgPT0gImZhbHNlIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OkZhbHNlTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgaWYg
KHZpZXcgPT0gImYzMiIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpLZXl3b3JkRjMyKTsKKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAidTMyIikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRV
MzIpOworICAgICAgICAgICAgICAgIGlmICh2aWV3ID09ICJzdHJ1Y3QiKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFN0cnVjdCk7CisgICAg
ICAgICAgICAgICAgaWYgKHZpZXcgPT0gImZuIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgICAgICAgICAgICAgaWYgKHZp
ZXcgPT0gInJldHVybiIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpLZXl3b3JkUmV0dXJuKTsKKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAidmFy
IikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdv
cmRWYXIpOworICAgICAgICAgICAgICAgIGlmICh2aWV3ID09ICJhc20iIHx8IHZpZXcgPT0gImJm
MTYiIHx8IHZpZXcgPT0gImNvbnN0IiB8fCB2aWV3ID09ICJkbyIgfHwgdmlldyA9PSAiZW51bSIK
KyAgICAgICAgICAgICAgICAgICAgfHwgdmlldyA9PSAiZjE2IiB8fCB2aWV3ID09ICJmNjQiIHx8
IHZpZXcgPT0gImhhbmRsZSIgfHwgdmlldyA9PSAiaTgiIHx8IHZpZXcgPT0gImkxNiIKKyAgICAg
ICAgICAgICAgICAgICAgfHwgdmlldyA9PSAiaTY0IiB8fCB2aWV3ID09ICJtYXQiIHx8IHZpZXcg
PT0gInByZW1lcmdlIiB8fCB2aWV3ID09ICJyZWdhcmRsZXNzIgorICAgICAgICAgICAgICAgICAg
ICB8fCB2aWV3ID09ICJ0eXBlZGVmIiB8fCB2aWV3ID09ICJ1OCIgfHwgdmlldyA9PSAidTE2IiB8
fCB2aWV3ID09ICJ1NjQiIHx8IHZpZXcgPT0gInVubGVzcyIKKyAgICAgICAgICAgICAgICAgICAg
fHwgdmlldyA9PSAidXNpbmciIHx8IHZpZXcgPT0gInZlYyIgfHwgdmlldyA9PSAidm9pZCIgfHwg
dmlldyA9PSAid2hpbGUiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRv
a2VuVHlwZTo6UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBUb2tlblR5
cGU6OklkZW50aWZpZXIsIHN0YXJ0aW5nUG9zaXRpb24sIG1fb2Zmc2V0IC0gc3RhcnRpbmdQb3Np
dGlvbi5tX29mZnNldCwgdmlldyB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpJbnZhbGlkKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdCgpCit7CisgICAgLy8g
QXQgb25lIHBvaW50IHRpbWluZyBzaG93ZWQgdGhhdCBzZXR0aW5nIG1fY3VycmVudCB0byAwIHVu
Y29uZGl0aW9uYWxseSB3YXMgZmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5jZS4KKyAgICBt
X2N1cnJlbnQgPSAwOworICAgICsrbV9jb2RlOworICAgICsrbV9vZmZzZXQ7CisgICAgKyttX2xp
bmVPZmZzZXQ7CisgICAgaWYgKExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQorICAgICAgICBt
X2N1cnJlbnQgPSAqbV9jb2RlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1QgTGV4ZXI8
VD46OnBlZWsodW5zaWduZWQgaSkKK3sKKyAgICBpZiAoVU5MSUtFTFkobV9jb2RlICsgaSA+PSBt
X2NvZGVFbmQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKihtX2NvZGUgKyBpKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+Ojpza2lwV2hpdGVzcGFj
ZSgpCit7CisgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShtX2N1cnJlbnQpKSB7CisgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ1xuJykgeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
ICsrbV9saW5lOworICAgICAgICAgICAgbV9saW5lT2Zmc2V0ID0gMDsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzaGlmdCgpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitTb3VyY2VQb3NpdGlvbiBMZXhlcjxUPjo6Y3VycmVudFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4geyBtX2xpbmUsIG1fbGluZU9mZnNldCwgbV9vZmZzZXQgfTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojppc0F0RW5kT2ZGaWxlKCkgY29uc3QKK3sK
KyAgICBpZiAobV9jb2RlID09IG1fY29kZUVuZCkgeworICAgICAgICBBU1NFUlQobV9jdXJyZW50
ID09IDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUKG1fY29kZSA8
IG1fY29kZUVuZCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IExleGVyPFQ+OjpwYXJzZURlY2ltYWxJbnRlZ2Vy
KCkKK3sKKyAgICBpZiAoIWlzRGVjaW1hbChtX2N1cnJlbnQpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgQ2hlY2tlZFVpbnQ2NCB2YWx1ZSA9IDA7CisgICAgd2hpbGUgKGlz
RGVjaW1hbChtX2N1cnJlbnQpKSB7CisgICAgICAgIHZhbHVlICo9IDEwOworICAgICAgICB2YWx1
ZSArPSByZWFkRGVjaW1hbChtX2N1cnJlbnQpOworICAgICAgICBzaGlmdCgpOworICAgIH0KKyAg
ICBpZiAodmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiB7IHZhbHVlLnZhbHVlKCkgfTsKK30KKworLy8gUGFyc2UgcGF0dGVybiAo
ZXxFKShcK3wtKT9bMC05XStmPyBpZiBpdCBpcyBwcmVzZW50LCBhbmQgcmV0dXJuIHRoZSBleHBv
bmVudAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IExleGVy
PFQ+OjpwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCkKK3sKKyAgICBUIGNoYXIxID0gcGVlaygx
KTsKKyAgICBUIGNoYXIyID0gcGVlaygyKTsKKyAgICAvLyBDaGVjayBmb3IgcGF0dGVybiAoZXxF
KShcK3wtKT9bMC05XSsKKyAgICBpZiAobV9jdXJyZW50ICE9ICdlJyAmJiBtX2N1cnJlbnQgIT0g
J0UnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChjaGFyMSA9PSAnKycg
fHwgY2hhcjEgPT0gJy0nKSB7CisgICAgICAgIGlmICghaXNEZWNpbWFsKGNoYXIyKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfSBlbHNlIGlmICghaXNEZWNpbWFsKGNo
YXIxKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBzaGlmdCgpOworCisgICAg
Ym9vbCBuZWdhdGVFeHBvbmVudCA9IGZhbHNlOworICAgIGlmIChtX2N1cnJlbnQgPT0gJy0nKSB7
CisgICAgICAgIG5lZ2F0ZUV4cG9uZW50ID0gdHJ1ZTsKKyAgICAgICAgc2hpZnQoKTsKKyAgICB9
IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnKycpCisgICAgICAgIHNoaWZ0KCk7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAg
IGlmICghZXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgQ2hlY2tl
ZEludDY0IGV4cG9uZW50VmFsdWUgPSBleHBvbmVudC52YWx1ZSgpOworICAgIGlmIChuZWdhdGVF
eHBvbmVudCkKKyAgICAgICAgZXhwb25lbnRWYWx1ZSA9IC0gZXhwb25lbnRWYWx1ZTsKKyAgICBp
ZiAoIWV4cG9uZW50VmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgZXhwb25lbnRWYWx1ZS52YWx1ZSgpIH07Cit9OworCit0ZW1wbGF0ZSA8PgorQUxXQVlT
X0lOTElORSBib29sIExleGVyPExDaGFyPjo6aXNXaGl0ZVNwYWNlKExDaGFyIGNoKQoreworICAg
IHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlICcgJzoKKyAgICBjYXNlICdcdCc6CisgICAgY2FzZSAn
XG4nOgorICAgIGNhc2UgJ1x2JzoKKyAgICBjYXNlICdcZic6CisgICAgY2FzZSAnXHInOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPExDaGFyPjo6
aXNJZGVudGlmaWVyU3RhcnQoTENoYXIgY2gpCit7CisgICAgcmV0dXJuIChjaCA+PSAnYScgJiYg
Y2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJyk7Cit9CisKK3RlbXBsYXRlIDw+
CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8TENoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJh
Y3RlcihMQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8
IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwg
Y2ggPT0gJ18nOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPExD
aGFyPjo6aXNEZWNpbWFsKExDaGFyIGNoKQoreworICAgIHJldHVybiAoY2ggPj0gJzAnICYmIGNo
IDw9ICc5Jyk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8TENo
YXI+Ojppc0hleGFkZWNpbWFsKExDaGFyIGNoKQoreworICAgIHJldHVybiAoY2ggPj0gJzAnICYm
IGNoIDw9ICc5JykgfHwgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHx8IChjaCA+PSAnQScgJiYg
Y2ggPD0gJ0YnKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgZG91YmxlIExleGVy
PExDaGFyPjo6cmVhZERlY2ltYWwoTENoYXIgY2gpCit7CisgICAgQVNTRVJUKGlzRGVjaW1hbChj
aCkpOworICAgIHJldHVybiBjaCAtICcwJzsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJ
TkUgZG91YmxlIExleGVyPExDaGFyPjo6cmVhZEhleGFkZWNpbWFsKExDaGFyIGNoKQoreworICAg
IEFTU0VSVChpc0hleGFkZWNpbWFsKGNoKSk7CisgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAn
OScpCisgICAgICAgIHJldHVybiBjaCAtICcwJzsKKyAgICBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9
ICdmJykKKyAgICAgICAgcmV0dXJuIGNoIC0gJ2EnOworICAgIEFTU0VSVChjaCA+PSAnQScgJiYg
Y2ggPD0gJ0YnKTsKKyAgICByZXR1cm4gY2ggLSAnQSc7Cit9CisKKwordGVtcGxhdGUgPD4KK0FM
V0FZU19JTkxJTkUgYm9vbCBMZXhlcjxVQ2hhcj46OmlzV2hpdGVTcGFjZShVQ2hhciBjaCkKK3sK
KyAgICAvLyBXR1NMIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGFueSBub24tQVNDSUkgd2hp
dGVzcGFjZSBjaGFyYWN0ZXJzCisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6aXNXaGl0ZVNwYWNl
KHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElO
RSBib29sIExleGVyPFVDaGFyPjo6aXNJZGVudGlmaWVyU3RhcnQoVUNoYXIgY2gpCit7CisgICAg
Ly8gV0dTTCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhbnkgbm9uLUFTQ0lJIGNoYXJhY3Rl
cnMgaW4gaWRlbnRpZmllcnMKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJT
dGFydChzdGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19J
TkxJTkUgYm9vbCBMZXhlcjxVQ2hhcj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKFVDaGFy
IGNoKQoreworICAgIC8vIFdHU0wgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgYW55IG5vbi1B
U0NJSSBjaGFyYWN0ZXJzIGluIGlkZW50aWZpZXJzCisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6
aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisK
K3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VUNoYXI+Ojppc0RlY2ltYWwo
VUNoYXIgY2gpCit7CisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6aXNEZWNpbWFsKHN0YXRpY19j
YXN0PExDaGFyPihjaCkpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExl
eGVyPFVDaGFyPjo6aXNIZXhhZGVjaW1hbChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8
TENoYXI+Ojppc0hleGFkZWNpbWFsKHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQorCit0ZW1w
bGF0ZSA8PgorQUxXQVlTX0lOTElORSBkb3VibGUgTGV4ZXI8VUNoYXI+OjpyZWFkRGVjaW1hbChV
Q2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+OjpyZWFkRGVjaW1hbChzdGF0aWNf
Y2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgZG91Ymxl
IExleGVyPFVDaGFyPjo6cmVhZEhleGFkZWNpbWFsKFVDaGFyIGNoKQoreworICAgIHJldHVybiBM
ZXhlcjxMQ2hhcj46OnJlYWRIZXhhZGVjaW1hbChzdGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjE1ZDk3OThjYjJhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9QYXJzZXIuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgTGV4ZXI+CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTaGFkZXI+IHBhcnNlKGNv
bnN0IFN0cmluZyYgd2dzbCkKK3sKKyAgICBMZXhlciBsZXhlcih3Z3NsKTsKKyAgICAodm9pZCkg
bGV4ZXI7CisKKyAgICByZXR1cm4geyB7IH0sIHsgfSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBX
R1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li44NTY2MTRiMWMzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvUGFy
c2VyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU2hhZGVyLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
TGV4ZXI+CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTaGFkZXI+IHBhcnNlKGNvbnN0IFN0cmluZyYg
d2dzbCk7CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9Tb3VyY2VTcGFuLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvU291cmNlU3Bhbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmIyNzc0OWMyZjg5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1NvdXJjZVNwYW4uaApAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXR1NMIHsKKworc3Ry
dWN0IFNvdXJjZVBvc2l0aW9uIHsKKyAgICB1bnNpZ25lZCBtX2xpbmU7CisgICAgdW5zaWduZWQg
bV9saW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKworc3RydWN0IFNvdXJj
ZVNwYW4geworICAgIHVuc2lnbmVkIG1fbGluZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVPZmZzZXQ7
CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7CisKKyAgICBT
b3VyY2VTcGFuKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVPZmZzZXQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IG1fbGluZShsaW5lKQorICAgICAgICAs
IG1fbGluZU9mZnNldChsaW5lT2Zmc2V0KQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgeworICAgIH0KK307CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NM
LmNwcAppbmRleCA3N2M4YTYxODMzYWUuLjc5NGI0YjM2NzIzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XR1NML1dHU0wuY3BwCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcApA
QCAtMjUsOCArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0dTTC5o
IgotCi0jaW5jbHVkZSAiQVNULmgiCisjaW5jbHVkZSAiU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBX
R1NMIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuaCBiL1NvdXJjZS9X
ZWJHUFUvV0dTTC9XR1NMLmgKaW5kZXggYjA2ZDExYjU2ZjFjLi4xODU1NDZkYWJiYzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L1dHU0wuaApAQCAtNTQsMTIgKzU0LDE0IEBAIHN0cnVjdCBDb21waWxhdGlvbk1lc3NhZ2Ugewog
ICAgIHVpbnQ2NF90IGxlbmd0aDsKIH07CiAKLWNsYXNzIEFTVDsKK25hbWVzcGFjZSBBU1Qgewor
Y2xhc3MgU2hhZGVyOworfQogCiBzdHJ1Y3QgU3VjY2Vzc2Z1bENoZWNrIHsKICAgICB+U3VjY2Vz
c2Z1bENoZWNrKCk7CiAgICAgVmVjdG9yPENvbXBpbGF0aW9uTWVzc2FnZT4gd2FybmluZ3M7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEFTVD4gYXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlNo
YWRlcj4gYXN0OwogfTsKIAogc3RydWN0IEZhaWxlZENoZWNrIHsKQEAgLTIwOSw3ICsyMTEsNyBA
QCBzdHJ1Y3QgUHJlcGFyZVJlc3VsdCB7CiAKIC8vIFRoZXNlIGFyZSBub3QgYWxsb3dlZCB0byBm
YWlsLgogLy8gQWxsIGZhaWx1cmVzIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gY2F1Z2h0IGluIGNo
ZWNrKCkuCi1QcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUJiwgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIHN0ZDo6b3B0aW9uYWw8UGlwZWxpbmVMYXlvdXQ+PiYpOwotUHJlcGFyZVJlc3VsdCBw
cmVwYXJlKGNvbnN0IEFTVCYsIGNvbnN0IFN0cmluZyYgZW50cnlQb2ludE5hbWUsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8UGlwZWxpbmVMYXlvdXQ+Jik7CitQcmVwYXJlUmVzdWx0IHByZXBhcmUoY29u
c3QgQVNUOjpTaGFkZXImLCBjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpvcHRpb25hbDxQaXBl
bGluZUxheW91dD4+Jik7CitQcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUOjpTaGFkZXIm
LCBjb25zdCBTdHJpbmcmIGVudHJ5UG9pbnROYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFBpcGVs
aW5lTGF5b3V0PiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbSBiL1NvdXJjZS9XZWJHUFUvV0dT
TFVuaXRUZXN0cy9XR1NMVW5pdFRlc3RzLm1tCmluZGV4IDczZDdjN2RjNzliZS4uYmU5Yjk3MTMy
YzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0
cy5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbQpA
QCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0ICJMZXhlci5o
IgogI2ltcG9ydCA8WENUZXN0L1hDVGVzdC5oPgotI2ltcG9ydCA8dmVjdG9yPgogI2ltcG9ydCA8
d3RmL1ZlY3Rvci5oPgogCiBAaW50ZXJmYWNlIFdHU0xVbml0VGVzdHMgOiBYQ1Rlc3RDYXNlCkBA
IC00MSw0ICs0MSwxMCBAQAogICAgIFhDVEFzc2VydEVxdWFsKHgsIHkpOwogfQogCistICh2b2lk
KWxleGVyVGVzdHMgeworICAgIFN0cmluZyBpbnB1dCA9ICI0Mi40MyI7CisgICAgV0dTTDo6TGV4
ZXI8TENoYXI+IGxleGVyMShpbnB1dCk7CisgICAgWENUQXNzZXJ0RXF1YWwobGV4ZXIxLmxleCgp
Lm1fdHlwZSwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsKTsKK30KKwogQGVu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggODU3MjMyYmIxOWE4Li44YTY1NTczZjZmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDEsNiArNDEsMTkgQEAKIAkJMUNFQkQ3
RjgyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEN0Y3MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQkxQ0VCRDgwMzI3
MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi87
IH07CiAJCTFDRUJEODI2MjcxNkNBQ0MwMEE1MjU0RCAvKiBsaWJ3Z3NsLmEgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdGMjI3MTZCMkNDMDBB
NTI1NEQgLyogbGlid2dzbC5hICovOyB9OworCQkzMzcxNkE1QjI3NDU3REU2MDBBMzk1MjIgLyog
U2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MzcxNkE1QTI3NDU3REU2MDBBMzk1MjIgLyogU2hhZGVyLmggKi87IH07CisJCTMzODI5NUFDMjcz
REUzNEIwMDFENzQ3MiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMzgyOTVBQjI3M0RFMzRCMDAxRDc0NzIgLyogTGV4ZXIuY3BwICov
OyB9OworCQkzMzkwQTEyRDI3NDQ4NjM1MDA0MDM0OUEgLyogU291cmNlU3Bhbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5MEExMkMyNzQ0ODYzNTAw
NDAzNDlBIC8qIFNvdXJjZVNwYW4uaCAqLzsgfTsKKwkJMzM5MEExMzAyNzQ0QTQ5NjAwNDAzNDlB
IC8qIEFTVE5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOTBBMTJGMjc0NEE0OTYwMDQwMzQ5QSAvKiBBU1ROb2RlLmggKi87IH07CisJCTMzOTBB
MTMyMjc0NEE1MDMwMDQwMzQ5QSAvKiBHbG9iYWxEaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTMxMjc0NEE1MDMwMDQwMzQ5QSAv
KiBHbG9iYWxEaXJlY3RpdmUuaCAqLzsgfTsKKwkJMzM5MEExMzQyNzQ0QTVCNzAwNDAzNDlBIC8q
IEdsb2JhbERlY2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOTBBMTMzMjc0NEE1QjcwMDQwMzQ5QSAvKiBHbG9iYWxEZWNsLmggKi87IH07CisJCTMz
OTBBMTM2Mjc0NEE2QzEwMDQwMzQ5QSAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTM1Mjc0NEE2QzEwMDQwMzQ5QSAvKiBB
dHRyaWJ1dGUuaCAqLzsgfTsKKwkJMzM5MEExMzgyNzQ0QTcyQzAwNDAzNDlBIC8qIFZhcmlhYmxl
UXVhbGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMzkwQTEzNzI3NDRBNzJDMDA0MDM0OUEgLyogVmFyaWFibGVRdWFsaWZpZXIuaCAqLzsgfTsK
KwkJMzM5MEExM0EyNzQ0QTc2RjAwNDAzNDlBIC8qIFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTM5Mjc0NEE3NkYwMDQwMzQ5QSAvKiBU
eXBlLmggKi87IH07CisJCTMzOTBBMTNDMjc0NEE3RDgwMDQwMzQ5QSAvKiBFeHByZXNzaW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkwQTEzQjI3
NDRBN0Q4MDA0MDM0OUEgLyogRXhwcmVzc2lvbi5oICovOyB9OworCQkzMzkwQTEzRTI3NDRBODU3
MDA0MDM0OUEgLyogU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMzkwQTEzRDI3NDRBODU3MDA0MDM0OUEgLyogU3RhdGVtZW50LmggKi87
IH07CisJCTMzOTBBMTQwMjc0NEE5OTAwMDQwMzQ5QSAvKiBQYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTNGMjc0NEE5OTAwMDQwMzQ5
QSAvKiBQYXJzZXIuaCAqLzsgfTsKKwkJMzM5MEExNDIyNzQ0QTlCNzAwNDAzNDlBIC8qIFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkw
QTE0MTI3NDRBOUI3MDA0MDM0OUEgLyogUGFyc2VyLmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWls
ZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlv
biAqLwpAQCAtMTI2LDcgKzEzOSw2IEBACiAJCTFDRUJEODAxMjcxNkI5QUIwMEE1MjU0RCAvKiBT
REtWYXJpYW50LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFNES1ZhcmlhbnQueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRUJEODAyMjcxNkJGODIwMEE1MjU0RCAvKiBX
R1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdHU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQ0VCRDgwNDI3MTZCRkFCMDBBNTI1NEQgLyogY29uZmlnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQ0VCRDgwNzI3
MTZDMkMwMDBBNTI1NEQgLyogQVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTVC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQ0VCRDgwQTI3MTZDMzZDMDBBNTI1NEQgLyogY29uZmlnLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
Q0VCRDgwQjI3MTZDMzc5MDBBNTI1NEQgLyogRXhwb3J0TWFjcm9zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4cG9ydE1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0VCRDgwRDI3
MTZDM0Q4MDBBNTI1NEQgLyogU2hhZGVyTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRlck1v
ZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM1LDYgKzE0NywyMCBAQAog
CQkxQ0VCRDgyQjI3MTZDQUZCMDBBNTI1NEQgLyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IG5hbWUgPSBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9
IFNES1JPT1Q7IH07CiAJCTFDRUJEODJEMjcxNkNCMTYwMEE1MjU0RCAvKiBGb3VuZGF0aW9uLmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBT
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gU0RLUk9PVDsgfTsKIAkJMUNFQkQ4MzAyNzE2Q0IzODAwQTUyNTREIC8qIGxpYmljdWNvcmUu
dGJkICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gInNv
dXJjZWNvZGUudGV4dC1iYXNlZC1keWxpYi1kZWZpbml0aW9uIjsgbmFtZSA9IGxpYmljdWNvcmUu
dGJkOyBwYXRoID0gdXNyL2xpYi9saWJpY3Vjb3JlLnRiZDsgc291cmNlVHJlZSA9IFNES1JPT1Q7
IH07CisJCTMzNzE2QTVBMjc0NTdERTYwMEEzOTUyMiAvKiBTaGFkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMzODI5NUE4MjczREQ5MkMwMDFENzQ3MiAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzgyOTVBQjI3M0RFMzRCMDAx
RDc0NzIgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMzkwQTEyQzI3NDQ4NjM1MDA0MDM0OUEgLyogU291cmNl
U3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMzOTBBMTJGMjc0NEE0OTYwMDQwMzQ5QSAvKiBBU1ROb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFTVE5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMzEy
NzQ0QTUwMzAwNDAzNDlBIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9i
YWxEaXJlY3RpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMzMyNzQ0
QTVCNzAwNDAzNDlBIC8qIEdsb2JhbERlY2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFsRGVjbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzkwQTEzNTI3NDRBNkMxMDA0MDM0OUEg
LyogQXR0cmlidXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0dHJpYnV0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMzkwQTEzNzI3NDRBNzJDMDA0MDM0OUEgLyogVmFyaWFibGVRdWFs
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVRdWFsaWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMzkyNzQ0QTc2RjAwNDAzNDlBIC8qIFR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzkwQTEz
QjI3NDRBN0Q4MDA0MDM0OUEgLyogRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNz
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBBMTNEMjc0NEE4NTcwMDQw
MzQ5QSAvKiBTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBBMTNGMjc0NEE5OTAwMDQwMzQ5QSAvKiBQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMzOTBBMTQxMjc0NEE5QjcwMDQwMzQ5QSAvKiBQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxl
UmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLwpAQCAtMjU5LDggKzI4NSwxMyBAQAogCQkxQ0VCRDdGNjI3MTZCMzMxMDBBNTI1
NEQgLyogV0dTTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJMUNFQkQ4MDcyNzE2QzJDMDAwQTUyNTREIC8qIEFTVC5oICovLAorCQkJCTMzOTBBMTJFMjc0
NEEzRTEwMDQwMzQ5QSAvKiBBU1QgKi8sCiAJCQkJMUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8q
IGNvbmZpZy5oICovLAorCQkJCTMzODI5NUE4MjczREQ5MkMwMDFENzQ3MiAvKiBMZXhlci5oICov
LAorCQkJCTMzODI5NUFCMjczREUzNEIwMDFENzQ3MiAvKiBMZXhlci5jcHAgKi8sCisJCQkJMzM5
MEExM0YyNzQ0QTk5MDAwNDAzNDlBIC8qIFBhcnNlci5oICovLAorCQkJCTMzOTBBMTQxMjc0NEE5
QjcwMDQwMzQ5QSAvKiBQYXJzZXIuY3BwICovLAorCQkJCTMzOTBBMTJDMjc0NDg2MzUwMDQwMzQ5
QSAvKiBTb3VyY2VTcGFuLmggKi8sCiAJCQkJMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdH
U0wuY3BwICovLAogCQkJCTFDRUJEN0Y3MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggKi8sCiAJ
CQkpOwpAQCAtMjk1LDYgKzMyNiwyMiBAQAogCQkJbmFtZSA9IEZyYW1ld29ya3M7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkzMzkwQTEyRTI3NDRBM0UxMDA0MDM0OUEgLyog
QVNUICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMzkw
QTEyRjI3NDRBNDk2MDA0MDM0OUEgLyogQVNUTm9kZS5oICovLAorCQkJCTMzOTBBMTM1Mjc0NEE2
QzEwMDQwMzQ5QSAvKiBBdHRyaWJ1dGUuaCAqLywKKwkJCQkzMzkwQTEzMTI3NDRBNTAzMDA0MDM0
OUEgLyogR2xvYmFsRGlyZWN0aXZlLmggKi8sCisJCQkJMzM5MEExMzMyNzQ0QTVCNzAwNDAzNDlB
IC8qIEdsb2JhbERlY2wuaCAqLywKKwkJCQkzMzkwQTEzQjI3NDRBN0Q4MDA0MDM0OUEgLyogRXhw
cmVzc2lvbi5oICovLAorCQkJCTMzNzE2QTVBMjc0NTdERTYwMEEzOTUyMiAvKiBTaGFkZXIuaCAq
LywKKwkJCQkzMzkwQTEzRDI3NDRBODU3MDA0MDM0OUEgLyogU3RhdGVtZW50LmggKi8sCisJCQkJ
MzM5MEExMzkyNzQ0QTc2RjAwNDAzNDlBIC8qIFR5cGUuaCAqLywKKwkJCQkzMzkwQTEzNzI3NDRB
NzJDMDA0MDM0OUEgLyogVmFyaWFibGVRdWFsaWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
QVNUOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIC8qIEVuZCBQQlhHcm91cCBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAg
LTMxMiw3ICszNTksMTggQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMzOTBBMTMwMjc0
NEE0OTYwMDQwMzQ5QSAvKiBBU1ROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VCRDdGODI3
MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM5MEExNDAyNzQ0
QTk5MDAwNDAzNDlBIC8qIFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM5MEExMkQyNzQ0
ODYzNTAwNDAzNDlBIC8qIFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMzOTBBMTMy
Mjc0NEE1MDMwMDQwMzQ5QSAvKiBHbG9iYWxEaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMzOTBBMTM0Mjc0NEE1QjcwMDQwMzQ5QSAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMzkwQTEzQzI3NDRBN0Q4MDA0MDM0OUEgLyogRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzM5MEExMzYyNzQ0QTZDMTAwNDAzNDlBIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzM5MEExM0EyNzQ0QTc2RjAwNDAzNDlBIC8qIFR5cGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMzNzE2QTVCMjc0NTdERTYwMEEzOTUyMiAvKiBTaGFkZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMzOTBBMTNFMjc0NEE4NTcwMDQwMzQ5QSAvKiBTdGF0ZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMzOTBBMTM4Mjc0NEE3MkMwMDQwMzQ5QSAvKiBWYXJpYWJsZVF1YWxpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NzMsNiArNTMxLDggQEAKIAkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAorCQkJCTMzODI5NUFDMjczREUzNEIwMDFENzQ3MiAvKiBMZXhlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkzMzkwQTE0MjI3NDRBOUI3MDA0MDM0OUEgLyogUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDRUJEODAzMjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
Owo=
</data>
<flag name="review"
          id="469601"
          type_id="1"
          status="-"
          setter="rmorisset"
    />
    <flag name="commit-queue"
          id="469602"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444557</attachid>
            <date>2021-11-17 13:14:56 -0800</date>
            <delta_ts>2021-11-29 14:49:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>patchWGSL</filename>
            <type>text/plain</type>
            <size>59229</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvQVNUTm9kZS5oIGIvU291cmNlL1dl
YkdQVS9XR1NML0FTVC9BU1ROb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi41YjQzZGVkYzAzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0FTVE5vZGUuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJTb3VyY2VTcGFuLmgiCisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNw
YWNlIEFTVCB7CisKK2NsYXNzIEFTVE5vZGUgeworcHVibGljOgorICAgIGNvbnN0IFNvdXJjZVNw
YW4mIHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KK3ByaXZhdGU6CisgICAgU291cmNl
U3BhbiBtX3NwYW47Cit9OworCisvLyBGSVhNRTogYWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJs
eSBiZSBtYXJrZWQgRkFTVF9NQUxMT0Mgb3Igd2hhdGV2ZXIgaXQgaXMgdG8gdXNlIGJtYWxsb2Mv
bGlicGFzCisvLyBGSVhNRTogbW9zdCBvZiB0aGUgdmVjdG9ycyBpbiBBU1Qgbm9kZXMgc2hvdWxk
IGJlIHNpemVkIHNtYWxsZXIgdGhhbiBkZWZhdWx0CisvLyBGSVhNRTogc29tZSBvZiB0aGUgbWV0
aG9kcyByZXR1cm5pbmcgcG9pbnRlcnMgaW4gQVNUIG5vZGVzIHNob3VsZCBwcm9iYWJseSBiZSBt
YXJrZWQgY29uc3QKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0F0dHJpYnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2Nl
ODkzZjVmYzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRy
aWJ1dGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBU1ROb2RlLmgiCisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CisK
K2NsYXNzIEF0dHJpYnV0ZSA6IHB1YmxpYyBBU1ROb2RlIHt9OworCitjbGFzcyBBdHRyaWJ1dGVC
bG9jayA6IHB1YmxpYyBBdHRyaWJ1dGUge307CisKK2NsYXNzIEF0dHJpYnV0ZUdyb3VwIDogcHVi
bGljIEF0dHJpYnV0ZSB7CitwdWJsaWM6CisgICAgdW5zaWduZWQgZ3JvdXAoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCitj
bGFzcyBBdHRyaWJ1dGVCaW5kaW5nIDogcHVibGljIEF0dHJpYnV0ZSB7CitwdWJsaWM6CisgICAg
dW5zaWduZWQgYmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbV92YWx1ZTsKK307CisKK2NsYXNzIEF0dHJpYnV0ZVN0YWdlIDogcHVibGlj
IEF0dHJpYnV0ZSB7CitwdWJsaWM6CisgICAgZW51bSBTdGFnZSA6IHVpbnQ4X3QgeworICAgICAg
ICBDb21wdXRlLAorICAgICAgICBWZXJ0ZXgsCisgICAgICAgIEZyYWdtZW50CisgICAgfTsKKyAg
ICBTdGFnZSBzdGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhZ2U7IH0KK3ByaXZhdGU6CisgICAg
U3RhZ2UgbV9zdGFnZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNzFiYTI5MmJhYTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9FeHByZXNzaW9uLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBFeHByZXNzaW9uIDogcHVibGljIEFTVE5vZGUge307CisKK2NsYXNz
IEJvb2xMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIGJvb2wgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAgIGJvb2wgbV92YWx1
ZTsKK307CisKK2NsYXNzIEludDMyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1Ymxp
YzoKKyAgICBpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorcHJpdmF0
ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCitjbGFzcyBVaW50MzJMaXRlcmFsIDogcHVi
bGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX3ZhbHVlOworfTsKKwor
Y2xhc3MgRmxvYXQzMkxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAg
ZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAgIGZs
b2F0IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9HbG9iYWxEZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0dsb2JhbERlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmYzZGEwMzc0MDhlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvR2xvYmFsRGVjbC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5j
bHVkZSAiRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlR5
cGUuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVF1YWxpZmllci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBHbG9iYWxEZWNsIDogcHVibGljIEFTVE5vZGUge307CisKK2NsYXNzIEdsb2JhbFZhcmlhYmxl
RGVjbCA6IHB1YmxpYyBHbG9iYWxEZWNsIHsKK3B1YmxpYzoKKyAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEF0dHJpYnV0ZT4+JiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIFZhcmlhYmxlUXVhbGlmaWVyKiBtYXliZVF1YWxpZmllcigpIHsgcmV0
dXJuIG1fcXVhbGlmaWVyLmdldCgpOyB9CisgICAgVHlwZSogbWF5YmVUeXBlKCkgeyByZXR1cm4g
bV90eXBlLmdldCgpOyB9CisgICAgRXhwcmVzc2lvbiogbWF5YmVJbml0aWFsaXplcigpIHsgcmV0
dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBdHRyaWJ1dGU+PiBtX2F0dHJpYnV0ZXM7CisgICAgU3RyaW5nVmlldyBtX25hbWU7
CisgICAgLy8gRWFjaCBvZiB0aGUgZm9sbG93aW5nIG1heSBiZSBudWxsCisgICAgLy8gQnV0IGF0
IGxlYXN0IG9uZSBvZiB0eXBlIGFuZCBpbml0aWFsaXplciBtdXN0IGJlIG5vbi1udWxsCisgICAg
c3RkOjp1bmlxdWVfcHRyPFZhcmlhYmxlUXVhbGlmaWVyPiBtX3F1YWxpZmllcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
PiBtX2luaXRpYWxpemVyOworfTsKKworY2xhc3MgU3RydWN0TWVtYmVyIDogcHVibGljIEFTVE5v
ZGUgeworICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4mIGF0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBTdHJpbmdW
aWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVHlwZSogdHlwZSgpIHsg
cmV0dXJuIG1fdHlwZS5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEF0dHJpYnV0ZT4+IG1fYXR0cmlidXRlczsKKyAgICBTdHJpbmdWaWV3IG1fbmFtZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV90eXBlOworfTsKK2NsYXNzIFN0cnVjdERlY2wgOiBw
dWJsaWMgR2xvYmFsRGVjbCB7CitwdWJsaWM6CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBdHRyaWJ1dGU+PiYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
czsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICBjb25zdCBWZWN0b3I8U3RydWN0TWVtYmVyPiYgbWVtYmVycygpIGNvbnN0IHsgcmV0
dXJuIG1fbWVtYmVyczsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEF0
dHJpYnV0ZT4+IG1fYXR0cmlidXRlczsKKyAgICBTdHJpbmdWaWV3IG1fbmFtZTsKKyAgICBWZWN0
b3I8U3RydWN0TWVtYmVyPiBtX21lbWJlcnM7Cit9OworCitjbGFzcyBQYXJhbWV0ZXIgOiBwdWJs
aWMgQVNUTm9kZSB7CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRyaWJ1dGU+
PiYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIGNvbnN0
IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBUeXBlKiB0
eXBlKCkgeyByZXR1cm4gbV90eXBlLmdldCgpOyB9Citwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4gbV9hdHRyaWJ1dGVzOworICAgIFN0cmluZ1ZpZXcgbV9u
YW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Cit9OworY2xhc3MgRnVuY3Rp
b25EZWNsIDogcHVibGljIEdsb2JhbERlY2wgeworcHVibGljOgorICAgIGNvbnN0IFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4mIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lOyB9CisgICAgY29uc3QgVmVjdG9yPFBhcmFtZXRlcj4mIHBhcmFtZXRlcnMoKSBj
b25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEF0dHJpYnV0ZT4+JiByZXR1cm5BdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXR1cm5BdHRyaWJ1dGVzOyB9CisgICAgVHlwZSogbWF5YmVSZXR1cm5UeXBlKCkgeyByZXR1cm4g
bV9yZXR1cm5UeXBlLmdldCgpOyB9CisgICAgQ29tcG91bmRTdGF0ZW1lbnQmIGJvZHkoKSB7IHJl
dHVybiBtX2JvZHk7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRy
aWJ1dGU+PiBtX2F0dHJpYnV0ZXM7CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgVmVjdG9y
PFBhcmFtZXRlcj4gbV9wYXJhbWV0ZXJzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0
cmlidXRlPj4gbV9yZXR1cm5BdHRyaWJ1dGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBt
X3JldHVyblR5cGU7IC8vIGNhbiBiZSBudWxsCisgICAgQ29tcG91bmRTdGF0ZW1lbnQgbV9ib2R5
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGlyZWN0aXZlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0dsb2JhbERpcmVjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uM2U2NGExY2MzYmJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9HbG9iYWxEaXJlY3RpdmUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEdsb2Jh
bERpcmVjdGl2ZSA6IHB1YmxpYyBBU1ROb2RlIHsKK3B1YmxpYzoKKyAgICBjb25zdCBTdHJpbmdW
aWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Citwcml2YXRlOgorICAgIFN0cmlu
Z1ZpZXcgbV9uYW1lOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hh
ZGVyLmgKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkdQVS9XR1NM
L0FTVC5oCnJlbmFtZSB0byBTb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlci5oCmluZGV4IDgx
YzNhNDA0ZmQ1ZC4uNzE5YmU1N2FhNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNULmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TaGFkZXIuaApAQCAtMjUsMTAgKzI1
LDE4IEBACiAKICNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV0dTTCB7CisjaW5jbHVkZSAiR2xv
YmFsRGlyZWN0aXZlLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgogCi1jbGFzcyBBU1Qgewor
bmFtZXNwYWNlIFdHU0wgeyBuYW1lc3BhY2UgQVNUIHsKIAorY2xhc3MgU2hhZGVyIHsKK3B1Ymxp
YzoKKyAgICBjb25zdCBWZWN0b3I8R2xvYmFsRGlyZWN0aXZlPiYgZGlyZWN0aXZlcygpIHsgcmV0
dXJuIG1fZGlyZWN0aXZlczsgfQorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R2xv
YmFsRGVjbD4+JiBkZWNscygpIHsgcmV0dXJuIG1fZGVjbHM7IH0KK3ByaXZhdGU6CisgICAgVmVj
dG9yPEdsb2JhbERpcmVjdGl2ZT4gbV9kaXJlY3RpdmVzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8R2xvYmFsRGVjbD4+IG1fZGVjbHM7CiB9OwogCi19Cit9IH0gLy8gbmFtZXNwYWNlIFdH
U0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnQuaCBi
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi44ZmYyMzUxZjY2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKworbmFtZXNwYWNlIFdH
U0wgeyBuYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgU3RhdGVtZW50IDogcHVibGljIEFTVE5vZGUg
e307CisKK2NsYXNzIENvbXBvdW5kU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CitwdWJs
aWM6CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+PiYgc3RhdGVt
ZW50cygpIHsgcmV0dXJuIG1fc3RhdGVtZW50czsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IG1fc3RhdGVtZW50czsKK307CisKK2NsYXNzIFJldHVy
blN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIEV4cHJlc3Npb24q
IG1heWJlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbi5nZXQoKTsgfQorcHJpdmF0
ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9leHByZXNzaW9uOworfTsKKwor
Y2xhc3MgQXNzaWdubWVudFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgor
ICAgIEV4cHJlc3Npb24qIG1heWJlTGhzKCkgeyByZXR1cm4gbV9saHMuZ2V0KCk7IH0KKyAgICBF
eHByZXNzaW9uKiByaHMoKSB7IHJldHVybiBtX3Jocy5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICAv
LyBMSFMgY2FuIGJlIG51bGwgaW4gdGhlIGNhc2UgaXQgaXMgJ18nLCBidXQgUkhTIGlzIG5ldmVy
IG51bGwKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9saHM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fcmhzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvVHlwZS5oIGIvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9UeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4zNDI2Y2ZlNDYzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL1R5cGUuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFR5cGUgOiBwdWJs
aWMgQVNUTm9kZSB7fTsKKworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGlj
OgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
K3ByaXZhdGU6CisgICAgU3RyaW5nVmlldyBtX25hbWU7Cit9OworCitjbGFzcyBQYXJhbWV0ZXJp
emVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAg
ICBWZWMyLAorICAgICAgICBWZWMzLAorICAgICAgICBWZWM0LAorICAgICAgICBNYXQyeDIsCisg
ICAgICAgIE1hdDJ4MywKKyAgICAgICAgTWF0Mng0LAorICAgICAgICBNYXQzeDIsCisgICAgICAg
IE1hdDN4MywKKyAgICAgICAgTWF0M3g0LAorICAgICAgICBNYXQ0eDIsCisgICAgICAgIE1hdDR4
MywKKyAgICAgICAgTWF0NHg0CisgICAgfTsKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICBUeXBlKiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuIG1fZWxlbWVudFR5
cGUuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7Cit9OworCitjbGFzcyBCb29sVHlwZSA6IHB1YmxpYyBU
eXBlIHt9OworY2xhc3MgRmxvYXQzMlR5cGUgOiBwdWJsaWMgVHlwZSB7fTsKK2NsYXNzIEludDMy
VHlwZSA6IHB1YmxpYyBUeXBlIHt9OworY2xhc3MgVWludDMyVHlwZSA6IHB1YmxpYyBUeXBlIHt9
OworCit9IH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9WYXJpYWJsZVF1YWxpZmllci5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9W
YXJpYWJsZVF1YWxpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uNjNiOTFiODc2YTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FT
VC9WYXJpYWJsZVF1YWxpZmllci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKworbmFtZXNwYWNlIFdHU0wgeyBuYW1l
c3BhY2UgQVNUIHsKKworZW51bSBjbGFzcyBTdG9yYWdlQ2xhc3MgOiB1aW50OF90IHsKKyAgICBG
dW5jdGlvbiwKKyAgICBQcml2YXRlLAorICAgIFdvcmtncm91cCwKKyAgICBVbmlmb3JtLAorICAg
IFN0b3JhZ2UKK307CisKK2VudW0gY2xhc3MgQWNjZXNzTW9kZSA6IHVpbnQ4X3QgeworICAgIFJl
YWQsCisgICAgV3JpdGUsCisgICAgUmVhZFdyaXRlCit9OworCitjbGFzcyBWYXJpYWJsZVF1YWxp
ZmllciA6IHB1YmxpYyBBU1ROb2RlIHsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQ2xhc3Mgc3RvcmFn
ZUNsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQ2xhc3M7IH0KKyAgICBBY2Nlc3NNb2Rl
IGFjY2Vzc01vZGUoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc01vZGU7IH0KK3ByaXZhdGU6Cisg
ICAgU3RvcmFnZUNsYXNzIG1fc3RvcmFnZUNsYXNzOworICAgIEFjY2Vzc01vZGUgbV9hY2Nlc3NN
b2RlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9MZXhlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWQ5YWFjNTRjZDE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNwcApAQCAtMCwwICsxLDQ1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXhlci5o
IgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorVG9rZW4gTGV4
ZXI8VD46OmxleCgpCit7CisgICAgc2tpcFdoaXRlc3BhY2UoKTsKKworICAgIFNvdXJjZVBvc2l0
aW9uIHN0YXJ0aW5nUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKKyAgICBhdXRvIG1ha2VU
b2tlbiA9IFsmXSAoVG9rZW5UeXBlIHR5cGUpIC0+IFRva2VuIHsKKyAgICAgICAgcmV0dXJuIHsg
dHlwZSwgc3RhcnRpbmdQb3NpdGlvbiwgbV9vZmZzZXQgLSBzdGFydGluZ1Bvc2l0aW9uLm1fb2Zm
c2V0IH07CisgICAgfTsKKyAgICBhdXRvIG1ha2VMaXRlcmFsVG9rZW4gPSBbJl0gKFRva2VuVHlw
ZSB0eXBlLCBkb3VibGUgbGl0ZXJhbFZhbHVlKSAtPiBUb2tlbiB7CisgICAgICAgIHJldHVybiB7
IHR5cGUsIHN0YXJ0aW5nUG9zaXRpb24sIG1fb2Zmc2V0IC0gc3RhcnRpbmdQb3NpdGlvbi5tX29m
ZnNldCwgbGl0ZXJhbFZhbHVlIH07CisgICAgfTsKKyAgICBhdXRvIGZpbmlzaEludGVnZXJMaXRl
cmFsID0gWyZdIChkb3VibGUgbGl0ZXJhbFZhbHVlKSAtPiBUb2tlbiB7CisgICAgICAgIGlmICht
X2N1cnJlbnQgPT0gJ2knKSB7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZCwgbGl0
ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9jdXJyZW50ID09ICd1Jykgewor
ICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2Vu
KFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkludGVnZXJM
aXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgIH07CisKKyAgICBpZiAoaXNBdEVuZE9mRmlsZSgp
KQorICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKKworICAg
IHN3aXRjaCAobV9jdXJyZW50KSB7CisgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpQYXJlbkxlZnQp
OworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgICAgIGNhc2UgJ3sn
OgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpCcmFjZUxlZnQpOworICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QnJhY2VSaWdodCk7
CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QXR0ckxlZnQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ10nKSB7CisgICAgICAgICAg
ICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6QXR0clJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICc6JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVRva2VuKFRva2VuVHlwZTo6Q29sb24pOworICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6Q29tbWEp
OworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RXF1YWwpOworICAgICAgICBjYXNlICc+JzoKKyAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6R1QpOworICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6TFQpOworICAgICAgICBjYXNlICcuJzog
eworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1f
b2Zmc2V0OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBlcmlvZCA9
IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgIGlmICghcG9zdFBlcmlvZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGVyaW9kKTsKKyAgICAg
ICAgICAgIGRvdWJsZSBsaXRlcmFsVmFsdWUgPSBwb3N0UGVyaW9kLnZhbHVlKCk7CisgICAgICAg
ICAgICBsaXRlcmFsVmFsdWUgLz0gcG93KDEwLCBtX29mZnNldCAtIG9mZnNldCk7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsRmxvYXRF
eHBvbmVudCgpOworICAgICAgICAgICAgaWYgKGV4cG9uZW50KQorICAgICAgICAgICAgICAgIGxp
dGVyYWxWYWx1ZSAqPSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRl
cmFsVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgc2hp
ZnQoKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJz4nKSB7CisgICAgICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6
QXJyb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
JzAnOiB7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgZG91YmxlIGxpdGVyYWxW
YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICd4JykgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9p
bnQgbGl0ZXJhbHMKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIGJv
b2wgaGV4TnVtYmVySXNFbXB0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzSGV4
YWRlY2ltYWwobV9jdXJyZW50KSkgeworICAgICAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUg
Kj0gMTY7CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSArPSByZWFkSGV4YWRlY2lt
YWwobV9jdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaGV4TnVtYmVySXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoaGV4TnVtYmVySXNFbXB0eSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmlzaEludGVnZXJMaXRlcmFsKGxpdGVy
YWxWYWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWwobV9j
dXJyZW50KSB8fCBtX2N1cnJlbnQgPT0gJy4nIHx8IG1fY3VycmVudCA9PSAnZScgfHwgbV9jdXJy
ZW50ID09ICdFJykgeworICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGlu
dGVnZXJQYXJ0ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgICAgICAgICAgICAgIGlmIChp
bnRlZ2VyUGFydCkKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlID0gaW50ZWdlclBh
cnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBib29sIGlzRmxvYXRpbmdQb2ludCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUgd2l0aCB0
aGUgWzEtOV0gY2FzZQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX29m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBl
cmlvZCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBv
c3RQZXJpb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsUGFy
dCA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9u
YWxQYXJ0IC89IHBvdygxMCwgbV9vZmZzZXQgLSBvZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbGl0ZXJhbFZhbHVlICs9IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFs
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNp
bWFsRmxvYXRFeHBvbmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSAq
PSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxW
YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgaW50
ZWdlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0YXJ0IHdpdGggMC4KKyAgICAgICAgICAgICAgICBp
ZiAoIWlzRmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bihUb2tlblR5cGU6OkludmFsaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1f
Y3VycmVudCA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJh
bCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmaW5p
c2hJbnRlZ2VyTGl0ZXJhbChsaXRlcmFsVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
JzEnOgorICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgY2FzZSAnMyc6CisgICAgICAgIGNhc2Ug
JzQnOgorICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgY2FzZSAnNic6CisgICAgICAgIGNhc2Ug
JzcnOgorICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgY2FzZSAnOSc6IHsKKyAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHZhbHVlID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2Vu
KFRva2VuVHlwZTo6SW52YWxpZCk7CisgICAgICAgICAgICBkb3VibGUgbGl0ZXJhbFZhbHVlID0g
dmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIGJvb2wgaXNGbG9hdGluZ1BvaW50ID0gZmFsc2U7
CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgeworICAgICAgICAgICAgICAgIGlz
RmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX29mZnNldDsKKyAgICAgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3N0UGVyaW9kID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOwor
ICAgICAgICAgICAgICAgIGlmIChwb3N0UGVyaW9kKSB7CisgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBmcmFjdGlvbmFsUGFydCA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJhY3Rpb25hbFBhcnQgLz0gcG93KDEwLCBtX29mZnNldCAtIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSArPSBmcmFjdGlvbmFsUGFydDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxp
bnQ2NF90PiBleHBvbmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGxpdGVyYWxWYWx1ZSAqPSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZs
b2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExp
dGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWlz
RmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmluaXNoSW50ZWdlckxpdGVy
YWwobGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRv
a2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYoaXNJZGVudGlmZXJTdGFydChtX2N1cnJl
bnQpKSB7CisgICAgICAgICAgICAgICAgVCogc3RhcnRPZlRva2VuID0gbV9jb2RlOworICAgICAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUoaXNWYWxpZElkZW50aWZp
ZXJDaGFyYWN0ZXIobV9jdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogYSB0cmllIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGhl
cmUsIGxvb2sgYXQgSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSBmb3Ig
YW4gZXhhbXBsZSBvZiBjb2RlIGF1dG9nZW5lcmF0aW9uIHRoYXQgcHJvZHVjZXMgc3VjaCBhIHRy
aWUuCisgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB2aWV3IHtzdGFydE9mVG9rZW4sIG1fb2Zm
c2V0IC0gc3RhcnRpbmdQb3NpdGlvbi5tX29mZnNldH07CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEkgZG9uJ3QgdGhpbmsgdGhhdCB0cnVlL2ZhbHNlL2YzMi91MzIvaTMyL2Jvb2wgbmVlZCB0
byBiZSB0aGVpciBvd24gdG9rZW5zLCB0aGV5IGNvdWxkIGp1c3QgYmUgcmVndWxhciBpZGVudGlm
aWVycy4KKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAidHJ1ZSIpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpUcnVlTGl0ZXJhbCk7CisgICAgICAg
ICAgICAgICAgaWYgKHZpZXcgPT0gImZhbHNlIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OkZhbHNlTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgaWYg
KHZpZXcgPT0gImYzMiIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpLZXl3b3JkRjMyKTsKKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAidTMyIikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRV
MzIpOworICAgICAgICAgICAgICAgIGlmICh2aWV3ID09ICJzdHJ1Y3QiKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFN0cnVjdCk7CisgICAg
ICAgICAgICAgICAgaWYgKHZpZXcgPT0gImZuIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgICAgICAgICAgICAgaWYgKHZp
ZXcgPT0gInJldHVybiIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpLZXl3b3JkUmV0dXJuKTsKKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAidmFy
IikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdv
cmRWYXIpOworICAgICAgICAgICAgICAgIGlmICh2aWV3ID09ICJhc20iIHx8IHZpZXcgPT0gImJm
MTYiIHx8IHZpZXcgPT0gImNvbnN0IiB8fCB2aWV3ID09ICJkbyIgfHwgdmlldyA9PSAiZW51bSIK
KyAgICAgICAgICAgICAgICAgICAgfHwgdmlldyA9PSAiZjE2IiB8fCB2aWV3ID09ICJmNjQiIHx8
IHZpZXcgPT0gImhhbmRsZSIgfHwgdmlldyA9PSAiaTgiIHx8IHZpZXcgPT0gImkxNiIKKyAgICAg
ICAgICAgICAgICAgICAgfHwgdmlldyA9PSAiaTY0IiB8fCB2aWV3ID09ICJtYXQiIHx8IHZpZXcg
PT0gInByZW1lcmdlIiB8fCB2aWV3ID09ICJyZWdhcmRsZXNzIgorICAgICAgICAgICAgICAgICAg
ICB8fCB2aWV3ID09ICJ0eXBlZGVmIiB8fCB2aWV3ID09ICJ1OCIgfHwgdmlldyA9PSAidTE2IiB8
fCB2aWV3ID09ICJ1NjQiIHx8IHZpZXcgPT0gInVubGVzcyIKKyAgICAgICAgICAgICAgICAgICAg
fHwgdmlldyA9PSAidXNpbmciIHx8IHZpZXcgPT0gInZlYyIgfHwgdmlldyA9PSAidm9pZCIgfHwg
dmlldyA9PSAid2hpbGUiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRv
a2VuVHlwZTo6UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBUb2tlblR5
cGU6OklkZW50aWZpZXIsIHN0YXJ0aW5nUG9zaXRpb24sIG1fb2Zmc2V0IC0gc3RhcnRpbmdQb3Np
dGlvbi5tX29mZnNldCwgdmlldyB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpJbnZhbGlkKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdCgpCit7CisgICAgLy8g
QXQgb25lIHBvaW50IHRpbWluZyBzaG93ZWQgdGhhdCBzZXR0aW5nIG1fY3VycmVudCB0byAwIHVu
Y29uZGl0aW9uYWxseSB3YXMgZmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5jZS4KKyAgICBt
X2N1cnJlbnQgPSAwOworICAgICsrbV9jb2RlOworICAgICsrbV9vZmZzZXQ7CisgICAgKyttX2xp
bmVPZmZzZXQ7CisgICAgaWYgKExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQorICAgICAgICBt
X2N1cnJlbnQgPSAqbV9jb2RlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1QgTGV4ZXI8
VD46OnBlZWsodW5zaWduZWQgaSkKK3sKKyAgICBpZiAoVU5MSUtFTFkobV9jb2RlICsgaSA+PSBt
X2NvZGVFbmQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKihtX2NvZGUgKyBpKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+Ojpza2lwV2hpdGVzcGFj
ZSgpCit7CisgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShtX2N1cnJlbnQpKSB7CisgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ1xuJykgeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
ICsrbV9saW5lOworICAgICAgICAgICAgbV9saW5lT2Zmc2V0ID0gMDsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzaGlmdCgpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitTb3VyY2VQb3NpdGlvbiBMZXhlcjxUPjo6Y3VycmVudFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4geyBtX2xpbmUsIG1fbGluZU9mZnNldCwgbV9vZmZzZXQgfTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojppc0F0RW5kT2ZGaWxlKCkgY29uc3QKK3sK
KyAgICBpZiAobV9jb2RlID09IG1fY29kZUVuZCkgeworICAgICAgICBBU1NFUlQobV9jdXJyZW50
ID09IDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUKG1fY29kZSA8
IG1fY29kZUVuZCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IExleGVyPFQ+OjpwYXJzZURlY2ltYWxJbnRlZ2Vy
KCkKK3sKKyAgICBpZiAoIWlzRGVjaW1hbChtX2N1cnJlbnQpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgQ2hlY2tlZFVpbnQ2NCB2YWx1ZSA9IDA7CisgICAgd2hpbGUgKGlz
RGVjaW1hbChtX2N1cnJlbnQpKSB7CisgICAgICAgIHZhbHVlICo9IDEwOworICAgICAgICB2YWx1
ZSArPSByZWFkRGVjaW1hbChtX2N1cnJlbnQpOworICAgICAgICBzaGlmdCgpOworICAgIH0KKyAg
ICBpZiAodmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiB7IHZhbHVlLnZhbHVlKCkgfTsKK30KKworLy8gUGFyc2UgcGF0dGVybiAo
ZXxFKShcK3wtKT9bMC05XStmPyBpZiBpdCBpcyBwcmVzZW50LCBhbmQgcmV0dXJuIHRoZSBleHBv
bmVudAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IExleGVy
PFQ+OjpwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCkKK3sKKyAgICBUIGNoYXIxID0gcGVlaygx
KTsKKyAgICBUIGNoYXIyID0gcGVlaygyKTsKKyAgICAvLyBDaGVjayBmb3IgcGF0dGVybiAoZXxF
KShcK3wtKT9bMC05XSsKKyAgICBpZiAobV9jdXJyZW50ICE9ICdlJyAmJiBtX2N1cnJlbnQgIT0g
J0UnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChjaGFyMSA9PSAnKycg
fHwgY2hhcjEgPT0gJy0nKSB7CisgICAgICAgIGlmICghaXNEZWNpbWFsKGNoYXIyKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfSBlbHNlIGlmICghaXNEZWNpbWFsKGNo
YXIxKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBzaGlmdCgpOworCisgICAg
Ym9vbCBuZWdhdGVFeHBvbmVudCA9IGZhbHNlOworICAgIGlmIChtX2N1cnJlbnQgPT0gJy0nKSB7
CisgICAgICAgIG5lZ2F0ZUV4cG9uZW50ID0gdHJ1ZTsKKyAgICAgICAgc2hpZnQoKTsKKyAgICB9
IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnKycpCisgICAgICAgIHNoaWZ0KCk7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAg
IGlmICghZXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgQ2hlY2tl
ZEludDY0IGV4cG9uZW50VmFsdWUgPSBleHBvbmVudC52YWx1ZSgpOworICAgIGlmIChuZWdhdGVF
eHBvbmVudCkKKyAgICAgICAgZXhwb25lbnRWYWx1ZSA9IC0gZXhwb25lbnRWYWx1ZTsKKyAgICBp
ZiAoIWV4cG9uZW50VmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgZXhwb25lbnRWYWx1ZS52YWx1ZSgpIH07Cit9OworCit0ZW1wbGF0ZSA8PgorQUxXQVlT
X0lOTElORSBib29sIExleGVyPExDaGFyPjo6aXNXaGl0ZVNwYWNlKExDaGFyIGNoKQoreworICAg
IHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlICcgJzoKKyAgICBjYXNlICdcdCc6CisgICAgY2FzZSAn
XG4nOgorICAgIGNhc2UgJ1x2JzoKKyAgICBjYXNlICdcZic6CisgICAgY2FzZSAnXHInOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPExDaGFyPjo6
aXNJZGVudGlmaWVyU3RhcnQoTENoYXIgY2gpCit7CisgICAgcmV0dXJuIChjaCA+PSAnYScgJiYg
Y2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJyk7Cit9CisKK3RlbXBsYXRlIDw+
CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8TENoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJh
Y3RlcihMQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8
IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwg
Y2ggPT0gJ18nOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPExD
aGFyPjo6aXNEZWNpbWFsKExDaGFyIGNoKQoreworICAgIHJldHVybiAoY2ggPj0gJzAnICYmIGNo
IDw9ICc5Jyk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8TENo
YXI+Ojppc0hleGFkZWNpbWFsKExDaGFyIGNoKQoreworICAgIHJldHVybiAoY2ggPj0gJzAnICYm
IGNoIDw9ICc5JykgfHwgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHx8IChjaCA+PSAnQScgJiYg
Y2ggPD0gJ0YnKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgZG91YmxlIExleGVy
PExDaGFyPjo6cmVhZERlY2ltYWwoTENoYXIgY2gpCit7CisgICAgQVNTRVJUKGlzRGVjaW1hbChj
aCkpOworICAgIHJldHVybiBjaCAtICcwJzsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJ
TkUgZG91YmxlIExleGVyPExDaGFyPjo6cmVhZEhleGFkZWNpbWFsKExDaGFyIGNoKQoreworICAg
IEFTU0VSVChpc0hleGFkZWNpbWFsKGNoKSk7CisgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAn
OScpCisgICAgICAgIHJldHVybiBjaCAtICcwJzsKKyAgICBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9
ICdmJykKKyAgICAgICAgcmV0dXJuIGNoIC0gJ2EnOworICAgIEFTU0VSVChjaCA+PSAnQScgJiYg
Y2ggPD0gJ0YnKTsKKyAgICByZXR1cm4gY2ggLSAnQSc7Cit9CisKKwordGVtcGxhdGUgPD4KK0FM
V0FZU19JTkxJTkUgYm9vbCBMZXhlcjxVQ2hhcj46OmlzV2hpdGVTcGFjZShVQ2hhciBjaCkKK3sK
KyAgICAvLyBXR1NMIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGFueSBub24tQVNDSUkgd2hp
dGVzcGFjZSBjaGFyYWN0ZXJzCisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6aXNXaGl0ZVNwYWNl
KHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElO
RSBib29sIExleGVyPFVDaGFyPjo6aXNJZGVudGlmaWVyU3RhcnQoVUNoYXIgY2gpCit7CisgICAg
Ly8gV0dTTCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhbnkgbm9uLUFTQ0lJIGNoYXJhY3Rl
cnMgaW4gaWRlbnRpZmllcnMKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJT
dGFydChzdGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19J
TkxJTkUgYm9vbCBMZXhlcjxVQ2hhcj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKFVDaGFy
IGNoKQoreworICAgIC8vIFdHU0wgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgYW55IG5vbi1B
U0NJSSBjaGFyYWN0ZXJzIGluIGlkZW50aWZpZXJzCisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6
aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisK
K3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VUNoYXI+Ojppc0RlY2ltYWwo
VUNoYXIgY2gpCit7CisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6aXNEZWNpbWFsKHN0YXRpY19j
YXN0PExDaGFyPihjaCkpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExl
eGVyPFVDaGFyPjo6aXNIZXhhZGVjaW1hbChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8
TENoYXI+Ojppc0hleGFkZWNpbWFsKHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQorCit0ZW1w
bGF0ZSA8PgorQUxXQVlTX0lOTElORSBkb3VibGUgTGV4ZXI8VUNoYXI+OjpyZWFkRGVjaW1hbChV
Q2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+OjpyZWFkRGVjaW1hbChzdGF0aWNf
Y2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgZG91Ymxl
IExleGVyPFVDaGFyPjo6cmVhZEhleGFkZWNpbWFsKFVDaGFyIGNoKQoreworICAgIHJldHVybiBM
ZXhlcjxMQ2hhcj46OnJlYWRIZXhhZGVjaW1hbChzdGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmggYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvTGV4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjIwODYwNTNjNmUyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9MZXhl
ci5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJTb3VyY2VTcGFuLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV0dTTCB7CisKK2VudW0g
Y2xhc3MgVG9rZW5UeXBlOiB1aW50MzJfdCB7CisgICAgSW52YWxpZCwKKyAgICBFbmRPZkZpbGUs
CisKKyAgICBUcnVlTGl0ZXJhbCwKKyAgICBGYWxzZUxpdGVyYWwsCisgICAgSW50ZWdlckxpdGVy
YWwsCisgICAgSW50ZWdlckxpdGVyYWxTaWduZWQsCisgICAgSW50ZWdlckxpdGVyYWxVbnNpZ25l
ZCwKKyAgICBEZWNpbWFsRmxvYXRMaXRlcmFsLAorICAgIEhleEZsb2F0TGl0ZXJhbCwKKworICAg
IElkZW50aWZpZXIsCisKKyAgICBSZXNlcnZlZFdvcmQsCisgICAgS2V5d29yZEYzMiwKKyAgICBL
ZXl3b3JkVTMyLAorICAgIEtleXdvcmRTdHJ1Y3QsCisgICAgS2V5d29yZEZuLAorICAgIEtleXdv
cmRSZXR1cm4sCisgICAgS2V5d29yZFZhciwKKyAgICAvLyBGSVhNRTogYWRkIGFsbCB0aGUgb3Ro
ZXIga2V5d29yZHM6IGZpbGU6Ly8vVXNlcnMvcm1vcmlzc2V0L015R1BVV2ViL3dnc2wvd2dzbC5o
dG1sI2tleXdvcmQtc3VtbWFyeQorCisgICAgQXJyb3csCisgICAgQXR0ckxlZnQsCisgICAgQXR0
clJpZ2h0LAorICAgIEJyYWNlTGVmdCwKKyAgICBCcmFjZVJpZ2h0LAorICAgIENvbG9uLAorICAg
IENvbW1hLAorICAgIEVxdWFsLAorICAgIEdULAorICAgIExULAorICAgIFBlcmlvZCwKKyAgICBQ
YXJlbkxlZnQsCisgICAgUGFyZW5SaWdodCwKKyAgICAvLyBGSVhNRTogYWRkIGFsbCB0aGUgb3Ro
ZXIgc3BlY2lhbCB0b2tlbnMKK307CisKK3N0cnVjdCBUb2tlbiB7CisgICAgVG9rZW5UeXBlIG1f
dHlwZTsKKyAgICBTb3VyY2VTcGFuIG1fc3BhbjsKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJs
ZSBtX2xpdGVyYWxWYWx1ZTsKKyAgICAgICAgU3RyaW5nVmlldyBtX2lkZW50OworICAgIH07Cisg
ICAgCisgICAgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJjZVBvc2l0aW9uIHBvc2l0aW9uLCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9zcGFu
KHBvc2l0aW9uLm1fbGluZSwgcG9zaXRpb24ubV9saW5lT2Zmc2V0LCBwb3NpdGlvbi5tX29mZnNl
dCwgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJZGVu
dGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJh
bCk7CisgICAgICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxTaWdu
ZWQpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsVW5z
aWduZWQpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExp
dGVyYWwpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkhleEZsb2F0TGl0ZXJh
bCk7CisgICAgfQorICAgIAorICAgIFRva2VuKFRva2VuVHlwZSB0eXBlLCBTb3VyY2VQb3NpdGlv
biBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBkb3VibGUgbGl0ZXJhbFZhbHVlKQorICAgICAg
ICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc3Bhbihwb3NpdGlvbi5tX2xpbmUsIHBvc2l0
aW9uLm1fbGluZU9mZnNldCwgcG9zaXRpb24ubV9vZmZzZXQsIGxlbmd0aCkKKyAgICAgICAgLCBt
X2xpdGVyYWxWYWx1ZShsaXRlcmFsVmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSA9
PSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsCisgICAgICAgICAgICB8fCB0eXBlID09IFRva2Vu
VHlwZTo6SW50ZWdlckxpdGVyYWxTaWduZWQKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gVG9rZW5U
eXBlOjpJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkCisgICAgICAgICAgICB8fCB0eXBlID09IFRva2Vu
VHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbAorICAgICAgICAgICAgfHwgdHlwZSA9PSBUb2tlblR5
cGU6OkhleEZsb2F0TGl0ZXJhbCk7CisgICAgfQorICAgIAorICAgIFRva2VuKFRva2VuVHlwZSB0
eXBlLCBTb3VyY2VQb3NpdGlvbiBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdWaWV3
IGlkZW50KQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc3Bhbihwb3NpdGlv
bi5tX2xpbmUsIHBvc2l0aW9uLm1fbGluZU9mZnNldCwgcG9zaXRpb24ubV9vZmZzZXQsIGxlbmd0
aCkKKyAgICAgICAgLCBtX2lkZW50KGlkZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVG9rZW5UeXBlOjpJZGVudGlmaWVyKTsKKyAgICB9CisgICAgCisgICAgflRva2VuKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3R5cGUgPT0gVG9rZW5UeXBlOjpJZGVudGlmaWVyKQorICAgICAg
ICAgICAgKCZtX2lkZW50KS0+flN0cmluZ1ZpZXcoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgTGV4ZXIgeworcHVibGljOgorICAgIExleGVyKGNvbnN0IFN0cmlu
ZyYgd2dzbCkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFQsIExD
aGFyPjo6dmFsdWUpIHsKKyAgICAgICAgICAgIG1fY29kZSA9IHdnc2wuY2hhcmFjdGVyczgoKTsK
KyAgICAgICAgICAgIG1fY29kZUVuZCA9IG1fY29kZSArIHdnc2wuc2l6ZUluQnl0ZXMoKTsKKyAg
ICAgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFQsIFVDaGFyPjo6dmFsdWUp
IHsKKyAgICAgICAgICAgIG1fY29kZSA9IHdnc2wuY2hhcmFjdGVyczE2KCk7CisgICAgICAgICAg
ICBBU1NFUlQod2dzbC5zaXplSW5CeXRlcygpICUgMiA9PSAwKTsKKyAgICAgICAgICAgIG1fY29k
ZUVuZCA9IG1fY29kZSArIHdnc2wuc2l6ZUluQnl0ZXMoKSAvIDI7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBU
b2tlbiBsZXgoKTsKKworICAgIC8vIE9ubHkgcHVibGljIHNvIHRoYXQgdGhlIFVDaGFyIHZlcnNp
b24gb2YgdGhlIExleGVyIGNhbiBkZWZlciB0byB0aGUgTENoYXIgdmVyc2lvbgorICAgIHN0YXRp
YyBib29sIGlzV2hpdGVTcGFjZShUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIGJvb2wgaXNJZGVu
dGlmaWVyU3RhcnQoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyBib29sIGlzVmFsaWRJZGVudGlm
aWVyQ2hhcmFjdGVyKFQgY2hhcmFjdGVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc0RlY2ltYWwoVCBj
aGFyYWN0ZXIpOworICAgIHN0YXRpYyBib29sIGlzSGV4YWRlY2ltYWwoVCBjaGFyYWN0ZXIpOwor
ICAgIHN0YXRpYyBkb3VibGUgcmVhZERlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyBk
b3VibGUgcmVhZEhleGFkZWNpbWFsKFQgY2hhcmFjdGVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHNoaWZ0KCk7CisgICAgVCBwZWVrKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNraXBXaGl0ZXNwYWNl
KCk7CisgICAgU291cmNlUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKCkgY29uc3Q7CisgICAgYm9v
bCBpc0F0RW5kT2ZGaWxlKCkgY29uc3Q7CisgICAgLy8gUmVhZHMgWzAtOV0rCisgICAgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgIC8vIFBhcnNlIHBh
dHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rZj8gaWYgaXQgaXMgcHJlc2VudCwgYW5kIHJldHVybiB0
aGUgZXhwb25lbnQKKyAgICBzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IHBhcnNlRGVjaW1hbEZsb2F0
RXhwb25lbnQoKTsKKworICAgIFQgbV9jdXJyZW50OworICAgIGNvbnN0IFQqIG1fY29kZTsKKyAg
ICBjb25zdCBUKiBtX2NvZGVFbmQ7CisgICAgdW5zaWduZWQgbV9saW5lIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fbGluZU9mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX29mZnNldCB7IDAgfTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9QYXJzZXIuY3BwIGIvU291
cmNlL1dlYkdQVS9XR1NML1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi4xNWQ5Nzk4Y2IyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvUGFyc2VyLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhcnNlci5oIgorCituYW1lc3BhY2UgV0dTTCB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIExleGVyPgorc3RkOjp1bmlxdWVfcHRyPEFTVDo6U2hhZGVyPiBwYXJz
ZShjb25zdCBTdHJpbmcmIHdnc2wpCit7CisgICAgTGV4ZXIgbGV4ZXIod2dzbCk7CisgICAgKHZv
aWQpIGxleGVyOworCisgICAgcmV0dXJuIHsgeyB9LCB7IH0gfTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5oIGIvU291cmNl
L1dlYkdQVS9XR1NML1BhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uODU2NjE0YjFjM2MxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L1BhcnNlci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlNoYWRlci5oIgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIExleGVyPgorc3RkOjp1bmlxdWVfcHRyPEFTVDo6U2hhZGVyPiBwYXJzZShjb25zdCBTdHJp
bmcmIHdnc2wpOworCit9IC8vIG5hbWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvU291cmNlU3Bhbi5oIGIvU291cmNlL1dlYkdQVS9XR1NML1NvdXJjZVNwYW4uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJiMjc3NDljMmY4OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Tb3VyY2VTcGFuLmgKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV0dTTCB7CisK
K3N0cnVjdCBTb3VyY2VQb3NpdGlvbiB7CisgICAgdW5zaWduZWQgbV9saW5lOworICAgIHVuc2ln
bmVkIG1fbGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK3N0cnVjdCBT
b3VyY2VTcGFuIHsKKyAgICB1bnNpZ25lZCBtX2xpbmU7CisgICAgdW5zaWduZWQgbV9saW5lT2Zm
c2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworCisg
ICAgU291cmNlU3Bhbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lT2Zmc2V0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX2xpbmUobGluZSkKKyAgICAg
ICAgLCBtX2xpbmVPZmZzZXQobGluZU9mZnNldCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgIHsKKyAgICB9Cit9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wv
V0dTTC5jcHAKaW5kZXggNzdjOGE2MTgzM2FlLi43OTRiNGIzNjcyMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5j
cHAKQEAgLTI1LDggKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldH
U0wuaCIKLQotI2luY2x1ZGUgIkFTVC5oIgorI2luY2x1ZGUgIlNoYWRlci5oIgogCiBuYW1lc3Bh
Y2UgV0dTTCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmggYi9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvV0dTTC5oCmluZGV4IGIwNmQxMWI1NmYxYy4uMTg1NTQ2ZGFiYmM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oCisrKyBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9XR1NMLmgKQEAgLTU0LDEyICs1NCwxNCBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25NZXNzYWdl
IHsKICAgICB1aW50NjRfdCBsZW5ndGg7CiB9OwogCi1jbGFzcyBBU1Q7CituYW1lc3BhY2UgQVNU
IHsKK2NsYXNzIFNoYWRlcjsKK30KIAogc3RydWN0IFN1Y2Nlc3NmdWxDaGVjayB7CiAgICAgflN1
Y2Nlc3NmdWxDaGVjaygpOwogICAgIFZlY3RvcjxDb21waWxhdGlvbk1lc3NhZ2U+IHdhcm5pbmdz
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q+IGFzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpTaGFkZXI+IGFzdDsKIH07CiAKIHN0cnVjdCBGYWlsZWRDaGVjayB7CkBAIC0yMDksNyArMjEx
LDcgQEAgc3RydWN0IFByZXBhcmVSZXN1bHQgewogCiAvLyBUaGVzZSBhcmUgbm90IGFsbG93ZWQg
dG8gZmFpbC4KIC8vIEFsbCBmYWlsdXJlcyBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIGNhdWdodCBp
biBjaGVjaygpLgotUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVCYsIGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0Pj4mKTsKLVByZXBhcmVSZXN1
bHQgcHJlcGFyZShjb25zdCBBU1QmLCBjb25zdCBTdHJpbmcmIGVudHJ5UG9pbnROYW1lLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0PiYpOworUHJlcGFyZVJlc3VsdCBwcmVwYXJl
KGNvbnN0IEFTVDo6U2hhZGVyJiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
UGlwZWxpbmVMYXlvdXQ+PiYpOworUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVDo6U2hh
ZGVyJiwgY29uc3QgU3RyaW5nJiBlbnRyeVBvaW50TmFtZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxQ
aXBlbGluZUxheW91dD4mKTsKIAogfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xVbml0VGVzdHMubW0gYi9Tb3VyY2UvV2ViR1BV
L1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbQppbmRleCA3M2Q3YzdkYzc5YmUuLmJlOWI5
NzEzMmM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xVbml0
VGVzdHMubW0KKysrIGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xVbml0VGVzdHMu
bW0KQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2ltcG9ydCAiTGV4
ZXIuaCIKICNpbXBvcnQgPFhDVGVzdC9YQ1Rlc3QuaD4KLSNpbXBvcnQgPHZlY3Rvcj4KICNpbXBv
cnQgPHd0Zi9WZWN0b3IuaD4KIAogQGludGVyZmFjZSBXR1NMVW5pdFRlc3RzIDogWENUZXN0Q2Fz
ZQpAQCAtNDEsNCArNDEsMTAgQEAKICAgICBYQ1RBc3NlcnRFcXVhbCh4LCB5KTsKIH0KIAorLSAo
dm9pZClsZXhlclRlc3RzIHsKKyAgICBTdHJpbmcgaW5wdXQgPSAiNDIuNDMiOworICAgIFdHU0w6
OkxleGVyPExDaGFyPiBsZXhlcjEoaW5wdXQpOworICAgIFhDVEFzc2VydEVxdWFsKGxleGVyMS5s
ZXgoKS5tX3R5cGUsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCk7Cit9CisK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDg1NzIzMmJiMTlhOC4uOGE2NTU3M2Y2ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJHUFUv
V2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxLDYgKzQxLDE5IEBACiAJCTFD
RUJEN0Y4MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdGNzI3MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMUNFQkQ4
MDMyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3Bw
ICovOyB9OwogCQkxQ0VCRDgyNjI3MTZDQUNDMDBBNTI1NEQgLyogbGlid2dzbC5hIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ3RjIyNzE2QjJD
QzAwQTUyNTREIC8qIGxpYndnc2wuYSAqLzsgfTsKKwkJMzM3MTZBNUIyNzQ1N0RFNjAwQTM5NTIy
IC8qIFNoYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzM3MTZBNUEyNzQ1N0RFNjAwQTM5NTIyIC8qIFNoYWRlci5oICovOyB9OworCQkzMzgyOTVB
QzI3M0RFMzRCMDAxRDc0NzIgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4Mjk1QUIyNzNERTM0QjAwMUQ3NDcyIC8qIExleGVyLmNw
cCAqLzsgfTsKKwkJMzM5MEExMkQyNzQ0ODYzNTAwNDAzNDlBIC8qIFNvdXJjZVNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTJDMjc0NDg2
MzUwMDQwMzQ5QSAvKiBTb3VyY2VTcGFuLmggKi87IH07CisJCTMzOTBBMTMwMjc0NEE0OTYwMDQw
MzQ5QSAvKiBBU1ROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMzkwQTEyRjI3NDRBNDk2MDA0MDM0OUEgLyogQVNUTm9kZS5oICovOyB9OworCQkz
MzkwQTEzMjI3NDRBNTAzMDA0MDM0OUEgLyogR2xvYmFsRGlyZWN0aXZlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkwQTEzMTI3NDRBNTAzMDA0MDM0
OUEgLyogR2xvYmFsRGlyZWN0aXZlLmggKi87IH07CisJCTMzOTBBMTM0Mjc0NEE1QjcwMDQwMzQ5
QSAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMzkwQTEzMzI3NDRBNUI3MDA0MDM0OUEgLyogR2xvYmFsRGVjbC5oICovOyB9Owor
CQkzMzkwQTEzNjI3NDRBNkMxMDA0MDM0OUEgLyogQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkwQTEzNTI3NDRBNkMxMDA0MDM0OUEg
LyogQXR0cmlidXRlLmggKi87IH07CisJCTMzOTBBMTM4Mjc0NEE3MkMwMDQwMzQ5QSAvKiBWYXJp
YWJsZVF1YWxpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzM5MEExMzcyNzQ0QTcyQzAwNDAzNDlBIC8qIFZhcmlhYmxlUXVhbGlmaWVyLmggKi87
IH07CisJCTMzOTBBMTNBMjc0NEE3NkYwMDQwMzQ5QSAvKiBUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkwQTEzOTI3NDRBNzZGMDA0MDM0OUEg
LyogVHlwZS5oICovOyB9OworCQkzMzkwQTEzQzI3NDRBN0Q4MDA0MDM0OUEgLyogRXhwcmVzc2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5MEEx
M0IyNzQ0QTdEODAwNDAzNDlBIC8qIEV4cHJlc3Npb24uaCAqLzsgfTsKKwkJMzM5MEExM0UyNzQ0
QTg1NzAwNDAzNDlBIC8qIFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzM5MEExM0QyNzQ0QTg1NzAwNDAzNDlBIC8qIFN0YXRlbWVudC5o
ICovOyB9OworCQkzMzkwQTE0MDI3NDRBOTkwMDA0MDM0OUEgLyogUGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkwQTEzRjI3NDRBOTkwMDA0
MDM0OUEgLyogUGFyc2VyLmggKi87IH07CisJCTMzOTBBMTQyMjc0NEE5QjcwMDQwMzQ5QSAvKiBQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzM5MEExNDEyNzQ0QTlCNzAwNDAzNDlBIC8qIFBhcnNlci5jcHAgKi87IH07CiAvKiBFbmQgUEJY
QnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNl
Y3Rpb24gKi8KQEAgLTEyNiw3ICsxMzksNiBAQAogCQkxQ0VCRDgwMTI3MTZCOUFCMDBBNTI1NEQg
LyogU0RLVmFyaWFudC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmln
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQg
LyogV0dTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXR1NMLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNFQkQ4
MDcyNzE2QzJDMDAwQTUyNTREIC8qIEFTVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEEyNzE2QzM2QzAwQTUyNTREIC8qIGNvbmZp
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNFQkQ4MEIyNzE2QzM3OTAwQTUyNTREIC8qIEV4cG9ydE1hY3Jvcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeHBvcnRNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4
MEQyNzE2QzNEODAwQTUyNTREIC8qIFNoYWRlck1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFk
ZXJNb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNSw2ICsxNDcsMjAg
QEAKIAkJMUNFQkQ4MkIyNzE2Q0FGQjAwQTUyNTREIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSBTREtST09UOyB9OwogCQkxQ0VCRDgyRDI3MTZDQjE2MDBBNTI1NEQgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRo
ID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNl
VHJlZSA9IFNES1JPT1Q7IH07CiAJCTFDRUJEODMwMjcxNkNCMzgwMEE1MjU0RCAvKiBsaWJpY3Vj
b3JlLnRiZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
ICJzb3VyY2Vjb2RlLnRleHQtYmFzZWQtZHlsaWItZGVmaW5pdGlvbiI7IG5hbWUgPSBsaWJpY3Vj
b3JlLnRiZDsgcGF0aCA9IHVzci9saWIvbGliaWN1Y29yZS50YmQ7IHNvdXJjZVRyZWUgPSBTREtS
T09UOyB9OworCQkzMzcxNkE1QTI3NDU3REU2MDBBMzk1MjIgLyogU2hhZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMzgyOTVBODI3M0REOTJDMDAxRDc0NzIgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4Mjk1QUIyNzNERTM0
QjAwMUQ3NDcyIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMkMyNzQ0ODYzNTAwNDAzNDlBIC8qIFNv
dXJjZVNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlU3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMzkwQTEyRjI3NDRBNDk2MDA0MDM0OUEgLyogQVNUTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBU1ROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBB
MTMxMjc0NEE1MDMwMDQwMzQ5QSAvKiBHbG9iYWxEaXJlY3RpdmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2xvYmFsRGlyZWN0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBBMTMz
Mjc0NEE1QjcwMDQwMzQ5QSAvKiBHbG9iYWxEZWNsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbERl
Y2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMzUyNzQ0QTZDMTAwNDAz
NDlBIC8qIEF0dHJpYnV0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdHRyaWJ1dGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMzcyNzQ0QTcyQzAwNDAzNDlBIC8qIFZhcmlhYmxl
UXVhbGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlUXVhbGlmaWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBBMTM5Mjc0NEE3NkYwMDQwMzQ5QSAvKiBUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5
MEExM0IyNzQ0QTdEODAwNDAzNDlBIC8qIEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhw
cmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzkwQTEzRDI3NDRBODU3
MDA0MDM0OUEgLyogU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzkwQTEzRjI3NDRBOTkwMDA0MDM0OUEgLyogUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMzkwQTE0MTI3NDRBOUI3MDA0MDM0OUEgLyogUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KQEAgLTI1OSw4ICsyODUsMTMgQEAKIAkJMUNFQkQ3RjYyNzE2QjMzMTAw
QTUyNTREIC8qIFdHU0wgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCTFDRUJEODA3MjcxNkMyQzAwMEE1MjU0RCAvKiBBU1QuaCAqLywKKwkJCQkzMzkwQTEy
RTI3NDRBM0UxMDA0MDM0OUEgLyogQVNUICovLAogCQkJCTFDRUJEODA0MjcxNkJGQUIwMEE1MjU0
RCAvKiBjb25maWcuaCAqLywKKwkJCQkzMzgyOTVBODI3M0REOTJDMDAxRDc0NzIgLyogTGV4ZXIu
aCAqLywKKwkJCQkzMzgyOTVBQjI3M0RFMzRCMDAxRDc0NzIgLyogTGV4ZXIuY3BwICovLAorCQkJ
CTMzOTBBMTNGMjc0NEE5OTAwMDQwMzQ5QSAvKiBQYXJzZXIuaCAqLywKKwkJCQkzMzkwQTE0MTI3
NDRBOUI3MDA0MDM0OUEgLyogUGFyc2VyLmNwcCAqLywKKwkJCQkzMzkwQTEyQzI3NDQ4NjM1MDA0
MDM0OUEgLyogU291cmNlU3Bhbi5oICovLAogCQkJCTFDRUJEODAyMjcxNkJGODIwMEE1MjU0RCAv
KiBXR1NMLmNwcCAqLywKIAkJCQkxQ0VCRDdGNzI3MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oICov
LAogCQkJKTsKQEAgLTI5NSw2ICszMjYsMjIgQEAKIAkJCW5hbWUgPSBGcmFtZXdvcmtzOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMzM5MEExMkUyNzQ0QTNFMTAwNDAzNDlB
IC8qIEFTVCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MzM5MEExMkYyNzQ0QTQ5NjAwNDAzNDlBIC8qIEFTVE5vZGUuaCAqLywKKwkJCQkzMzkwQTEzNTI3
NDRBNkMxMDA0MDM0OUEgLyogQXR0cmlidXRlLmggKi8sCisJCQkJMzM5MEExMzEyNzQ0QTUwMzAw
NDAzNDlBIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovLAorCQkJCTMzOTBBMTMzMjc0NEE1QjcwMDQw
MzQ5QSAvKiBHbG9iYWxEZWNsLmggKi8sCisJCQkJMzM5MEExM0IyNzQ0QTdEODAwNDAzNDlBIC8q
IEV4cHJlc3Npb24uaCAqLywKKwkJCQkzMzcxNkE1QTI3NDU3REU2MDBBMzk1MjIgLyogU2hhZGVy
LmggKi8sCisJCQkJMzM5MEExM0QyNzQ0QTg1NzAwNDAzNDlBIC8qIFN0YXRlbWVudC5oICovLAor
CQkJCTMzOTBBMTM5Mjc0NEE3NkYwMDQwMzQ5QSAvKiBUeXBlLmggKi8sCisJCQkJMzM5MEExMzcy
NzQ0QTcyQzAwNDAzNDlBIC8qIFZhcmlhYmxlUXVhbGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0
aCA9IEFTVDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3Jv
dXAgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICov
CkBAIC0zMTIsNyArMzU5LDE4IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkzMzkwQTEz
MDI3NDRBNDk2MDA0MDM0OUEgLyogQVNUTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNFQkQ3
RjgyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzOTBBMTQw
Mjc0NEE5OTAwMDQwMzQ5QSAvKiBQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzOTBBMTJE
Mjc0NDg2MzUwMDQwMzQ5QSAvKiBTb3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzkw
QTEzMjI3NDRBNTAzMDA0MDM0OUEgLyogR2xvYmFsRGlyZWN0aXZlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMzkwQTEzNDI3NDRBNUI3MDA0MDM0OUEgLyogR2xvYmFsRGVjbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzM5MEExM0MyNzQ0QTdEODAwNDAzNDlBIC8qIEV4cHJlc3Npb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMzOTBBMTM2Mjc0NEE2QzEwMDQwMzQ5QSAvKiBBdHRyaWJ1dGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMzOTBBMTNBMjc0NEE3NkYwMDQwMzQ5QSAvKiBUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMzcxNkE1QjI3NDU3REU2MDBBMzk1MjIgLyogU2hhZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMzkwQTEzRTI3NDRBODU3MDA0MDM0OUEgLyogU3RhdGVtZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzkwQTEzODI3NDRBNzJDMDA0MDM0OUEgLyogVmFyaWFibGVRdWFs
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDczLDYgKzUzMSw4IEBACiAJCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQkzMzgyOTVBQzI3M0RFMzRCMDAxRDc0NzIgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMzM5MEExNDIyNzQ0QTlCNzAwNDAzNDlBIC8qIFBhcnNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445349</attachid>
            <date>2021-11-29 14:49:27 -0800</date>
            <delta_ts>2022-02-14 08:39:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch233276</filename>
            <type>text/plain</type>
            <size>84141</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggNDY1YmUzNGU4Y2NiLi41NjkwN2NlNTM3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTA5IEBACisyMDIxLTExLTI5ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dHU0xdIEltcGxlbWVudCBlbm91Z2ggb2YgdGhlIGxleGVyIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMzMjc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTczMjY3NT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IGltcGxlbWVudHMgYSBsZXhlciB0aGF0IHN1cHBvcnRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgV0dT
TCBuZWNlc3NhcnkgZm9yIHRoZSBtb3N0IHRyaXZpYWwgc2hhZGVycyAoYW5kIG5vdGhpbmcgZWxz
ZSBmb3Igbm93KS4KKyAgICAgICAgSSBtb3N0bHkgZm9sbG93ZWQgdGhlIGFwcHJvYWNoIHVzZWQg
YnkgdGhlIEpTQyBsZXhlciwgZm9yIGV4YW1wbGUgaW4gYWNjZXB0aW5nIGJvdGggYXNjaWkgYW5k
IDE2LWJpdCBzdHJpbmdzLgorICAgICAgICBJdCBpcyB0ZXN0ZWQgd2l0aCBYQ1Rlc3RzLCB0aGFu
a3MgdG8gaGVscCBmcm9tIE15bGVzIGluIHNldHRpbmcgdGhhdCB1cC4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gaW5jbHVkZXMgYSBidW5jaCBvZiB0cml2aWFsIGZpbGVzIHRoYXQganVzdCBk
ZWZpbmUgdGhlIHBhcnRzIG9mIHRoZSBBU1QgbmVjZXNzYXJ5IGZvciB0aG9zZSBzYW1lIHNoYWRl
cnMgKHNlZSB0aGUgdGVzdHMgZm9yIHdoYXQgdGhleSBsb29rIGxpa2UpLgorCisgICAgICAgICog
V0dTTC9BU1QvQVNUTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6QVNUTm9kZTo6
c3BhbiBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvQXR0cmlidXRlLmg6IEFkZGVkLgorICAg
ICAgICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGVHcm91cDo6Z3JvdXAgY29uc3QpOgorICAgICAgICAo
V0dTTDo6QVNUOjpBdHRyaWJ1dGVCaW5kaW5nOjpiaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkFTVDo6QXR0cmlidXRlU3RhZ2U6OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKiBXR1NML0FT
VC9FeHByZXNzaW9uLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6QVNUOjpCb29sTGl0ZXJhbDo6
dmFsdWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpJbnQzMkxpdGVyYWw6OnZhbHVlIGNv
bnN0KToKKyAgICAgICAgKFdHU0w6OkFTVDo6VWludDMyTGl0ZXJhbDo6dmFsdWUgY29uc3QpOgor
ICAgICAgICAoV0dTTDo6QVNUOjpGbG9hdDMyTGl0ZXJhbDo6dmFsdWUgY29uc3QpOgorICAgICAg
ICAqIFdHU0wvQVNUL0dsb2JhbERlY2wuaDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6Okds
b2JhbFZhcmlhYmxlRGVjbDo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6
Okdsb2JhbFZhcmlhYmxlRGVjbDo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6Okds
b2JhbFZhcmlhYmxlRGVjbDo6bWF5YmVRdWFsaWZpZXIpOgorICAgICAgICAoV0dTTDo6QVNUOjpH
bG9iYWxWYXJpYWJsZURlY2w6Om1heWJlVHlwZSk6CisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2Jh
bFZhcmlhYmxlRGVjbDo6bWF5YmVJbml0aWFsaXplcik6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0
cnVjdE1lbWJlcjo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVj
dE1lbWJlcjo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdE1lbWJlcjo6
dHlwZSk6CisgICAgICAgIChXR1NMOjpBU1Q6OlN0cnVjdERlY2w6OmF0dHJpYnV0ZXMgY29uc3Qp
OgorICAgICAgICAoV0dTTDo6QVNUOjpTdHJ1Y3REZWNsOjpuYW1lIGNvbnN0KToKKyAgICAgICAg
KFdHU0w6OkFTVDo6U3RydWN0RGVjbDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgIChXR1NMOjpB
U1Q6OlBhcmFtZXRlcjo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlBh
cmFtZXRlcjo6bmFtZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcjo6dHlw
ZSk6CisgICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6YXR0cmlidXRlcyBjb25zdCk6
CisgICAgICAgIChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6bmFtZSBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6cGFyYW1ldGVycyBjb25zdCk6CisgICAgICAgIChX
R1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6cmV0dXJuQXR0cmlidXRlcyBjb25zdCk6CisgICAgICAg
IChXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbDo6bWF5YmVSZXR1cm5UeXBlKToKKyAgICAgICAgKFdH
U0w6OkFTVDo6RnVuY3Rpb25EZWNsOjpib2R5KToKKyAgICAgICAgKiBXR1NML0FTVC9HbG9iYWxE
aXJlY3RpdmUuaDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6Okdsb2JhbERpcmVjdGl2ZTo6
bmFtZSBjb25zdCk6CisgICAgICAgICogV0dTTC9BU1QvU2hhZGVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViR1BVL1dHU0wvQVNULmguCisgICAgICAgIChXR1NMOjpBU1Q6OlNoYWRlcjo6ZGly
ZWN0aXZlcyk6CisgICAgICAgIChXR1NMOjpBU1Q6OlNoYWRlcjo6ZGVjbHMpOgorICAgICAgICAq
IFdHU0wvQVNUL1N0YXRlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkFTVDo6Q29tcG91
bmRTdGF0ZW1lbnQ6OnN0YXRlbWVudHMpOgorICAgICAgICAoV0dTTDo6QVNUOjpSZXR1cm5TdGF0
ZW1lbnQ6Om1heWJlRXhwcmVzc2lvbik6CisgICAgICAgIChXR1NMOjpBU1Q6OkFzc2lnbm1lbnRT
dGF0ZW1lbnQ6Om1heWJlTGhzKToKKyAgICAgICAgKFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRl
bWVudDo6cmhzKToKKyAgICAgICAgKiBXR1NML0FTVC9UeXBlLmg6IEFkZGVkLgorICAgICAgICAo
V0dTTDo6QVNUOjpOYW1lZFR5cGU6Om5hbWUgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpQ
YXJhbWV0ZXJpemVkVHlwZTo6a2luZCBjb25zdCk6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFt
ZXRlcml6ZWRUeXBlOjplbGVtZW50VHlwZSk6CisgICAgICAgICogV0dTTC9BU1QvVmFyaWFibGVR
dWFsaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXR1NMOjpBU1Q6OlZhcmlhYmxlUXVhbGlmaWVy
OjpzdG9yYWdlQ2xhc3MgY29uc3QpOgorICAgICAgICAoV0dTTDo6QVNUOjpWYXJpYWJsZVF1YWxp
Zmllcjo6YWNjZXNzTW9kZSBjb25zdCk6CisgICAgICAgICogV0dTTC9MZXhlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OmxleCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxU
Pjo6c2hpZnQpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBlZWspOgorICAgICAgICAoV0dT
TDo6TGV4ZXI8VD46OnNraXBXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdHU0w6OkxleGVyPFQ+Ojpj
dXJyZW50UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OmlzQXRFbmRP
ZkZpbGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBhcnNlRGVjaW1hbEludGVn
ZXIpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQp
OgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc1doaXRlU3BhY2UpOgorICAgICAgICAo
V0dTTDo6TGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJTdGFydCk6CisgICAgICAgIChXR1NMOjpM
ZXhlcjxMQ2hhcj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdHU0w6
OkxleGVyPExDaGFyPjo6aXNEZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6
aXNIZXhhZGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OnJlYWREZWNpbWFs
KToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6cmVhZEhleGFkZWNpbWFsKToKKyAgICAg
ICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKToKKyAgICAgICAgKFdHU0w6Okxl
eGVyPFVDaGFyPjo6aXNJZGVudGlmaWVyU3RhcnQpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VUNo
YXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJhY3Rlcik6CisgICAgICAgIChXR1NMOjpMZXhlcjxV
Q2hhcj46OmlzRGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OmlzSGV4YWRl
Y2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+OjpyZWFkRGVjaW1hbCk6CisgICAg
ICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OnJlYWRIZXhhZGVjaW1hbCk6CisgICAgICAgICogV0dT
TC9MZXhlci5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkxleGVyOjpMZXhlcik6CisgICAgICAg
ICogV0dTTC9QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OnBhcnNlKToKKyAgICAg
ICAgKiBXR1NML1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXR1NML1NvdXJjZVNwYW4uaDog
QWRkZWQuCisgICAgICAgIChXR1NMOjpTb3VyY2VTcGFuOjpTb3VyY2VTcGFuKToKKyAgICAgICAg
KiBXR1NML1Rva2VuLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6VG9rZW46OlRva2VuKToKKyAg
ICAgICAgKFdHU0w6OlRva2VuOjp+VG9rZW4pOgorICAgICAgICAqIFdHU0wvV0dTTC5jcHA6Cisg
ICAgICAgICogV0dTTC9XR1NMLmg6CisgICAgICAgICogV0dTTFVuaXRUZXN0cy9XR1NMTGV4ZXJU
ZXN0cy5tbTogQWRkZWQuCisgICAgICAgICgtW1dHU0xMZXhlclRlc3RzIHRlc3RMZXhlck9uU2lu
Z2xlVG9rZW5zXSk6CisgICAgICAgICgtW1dHU0xMZXhlclRlc3RzIHRlc3RMZXhlck9uQ29tcHV0
ZVNoYWRlcl0pOgorICAgICAgICAoLVtXR1NMTGV4ZXJUZXN0cyB0ZXN0TGV4ZXJPbkdyYXBoaWNz
U2hhZGVyXSk6CisgICAgICAgICogV0dTTFVuaXRUZXN0cy9XR1NMVW5pdFRlc3RzLm1tOiBSZW1v
dmVkLgorICAgICAgICAoLVtXR1NMVW5pdFRlc3RzIHRlc3RFeGFtcGxlXSk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMTEtMjkg
IE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2Vi
R1BVXSBNYWtlIFdlYkdQVS5mcmFtZXdvcmsncyBjbGFzc2VzIHJlZmVyZW5jZSBjb3VudGVkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0FTVE5vZGUuaCBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9BU1QvQVNUTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uNWI0M2RlZGMwMzNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9BU1ROb2RlLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiU291cmNlU3Bhbi5oIgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBBU1ROb2RlIHsKK3B1YmxpYzoKKyAgICBjb25zdCBTb3VyY2VTcGFu
JiBzcGFuKCkgY29uc3QgeyByZXR1cm4gbV9zcGFuOyB9Citwcml2YXRlOgorICAgIFNvdXJjZVNw
YW4gbV9zcGFuOworfTsKKworLy8gRklYTUU6IGFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkg
YmUgbWFya2VkIEZBU1RfTUFMTE9DIG9yIHdoYXRldmVyIGl0IGlzIHRvIHVzZSBibWFsbG9jL2xp
YnBhcworLy8gRklYTUU6IG1vc3Qgb2YgdGhlIHZlY3RvcnMgaW4gQVNUIG5vZGVzIHNob3VsZCBi
ZSBzaXplZCBzbWFsbGVyIHRoYW4gZGVmYXVsdAorLy8gRklYTUU6IHNvbWUgb2YgdGhlIG1ldGhv
ZHMgcmV0dXJuaW5nIHBvaW50ZXJzIGluIEFTVCBub2RlcyBzaG91bGQgcHJvYmFibHkgYmUgbWFy
a2VkIGNvbnN0CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvQVNUL0F0dHJpYnV0ZS5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9B
dHRyaWJ1dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdjZTg5
M2Y1ZmMwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmli
dXRlLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQVNUTm9kZS5oIgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBBdHRyaWJ1dGUgOiBwdWJsaWMgQVNUTm9kZSB7fTsKKworY2xhc3MgQXR0cmlidXRlQmxv
Y2sgOiBwdWJsaWMgQXR0cmlidXRlIHt9OworCitjbGFzcyBBdHRyaWJ1dGVHcm91cCA6IHB1Ymxp
YyBBdHRyaWJ1dGUgeworcHVibGljOgorICAgIHVuc2lnbmVkIGdyb3VwKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3ZhbHVlOworfTsKKworY2xh
c3MgQXR0cmlidXRlQmluZGluZyA6IHB1YmxpYyBBdHRyaWJ1dGUgeworcHVibGljOgorICAgIHVu
c2lnbmVkIGJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Citwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCitjbGFzcyBBdHRyaWJ1dGVTdGFnZSA6IHB1YmxpYyBB
dHRyaWJ1dGUgeworcHVibGljOgorICAgIGVudW0gU3RhZ2UgOiB1aW50OF90IHsKKyAgICAgICAg
Q29tcHV0ZSwKKyAgICAgICAgVmVydGV4LAorICAgICAgICBGcmFnbWVudAorICAgIH07CisgICAg
U3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWdlOyB9Citwcml2YXRlOgorICAgIFN0
YWdlIG1fc3RhZ2U7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIFdHU0w6OkFTVApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0V4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjcxYmEyOTJiYWE5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvRXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkFTVE5vZGUuaCIKKworbmFtZXNwYWNlIFdHU0wgeyBuYW1lc3BhY2Ug
QVNUIHsKKworY2xhc3MgRXhwcmVzc2lvbiA6IHB1YmxpYyBBU1ROb2RlIHt9OworCitjbGFzcyBC
b29sTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBib29sIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorcHJpdmF0ZToKKyAgICBib29sIG1fdmFsdWU7
Cit9OworCitjbGFzcyBJbnQzMkxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6
CisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KK3ByaXZhdGU6
CisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworY2xhc3MgVWludDMyTGl0ZXJhbCA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV92YWx1ZTsKK307CisKK2Ns
YXNzIEZsb2F0MzJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIGZs
b2F0IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorcHJpdmF0ZToKKyAgICBmbG9h
dCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvR2xvYmFsRGVjbC5oIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9HbG9iYWxEZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5mM2RhMDM3NDA4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNU
L0dsb2JhbERlY2wuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1
ZGUgIkV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJUeXBl
LmgiCisjaW5jbHVkZSAiVmFyaWFibGVRdWFsaWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdHU0wgeyBuYW1lc3BhY2UgQVNUIHsKKworY2xhc3Mg
R2xvYmFsRGVjbCA6IHB1YmxpYyBBU1ROb2RlIHt9OworCitjbGFzcyBHbG9iYWxWYXJpYWJsZURl
Y2wgOiBwdWJsaWMgR2xvYmFsRGVjbCB7CitwdWJsaWM6CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBdHRyaWJ1dGU+PiYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlczsgfQorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICBWYXJpYWJsZVF1YWxpZmllciogbWF5YmVRdWFsaWZpZXIoKSB7IHJldHVy
biBtX3F1YWxpZmllci5nZXQoKTsgfQorICAgIFR5cGUqIG1heWJlVHlwZSgpIHsgcmV0dXJuIG1f
dHlwZS5nZXQoKTsgfQorICAgIEV4cHJlc3Npb24qIG1heWJlSW5pdGlhbGl6ZXIoKSB7IHJldHVy
biBtX2luaXRpYWxpemVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QXR0cmlidXRlPj4gbV9hdHRyaWJ1dGVzOworICAgIFN0cmluZ1ZpZXcgbV9uYW1lOwor
ICAgIC8vIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBtYXkgYmUgbnVsbAorICAgIC8vIEJ1dCBhdCBs
ZWFzdCBvbmUgb2YgdHlwZSBhbmQgaW5pdGlhbGl6ZXIgbXVzdCBiZSBub24tbnVsbAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxWYXJpYWJsZVF1YWxpZmllcj4gbV9xdWFsaWZpZXI7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4g
bV9pbml0aWFsaXplcjsKK307CisKK2NsYXNzIFN0cnVjdE1lbWJlciA6IHB1YmxpYyBBU1ROb2Rl
IHsKKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEF0dHJpYnV0ZT4+JiBhdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgY29uc3QgU3RyaW5nVmll
dyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFR5cGUqIHR5cGUoKSB7IHJl
dHVybiBtX3R5cGUuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBdHRyaWJ1dGU+PiBtX2F0dHJpYnV0ZXM7CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKK307CitjbGFzcyBTdHJ1Y3REZWNsIDogcHVi
bGljIEdsb2JhbERlY2wgeworcHVibGljOgorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QXR0cmlidXRlPj4mIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KKyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgY29uc3QgVmVjdG9yPFN0cnVjdE1lbWJlcj4mIG1lbWJlcnMoKSBjb25zdCB7IHJldHVy
biBtX21lbWJlcnM7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdHRy
aWJ1dGU+PiBtX2F0dHJpYnV0ZXM7CisgICAgU3RyaW5nVmlldyBtX25hbWU7CisgICAgVmVjdG9y
PFN0cnVjdE1lbWJlcj4gbV9tZW1iZXJzOworfTsKKworY2xhc3MgUGFyYW1ldGVyIDogcHVibGlj
IEFTVE5vZGUgeworICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0cmlidXRlPj4m
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBT
dHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgVHlwZSogdHlw
ZSgpIHsgcmV0dXJuIG1fdHlwZS5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEF0dHJpYnV0ZT4+IG1fYXR0cmlidXRlczsKKyAgICBTdHJpbmdWaWV3IG1fbmFt
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV90eXBlOworfTsKK2NsYXNzIEZ1bmN0aW9u
RGVjbCA6IHB1YmxpYyBHbG9iYWxEZWNsIHsKK3B1YmxpYzoKKyAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEF0dHJpYnV0ZT4+JiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzOyB9CisgICAgY29uc3QgU3RyaW5nVmlldyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGNvbnN0IFZlY3RvcjxQYXJhbWV0ZXI+JiBwYXJhbWV0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBdHRyaWJ1dGU+PiYgcmV0dXJuQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmV0
dXJuQXR0cmlidXRlczsgfQorICAgIFR5cGUqIG1heWJlUmV0dXJuVHlwZSgpIHsgcmV0dXJuIG1f
cmV0dXJuVHlwZS5nZXQoKTsgfQorICAgIENvbXBvdW5kU3RhdGVtZW50JiBib2R5KCkgeyByZXR1
cm4gbV9ib2R5OyB9Citwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXR0cmli
dXRlPj4gbV9hdHRyaWJ1dGVzOworICAgIFN0cmluZ1ZpZXcgbV9uYW1lOworICAgIFZlY3RvcjxQ
YXJhbWV0ZXI+IG1fcGFyYW1ldGVyczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEF0dHJp
YnV0ZT4+IG1fcmV0dXJuQXR0cmlidXRlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV9y
ZXR1cm5UeXBlOyAvLyBjYW4gYmUgbnVsbAorICAgIENvbXBvdW5kU3RhdGVtZW50IG1fYm9keTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvQVNUL0dsb2JhbERpcmVjdGl2ZS5oIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9H
bG9iYWxEaXJlY3RpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjNlNjRhMWNjM2JiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
R2xvYmFsRGlyZWN0aXZlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFjZSBBU1QgeworCitjbGFzcyBHbG9iYWxE
aXJlY3RpdmUgOiBwdWJsaWMgQVNUTm9kZSB7CitwdWJsaWM6CisgICAgY29uc3QgU3RyaW5nVmll
dyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorcHJpdmF0ZToKKyAgICBTdHJpbmdW
aWV3IG1fbmFtZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNULmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRl
ci5oCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJHUFUvV0dTTC9B
U1QuaApyZW5hbWUgdG8gU291cmNlL1dlYkdQVS9XR1NML0FTVC9TaGFkZXIuaAppbmRleCA4MWMz
YTQwNGZkNWQuLjcxOWJlNTdhYTY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML0FT
VC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVyLmgKQEAgLTI1LDEwICsyNSwx
OCBAQAogCiAjcHJhZ21hIG9uY2UKIAotbmFtZXNwYWNlIFdHU0wgeworI2luY2x1ZGUgIkdsb2Jh
bERpcmVjdGl2ZS5oIgorI2luY2x1ZGUgIkdsb2JhbERlY2wuaCIKIAotY2xhc3MgQVNUIHsKK25h
bWVzcGFjZSBXR1NMIHsgbmFtZXNwYWNlIEFTVCB7CiAKK2NsYXNzIFNoYWRlciB7CitwdWJsaWM6
CisgICAgY29uc3QgVmVjdG9yPEdsb2JhbERpcmVjdGl2ZT4mIGRpcmVjdGl2ZXMoKSB7IHJldHVy
biBtX2RpcmVjdGl2ZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdsb2Jh
bERlY2w+PiYgZGVjbHMoKSB7IHJldHVybiBtX2RlY2xzOyB9Citwcml2YXRlOgorICAgIFZlY3Rv
cjxHbG9iYWxEaXJlY3RpdmU+IG1fZGlyZWN0aXZlczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEdsb2JhbERlY2w+PiBtX2RlY2xzOwogfTsKIAotfQorfSB9IC8vIG5hbWVzcGFjZSBXR1NM
OjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50LmggYi9T
b3VyY2UvV2ViR1BVL1dHU0wvQVNUL1N0YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uOGZmMjM1MWY2NjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisKK25hbWVzcGFjZSBXR1NM
IHsgbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFN0YXRlbWVudCA6IHB1YmxpYyBBU1ROb2RlIHt9
OworCitjbGFzcyBDb21wb3VuZFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGlj
OgorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhdGVtZW50Pj4mIHN0YXRlbWVu
dHMoKSB7IHJldHVybiBtX3N0YXRlbWVudHM7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+PiBtX3N0YXRlbWVudHM7Cit9OworCitjbGFzcyBSZXR1cm5T
dGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKK3B1YmxpYzoKKyAgICBFeHByZXNzaW9uKiBt
YXliZUV4cHJlc3Npb24oKSB7IHJldHVybiBtX2V4cHJlc3Npb24uZ2V0KCk7IH0KK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fZXhwcmVzc2lvbjsKK307CisKK2Ns
YXNzIEFzc2lnbm1lbnRTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBFeHByZXNzaW9uKiBtYXliZUxocygpIHsgcmV0dXJuIG1fbGhzLmdldCgpOyB9CisgICAgRXhw
cmVzc2lvbiogcmhzKCkgeyByZXR1cm4gbV9yaHMuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgLy8g
TEhTIGNhbiBiZSBudWxsIGluIHRoZSBjYXNlIGl0IGlzICdfJywgYnV0IFJIUyBpcyBuZXZlciBu
dWxsCisgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbGhzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPiBtX3JoczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6
QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1R5cGUuaCBiL1NvdXJjZS9X
ZWJHUFUvV0dTTC9BU1QvVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uMzQyNmNmZTQ2M2RlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NM
L0FTVC9UeXBlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQVNUTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV0dTTCB7IG5hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlIDogcHVibGlj
IEFTVE5vZGUge307CisKK2NsYXNzIE5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoK
KyAgICBjb25zdCBTdHJpbmdWaWV3JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Citw
cml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9uYW1lOworfTsKKworY2xhc3MgUGFyYW1ldGVyaXpl
ZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAg
VmVjMiwKKyAgICAgICAgVmVjMywKKyAgICAgICAgVmVjNCwKKyAgICAgICAgTWF0MngyLAorICAg
ICAgICBNYXQyeDMsCisgICAgICAgIE1hdDJ4NCwKKyAgICAgICAgTWF0M3gyLAorICAgICAgICBN
YXQzeDMsCisgICAgICAgIE1hdDN4NCwKKyAgICAgICAgTWF0NHgyLAorICAgICAgICBNYXQ0eDMs
CisgICAgICAgIE1hdDR4NAorICAgIH07CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CisgICAgVHlwZSogZWxlbWVudFR5cGUoKSB7IHJldHVybiBtX2VsZW1lbnRUeXBl
LmdldCgpOyB9Citwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlPiBtX2VsZW1lbnRUeXBlOworfTsKKworY2xhc3MgQm9vbFR5cGUgOiBwdWJsaWMgVHlw
ZSB7fTsKK2NsYXNzIEZsb2F0MzJUeXBlIDogcHVibGljIFR5cGUge307CitjbGFzcyBJbnQzMlR5
cGUgOiBwdWJsaWMgVHlwZSB7fTsKK2NsYXNzIFVpbnQzMlR5cGUgOiBwdWJsaWMgVHlwZSB7fTsK
KworfSB9IC8vIG5hbWVzcGFjZSBXR1NMOjpBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvVmFyaWFibGVRdWFsaWZpZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvVmFy
aWFibGVRdWFsaWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjYzYjkxYjg3NmE3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1Qv
VmFyaWFibGVRdWFsaWZpZXIuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBU1ROb2RlLmgiCisKK25hbWVzcGFjZSBXR1NMIHsgbmFtZXNw
YWNlIEFTVCB7CisKK2VudW0gY2xhc3MgU3RvcmFnZUNsYXNzIDogdWludDhfdCB7CisgICAgRnVu
Y3Rpb24sCisgICAgUHJpdmF0ZSwKKyAgICBXb3JrZ3JvdXAsCisgICAgVW5pZm9ybSwKKyAgICBT
dG9yYWdlCit9OworCitlbnVtIGNsYXNzIEFjY2Vzc01vZGUgOiB1aW50OF90IHsKKyAgICBSZWFk
LAorICAgIFdyaXRlLAorICAgIFJlYWRXcml0ZQorfTsKKworY2xhc3MgVmFyaWFibGVRdWFsaWZp
ZXIgOiBwdWJsaWMgQVNUTm9kZSB7CitwdWJsaWM6CisgICAgU3RvcmFnZUNsYXNzIHN0b3JhZ2VD
bGFzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUNsYXNzOyB9CisgICAgQWNjZXNzTW9kZSBh
Y2Nlc3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NNb2RlOyB9Citwcml2YXRlOgorICAg
IFN0b3JhZ2VDbGFzcyBtX3N0b3JhZ2VDbGFzczsKKyAgICBBY2Nlc3NNb2RlIG1fYWNjZXNzTW9k
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgV0dTTDo6QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViR1BVL1dHU0wvTGV4ZXIuY3BwIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFjMzM4YTgwYWYzOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9MZXhlci5jcHAKQEAgLTAsMCArMSw0NTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIK
KyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorVG9rZW4gTGV4ZXI8VD46OmxleCgpCit7CisgICAgc2tpcFdoaXRlc3Bh
Y2UoKTsKKworICAgIFNvdXJjZVBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24gPSBjdXJyZW50UG9z
aXRpb24oKTsKKyAgICBhdXRvIG1ha2VUb2tlbiA9IFsmXSAoVG9rZW5UeXBlIHR5cGUpIC0+IFRv
a2VuIHsKKyAgICAgICAgcmV0dXJuIHsgdHlwZSwgc3RhcnRpbmdQb3NpdGlvbiwgbV9vZmZzZXQg
LSBzdGFydGluZ1Bvc2l0aW9uLm1fb2Zmc2V0IH07CisgICAgfTsKKyAgICBhdXRvIG1ha2VMaXRl
cmFsVG9rZW4gPSBbJl0gKFRva2VuVHlwZSB0eXBlLCBkb3VibGUgbGl0ZXJhbFZhbHVlKSAtPiBU
b2tlbiB7CisgICAgICAgIHJldHVybiB7IHR5cGUsIHN0YXJ0aW5nUG9zaXRpb24sIG1fb2Zmc2V0
IC0gc3RhcnRpbmdQb3NpdGlvbi5tX29mZnNldCwgbGl0ZXJhbFZhbHVlIH07CisgICAgfTsKKyAg
ICBhdXRvIGZpbmlzaEludGVnZXJMaXRlcmFsID0gWyZdIChkb3VibGUgbGl0ZXJhbFZhbHVlKSAt
PiBUb2tlbiB7CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2knKSB7CisgICAgICAgICAgICBz
aGlmdCgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJ
bnRlZ2VyTGl0ZXJhbFNpZ25lZCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9jdXJyZW50ID09ICd1JykgeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25l
ZCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxU
b2tlbihUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgIH07CisK
KyAgICBpZiAoaXNBdEVuZE9mRmlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2Vu
VHlwZTo6RW5kT2ZGaWxlKTsKKworICAgIHN3aXRjaCAobV9jdXJyZW50KSB7CisgICAgICAgIGNh
c2UgJygnOgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW4oVG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGFyZW5S
aWdodCk7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFjZUxlZnQpOworICAgICAgICBjYXNl
ICd9JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2Vu
KFRva2VuVHlwZTo6QnJhY2VSaWdodCk7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ1snKSB7CisgICAgICAgICAg
ICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6QXR0ckxlZnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ10nOgorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJl
bnQgPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QXR0clJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgIHNoaWZ0KCk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6Q29sb24pOworICAgICAg
ICBjYXNlICcsJzoKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVRva2VuKFRva2VuVHlwZTo6Q29tbWEpOworICAgICAgICBjYXNlICc7JzoKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6U2VtaWNv
bG9uKTsKKyAgICAgICAgY2FzZSAnPSc6CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkVxdWFsKTsKKyAgICAgICAgY2FzZSAnPic6
CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tl
blR5cGU6OkdUKTsKKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBzaGlmdCgpOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkxUKTsKKyAgICAgICAgY2FzZSAn
Lic6IHsKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBtX29mZnNldDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBvc3RQZXJp
b2QgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgICAgICBpZiAoIXBvc3RQZXJpb2Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OlBlcmlvZCk7Cisg
ICAgICAgICAgICBkb3VibGUgbGl0ZXJhbFZhbHVlID0gcG9zdFBlcmlvZC52YWx1ZSgpOworICAg
ICAgICAgICAgbGl0ZXJhbFZhbHVlIC89IHBvdygxMCwgbV9vZmZzZXQgLSBvZmZzZXQpOworICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBleHBvbmVudCA9IHBhcnNlRGVjaW1hbEZs
b2F0RXhwb25lbnQoKTsKKyAgICAgICAgICAgIGlmIChleHBvbmVudCkKKyAgICAgICAgICAgICAg
ICBsaXRlcmFsVmFsdWUgKj0gcG93KDEwLCBleHBvbmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwg
bGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICc+JykgeworICAgICAgICAg
ICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5
cGU6OkFycm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICcwJzogeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIGRvdWJsZSBsaXRl
cmFsVmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAneCcpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGhleGFkZWNpbWFsIGZsb2F0aW5n
IHBvaW50IGxpdGVyYWxzCisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGhleE51bWJlcklzRW1wdHkgPSB0cnVlOworICAgICAgICAgICAgICAgIHdoaWxlIChp
c0hleGFkZWNpbWFsKG1fY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbFZh
bHVlICo9IDE2OworICAgICAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUgKz0gcmVhZEhleGFk
ZWNpbWFsKG1fY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
ICAgICAgICAgICAgIGhleE51bWJlcklzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGhleE51bWJlcklzRW1wdHkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2hJbnRlZ2VyTGl0ZXJhbChs
aXRlcmFsVmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIGlzRmxvYXRp
bmdQb2ludCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGlzRGVjaW1hbChtX2N1cnJlbnQpIHx8
IG1fY3VycmVudCA9PSAnLicgfHwgbV9jdXJyZW50ID09ICdlJyB8fCBtX2N1cnJlbnQgPT0gJ0Un
KSB7CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gaW50ZWdlclBhcnQg
PSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgaWYgKGludGVnZXJQYXJ0
KQorICAgICAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUgPSBpbnRlZ2VyUGFydC52YWx1ZSgp
OworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUgd2l0aCB0
aGUgWzEtOV0gY2FzZQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX29m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBl
cmlvZCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBv
c3RQZXJpb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsUGFy
dCA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9u
YWxQYXJ0IC89IHBvdygxMCwgbV9vZmZzZXQgLSBvZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbGl0ZXJhbFZhbHVlICs9IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFs
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNp
bWFsRmxvYXRFeHBvbmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSAq
PSBwb3coMTAsIGV4cG9uZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxW
YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgaW50
ZWdlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0YXJ0IHdpdGggMC4KKyAgICAgICAgICAgICAgICBp
ZiAoIWlzRmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bihUb2tlblR5cGU6OkludmFsaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1f
Y3VycmVudCA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJh
bCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0Zsb2F0
aW5nUG9pbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5U
eXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGZpbmlzaEludGVnZXJMaXRlcmFsKGxpdGVyYWxWYWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSAnMSc6CisgICAgICAgIGNhc2UgJzInOgorICAgICAgICBjYXNlICczJzoKKyAgICAg
ICAgY2FzZSAnNCc6CisgICAgICAgIGNhc2UgJzUnOgorICAgICAgICBjYXNlICc2JzoKKyAgICAg
ICAgY2FzZSAnNyc6CisgICAgICAgIGNhc2UgJzgnOgorICAgICAgICBjYXNlICc5JzogeworICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gdmFsdWUgPSBwYXJzZURlY2ltYWxJbnRl
Z2VyKCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlVG9rZW4oVG9rZW5UeXBlOjpJbnZhbGlkKTsKKyAgICAgICAgICAgIGRvdWJsZSBsaXRlcmFs
VmFsdWUgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgYm9vbCBpc0Zsb2F0aW5nUG9pbnQg
PSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAg
ICAgICAgaXNGbG9hdGluZ1BvaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fb2Zmc2V0OworICAgICAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBvc3RQZXJpb2QgPSBwYXJzZURlY2ltYWxJbnRl
Z2VyKCk7CisgICAgICAgICAgICAgICAgaWYgKHBvc3RQZXJpb2QpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIGZyYWN0aW9uYWxQYXJ0ID0gcG9zdFBlcmlvZC52YWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBmcmFjdGlvbmFsUGFydCAvPSBwb3coMTAsIG1fb2Zmc2V0IC0gb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICs9IGZyYWN0aW9uYWxQYXJ0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGQ6Om9w
dGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVudCgpKSB7
CisgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICo9IHBvdygxMCwgZXhwb25lbnQudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpE
ZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG1fY3VycmVudCA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICBzaGlmdCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1h
bEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghaXNGbG9hdGluZ1BvaW50KQorICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2hJbnRl
Z2VyTGl0ZXJhbChsaXRlcmFsVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFs
VG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZihpc0lkZW50aWZpZXJTdGFy
dChtX2N1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVCogc3RhcnRPZlRva2VuID0g
bV9jb2RlOworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUo
aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIobV9jdXJyZW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogYSB0cmllIHdvdWxkIGJlIG1v
cmUgZWZmaWNpZW50IGhlcmUsIGxvb2sgYXQgSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdl
bmVyYXRvci5weSBmb3IgYW4gZXhhbXBsZSBvZiBjb2RlIGF1dG9nZW5lcmF0aW9uIHRoYXQgcHJv
ZHVjZXMgc3VjaCBhIHRyaWUuCisgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB2aWV3IHtzdGFy
dE9mVG9rZW4sIG1fb2Zmc2V0IC0gc3RhcnRpbmdQb3NpdGlvbi5tX29mZnNldH07CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhhdCB0cnVlL2ZhbHNlL2YzMi91MzIv
aTMyL2Jvb2wgbmVlZCB0byBiZSB0aGVpciBvd24gdG9rZW5zLCB0aGV5IGNvdWxkIGp1c3QgYmUg
cmVndWxhciBpZGVudGlmaWVycy4KKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAic3RydWN0
IikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdv
cmRTdHJ1Y3QpOworICAgICAgICAgICAgICAgIGlmICh2aWV3ID09ICJmbiIpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkRm4pOworICAgICAg
ICAgICAgICAgIGlmICh2aWV3ID09ICJyZXR1cm4iKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFJldHVybik7CisgICAgICAgICAgICAgICAg
aWYgKHZpZXcgPT0gInZhciIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4o
VG9rZW5UeXBlOjpLZXl3b3JkVmFyKTsKKyAgICAgICAgICAgICAgICBpZiAodmlldyA9PSAiYXNt
IiB8fCB2aWV3ID09ICJiZjE2IiB8fCB2aWV3ID09ICJjb25zdCIgfHwgdmlldyA9PSAiZG8iIHx8
IHZpZXcgPT0gImVudW0iCisgICAgICAgICAgICAgICAgICAgIHx8IHZpZXcgPT0gImYxNiIgfHwg
dmlldyA9PSAiZjY0IiB8fCB2aWV3ID09ICJoYW5kbGUiIHx8IHZpZXcgPT0gImk4IiB8fCB2aWV3
ID09ICJpMTYiCisgICAgICAgICAgICAgICAgICAgIHx8IHZpZXcgPT0gImk2NCIgfHwgdmlldyA9
PSAibWF0IiB8fCB2aWV3ID09ICJwcmVtZXJnZSIgfHwgdmlldyA9PSAicmVnYXJkbGVzcyIKKyAg
ICAgICAgICAgICAgICAgICAgfHwgdmlldyA9PSAidHlwZWRlZiIgfHwgdmlldyA9PSAidTgiIHx8
IHZpZXcgPT0gInUxNiIgfHwgdmlldyA9PSAidTY0IiB8fCB2aWV3ID09ICJ1bmxlc3MiCisgICAg
ICAgICAgICAgICAgICAgIHx8IHZpZXcgPT0gInVzaW5nIiB8fCB2aWV3ID09ICJ2ZWMiIHx8IHZp
ZXcgPT0gInZvaWQiIHx8IHZpZXcgPT0gIndoaWxlIikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OlJlc2VydmVkV29yZCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgVG9rZW5UeXBlOjpJZGVudGlmaWVyLCBzdGFydGluZ1Bvc2l0aW9uLCBtX29mZnNl
dCAtIHN0YXJ0aW5nUG9zaXRpb24ubV9vZmZzZXQsIHZpZXcgfTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6
SW52YWxpZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBMZXhlcjxUPjo6c2hp
ZnQoKQoreworICAgIC8vIEF0IG9uZSBwb2ludCB0aW1pbmcgc2hvd2VkIHRoYXQgc2V0dGluZyBt
X2N1cnJlbnQgdG8gMCB1bmNvbmRpdGlvbmFsbHkgd2FzIGZhc3RlciB0aGFuIGFuIGlmLWVsc2Ug
c2VxdWVuY2UuCisgICAgbV9jdXJyZW50ID0gMDsKKyAgICArK21fY29kZTsKKyAgICArK21fb2Zm
c2V0OworICAgICsrbV9saW5lT2Zmc2V0OworICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9jb2Rl
RW5kKSkKKyAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitUIExleGVyPFQ+OjpwZWVrKHVuc2lnbmVkIGkpCit7CisgICAgaWYgKFVOTElLRUxZ
KG1fY29kZSArIGkgPj0gbV9jb2RlRW5kKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
ICoobV9jb2RlICsgaSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBMZXhlcjxU
Pjo6c2tpcFdoaXRlc3BhY2UoKQoreworICAgIHdoaWxlIChpc1doaXRlU3BhY2UobV9jdXJyZW50
KSkgeworICAgICAgICBpZiAobV9jdXJyZW50ID09ICdcbicpIHsKKyAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICArK21fbGluZTsKKyAgICAgICAgICAgIG1fbGluZU9mZnNldCA9IDA7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2hpZnQoKTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorU291cmNlUG9zaXRpb24gTGV4ZXI8VD46OmN1cnJlbnRQb3NpdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgbV9saW5lLCBtX2xpbmVPZmZzZXQsIG1fb2Zmc2V0
IH07Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9vbCBMZXhlcjxUPjo6aXNBdEVuZE9m
RmlsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fY29kZSA9PSBtX2NvZGVFbmQpIHsKKyAgICAgICAg
QVNTRVJUKG1fY3VycmVudCA9PSAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IEFTU0VSVChtX2NvZGUgPCBtX2NvZGVFbmQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBMZXhlcjxUPjo6cGFy
c2VEZWNpbWFsSW50ZWdlcigpCit7CisgICAgaWYgKCFpc0RlY2ltYWwobV9jdXJyZW50KSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIENoZWNrZWRVaW50NjQgdmFsdWUgPSAw
OworICAgIHdoaWxlIChpc0RlY2ltYWwobV9jdXJyZW50KSkgeworICAgICAgICB2YWx1ZSAqPSAx
MHVsbDsKKyAgICAgICAgdmFsdWUgKz0gcmVhZERlY2ltYWwobV9jdXJyZW50KTsKKyAgICAgICAg
c2hpZnQoKTsKKyAgICB9CisgICAgaWYgKHZhbHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB2YWx1ZS52YWx1ZSgpIH07Cit9CisK
Ky8vIFBhcnNlIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rZj8gaWYgaXQgaXMgcHJlc2VudCwg
YW5kIHJldHVybiB0aGUgZXhwb25lbnQKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RkOjpvcHRp
b25hbDxpbnQ2NF90PiBMZXhlcjxUPjo6cGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVudCgpCit7Cisg
ICAgVCBjaGFyMSA9IHBlZWsoMSk7CisgICAgVCBjaGFyMiA9IHBlZWsoMik7CisgICAgLy8gQ2hl
Y2sgZm9yIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rCisgICAgaWYgKG1fY3VycmVudCAhPSAn
ZScgJiYgbV9jdXJyZW50ICE9ICdFJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoY2hhcjEgPT0gJysnIHx8IGNoYXIxID09ICctJykgeworICAgICAgICBpZiAoIWlzRGVj
aW1hbChjaGFyMikpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0gZWxz
ZSBpZiAoIWlzRGVjaW1hbChjaGFyMSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgc2hpZnQoKTsKKworICAgIGJvb2wgbmVnYXRlRXhwb25lbnQgPSBmYWxzZTsKKyAgICBpZiAo
bV9jdXJyZW50ID09ICctJykgeworICAgICAgICBuZWdhdGVFeHBvbmVudCA9IHRydWU7CisgICAg
ICAgIHNoaWZ0KCk7CisgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJysnKQorICAgICAgICBz
aGlmdCgpOworCisgICAgc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBleHBvbmVudCA9IHBhcnNlRGVj
aW1hbEludGVnZXIoKTsKKyAgICBpZiAoIWV4cG9uZW50KQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIENoZWNrZWRJbnQ2NCBleHBvbmVudFZhbHVlID0gZXhwb25lbnQudmFsdWUo
KTsKKyAgICBpZiAobmVnYXRlRXhwb25lbnQpCisgICAgICAgIGV4cG9uZW50VmFsdWUgPSAtIGV4
cG9uZW50VmFsdWU7CisgICAgaWYgKGV4cG9uZW50VmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB7IGV4cG9uZW50VmFsdWUudmFs
dWUoKSB9OworfTsKKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxMQ2hh
cj46OmlzV2hpdGVTcGFjZShMQ2hhciBjaCkKK3sKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2Fz
ZSAnICc6CisgICAgY2FzZSAnXHQnOgorICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICdcdic6Cisg
ICAgY2FzZSAnXGYnOgorICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordGVtcGxhdGUgPD4K
K0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxMQ2hhcj46OmlzSWRlbnRpZmllclN0YXJ0KExDaGFy
IGNoKQoreworICAgIHJldHVybiAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdB
JyAmJiBjaCA8PSAnWicpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExl
eGVyPExDaGFyPjo6aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoTENoYXIgY2gpCit7CisgICAg
cmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICda
JykgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8IGNoID09ICdfJzsKK30KKwordGVtcGxh
dGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxMQ2hhcj46OmlzRGVjaW1hbChMQ2hhciBj
aCkKK3sKKyAgICByZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworfQorCit0ZW1wbGF0
ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPExDaGFyPjo6aXNIZXhhZGVjaW1hbChMQ2hh
ciBjaCkKK3sKKyAgICByZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8IChjaCA+PSAn
YScgJiYgY2ggPD0gJ2YnKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJyk7Cit9CisKK3RlbXBs
YXRlIDw+CitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IExleGVyPExDaGFyPjo6cmVhZERlY2ltYWwo
TENoYXIgY2gpCit7CisgICAgQVNTRVJUKGlzRGVjaW1hbChjaCkpOworICAgIHJldHVybiBjaCAt
ICcwJzsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgdWludDY0X3QgTGV4ZXI8TENo
YXI+OjpyZWFkSGV4YWRlY2ltYWwoTENoYXIgY2gpCit7CisgICAgQVNTRVJUKGlzSGV4YWRlY2lt
YWwoY2gpKTsKKyAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykKKyAgICAgICAgcmV0dXJu
IGNoIC0gJzAnOworICAgIGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKQorICAgICAgICByZXR1
cm4gY2ggLSAnYSc7CisgICAgQVNTRVJUKGNoID49ICdBJyAmJiBjaCA8PSAnRicpOworICAgIHJl
dHVybiBjaCAtICdBJzsKK30KKworCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExl
eGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKFVDaGFyIGNoKQoreworICAgIC8vIFdHU0wgZG9lcyBu
b3QgY3VycmVudGx5IHN1cHBvcnQgYW55IG5vbi1BU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMK
KyAgICByZXR1cm4gTGV4ZXI8TENoYXI+Ojppc1doaXRlU3BhY2Uoc3RhdGljX2Nhc3Q8TENoYXI+
KGNoKSk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VUNoYXI+
Ojppc0lkZW50aWZpZXJTdGFydChVQ2hhciBjaCkKK3sKKyAgICAvLyBXR1NMIGRvZXMgbm90IGN1
cnJlbnRseSBzdXBwb3J0IGFueSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBpZGVudGlmaWVycwor
ICAgIHJldHVybiBMZXhlcjxMQ2hhcj46OmlzSWRlbnRpZmllclN0YXJ0KHN0YXRpY19jYXN0PExD
aGFyPihjaCkpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFVD
aGFyPjo6aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoVUNoYXIgY2gpCit7CisgICAgLy8gV0dT
TCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4g
aWRlbnRpZmllcnMKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNo
YXJhY3RlcihzdGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZ
U19JTkxJTkUgYm9vbCBMZXhlcjxVQ2hhcj46OmlzRGVjaW1hbChVQ2hhciBjaCkKK3sKKyAgICBy
ZXR1cm4gTGV4ZXI8TENoYXI+Ojppc0RlY2ltYWwoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9
CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VUNoYXI+Ojppc0hleGFk
ZWNpbWFsKFVDaGFyIGNoKQoreworICAgIHJldHVybiBMZXhlcjxMQ2hhcj46OmlzSGV4YWRlY2lt
YWwoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5M
SU5FIHVpbnQ2NF90IExleGVyPFVDaGFyPjo6cmVhZERlY2ltYWwoVUNoYXIgY2gpCit7CisgICAg
cmV0dXJuIExleGVyPExDaGFyPjo6cmVhZERlY2ltYWwoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7
Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IExleGVyPFVDaGFyPjo6
cmVhZEhleGFkZWNpbWFsKFVDaGFyIGNoKQoreworICAgIHJldHVybiBMZXhlcjxMQ2hhcj46OnJl
YWRIZXhhZGVjaW1hbChzdGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgY2xh
c3MgTGV4ZXI8TENoYXI+OwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8VUNoYXI+OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9M
ZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjViMTM1NDY4
ZjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmgKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVG9rZW4u
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIExleGVyIHsKK3B1YmxpYzoKKyAgICBMZXhlcihjb25zdCBTdHJpbmcmIHdnc2wpCisg
ICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxULCBMQ2hhcj46OnZhbHVl
KSB7CisgICAgICAgICAgICBtX2NvZGUgPSB3Z3NsLmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAg
ICBtX2NvZGVFbmQgPSBtX2NvZGUgKyB3Z3NsLnNpemVJbkJ5dGVzKCk7CisgICAgICAgIH0gZWxz
ZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxULCBVQ2hhcj46OnZhbHVlKSB7CisgICAgICAg
ICAgICBtX2NvZGUgPSB3Z3NsLmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgQVNTRVJUKHdn
c2wuc2l6ZUluQnl0ZXMoKSAlIDIgPT0gMCk7CisgICAgICAgICAgICBtX2NvZGVFbmQgPSBtX2Nv
ZGUgKyB3Z3NsLnNpemVJbkJ5dGVzKCkgLyAyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9jdXJyZW50ID0gKG1f
Y29kZSAhPSBtX2NvZGVFbmQpID8gKm1fY29kZSA6IDA7CisgICAgfQorCisgICAgVG9rZW4gbGV4
KCk7CisKKyAgICAvLyBPbmx5IHB1YmxpYyBzbyB0aGF0IHRoZSBVQ2hhciB2ZXJzaW9uIG9mIHRo
ZSBMZXhlciBjYW4gZGVmZXIgdG8gdGhlIExDaGFyIHZlcnNpb24KKyAgICBzdGF0aWMgYm9vbCBp
c1doaXRlU3BhY2UoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyBib29sIGlzSWRlbnRpZmllclN0
YXJ0KFQgY2hhcmFjdGVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSWRlbnRpZmllckNoYXJh
Y3RlcihUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIGJvb2wgaXNEZWNpbWFsKFQgY2hhcmFjdGVy
KTsKKyAgICBzdGF0aWMgYm9vbCBpc0hleGFkZWNpbWFsKFQgY2hhcmFjdGVyKTsKKyAgICBzdGF0
aWMgdWludDY0X3QgcmVhZERlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyB1aW50NjRf
dCByZWFkSGV4YWRlY2ltYWwoVCBjaGFyYWN0ZXIpOworCitwcml2YXRlOgorICAgIHZvaWQgc2hp
ZnQoKTsKKyAgICBUIHBlZWsodW5zaWduZWQpOworICAgIHZvaWQgc2tpcFdoaXRlc3BhY2UoKTsK
KyAgICBTb3VyY2VQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKKyAgICBib29sIGlz
QXRFbmRPZkZpbGUoKSBjb25zdDsKKyAgICAvLyBSZWFkcyBbMC05XSsKKyAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgLy8gUGFyc2UgcGF0dGVy
biAoZXxFKShcK3wtKT9bMC05XStmPyBpZiBpdCBpcyBwcmVzZW50LCBhbmQgcmV0dXJuIHRoZSBl
eHBvbmVudAorICAgIHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4gcGFyc2VEZWNpbWFsRmxvYXRFeHBv
bmVudCgpOworCisgICAgVCBtX2N1cnJlbnQ7CisgICAgY29uc3QgVCogbV9jb2RlOworICAgIGNv
bnN0IFQqIG1fY29kZUVuZDsKKyAgICB1bnNpZ25lZCBtX2xpbmUgeyAwIH07CisgICAgdW5zaWdu
ZWQgbV9saW5lT2Zmc2V0IHsgMCB9OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgMCB9OworfTsK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjE1ZDk3OThjYjJhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9QYXJzZXIuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgTGV4ZXI+CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTaGFkZXI+IHBhcnNlKGNv
bnN0IFN0cmluZyYgd2dzbCkKK3sKKyAgICBMZXhlciBsZXhlcih3Z3NsKTsKKyAgICAodm9pZCkg
bGV4ZXI7CisKKyAgICByZXR1cm4geyB7IH0sIHsgfSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBX
R1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li44NTY2MTRiMWMzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvUGFy
c2VyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU2hhZGVyLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
TGV4ZXI+CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTaGFkZXI+IHBhcnNlKGNvbnN0IFN0cmluZyYg
d2dzbCk7CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9Tb3VyY2VTcGFuLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvU291cmNlU3Bhbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmIyNzc0OWMyZjg5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1NvdXJjZVNwYW4uaApAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXR1NMIHsKKworc3Ry
dWN0IFNvdXJjZVBvc2l0aW9uIHsKKyAgICB1bnNpZ25lZCBtX2xpbmU7CisgICAgdW5zaWduZWQg
bV9saW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKworc3RydWN0IFNvdXJj
ZVNwYW4geworICAgIHVuc2lnbmVkIG1fbGluZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVPZmZzZXQ7
CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7CisKKyAgICBT
b3VyY2VTcGFuKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVPZmZzZXQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IG1fbGluZShsaW5lKQorICAgICAgICAs
IG1fbGluZU9mZnNldChsaW5lT2Zmc2V0KQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgeworICAgIH0KK307CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9Ub2tlbi5oIGIvU291cmNlL1dlYkdQVS9XR1NML1Rva2Vu
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ZjRhZWUxYjg3ZDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvVG9rZW4uaApAQCAtMCwwICsx
LDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU291cmNlU3Bh
bi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdHU0wgeworCitlbnVtIGNsYXNzIFRva2VuVHlw
ZTogdWludDMyX3QgeworICAgIEludmFsaWQsCisgICAgRW5kT2ZGaWxlLAorCisgICAgSW50ZWdl
ckxpdGVyYWwsCisgICAgSW50ZWdlckxpdGVyYWxTaWduZWQsCisgICAgSW50ZWdlckxpdGVyYWxV
bnNpZ25lZCwKKyAgICBEZWNpbWFsRmxvYXRMaXRlcmFsLAorICAgIEhleEZsb2F0TGl0ZXJhbCwK
KworICAgIElkZW50aWZpZXIsCisKKyAgICBSZXNlcnZlZFdvcmQsCisgICAgS2V5d29yZFN0cnVj
dCwKKyAgICBLZXl3b3JkRm4sCisgICAgS2V5d29yZFJldHVybiwKKyAgICBLZXl3b3JkVmFyLAor
ICAgIC8vIEZJWE1FOiBhZGQgYWxsIHRoZSBvdGhlciBrZXl3b3JkczogZmlsZTovLy9Vc2Vycy9y
bW9yaXNzZXQvTXlHUFVXZWIvd2dzbC93Z3NsLmh0bWwja2V5d29yZC1zdW1tYXJ5CisgICAgLy8g
RklYTUU6IGluIHRoZSBzcGVjLCBpMzIvdTMyL2YzMiBhcmUga2V5d29yZHMsIGJ1dCBJIGFtIHVz
aW5nIGlkZW50aWZpZXJzIGZvciB0aGVtIGZvciBub3cuCisgICAgLy8gU2ltaWxhcmx5LCBpbiB0
aGUgc3BlYyB0cnVlIGFuZCBmYWxzZSBhcmUgc3BlY2lhbCBsaXRlcmFscyBhbmQgbm90IGlkZW50
aWZpZXJzLgorICAgIC8vIEkgZG9uJ3QgdGhpbmsgaXQgbWF0dGVycywgYnV0IEkgc2hvdWxkIHBy
b2JhYmx5IHNlbmQgYSBQUiB0byB1cGRhdGUgdGhlIHNwZWMgdG8gbWFrZSB0aGVtIGlkZW50cyBz
aW5jZSBpdCBpcyBzaW1wbGVyIGFuZCB0aGV5IGFyZSBvbmx5IHVzZWQgaW4gcGxhY2VzIHRoYXQg
aWRlbnRzIGFyZSBhbGxvd2VkLgorCisgICAgQXJyb3csCisgICAgQXR0ckxlZnQsCisgICAgQXR0
clJpZ2h0LAorICAgIEJyYWNlTGVmdCwKKyAgICBCcmFjZVJpZ2h0LAorICAgIENvbG9uLAorICAg
IENvbW1hLAorICAgIEVxdWFsLAorICAgIEdULAorICAgIExULAorICAgIFBlcmlvZCwKKyAgICBQ
YXJlbkxlZnQsCisgICAgUGFyZW5SaWdodCwKKyAgICBTZW1pY29sb24sCisgICAgLy8gRklYTUU6
IGFkZCBhbGwgdGhlIG90aGVyIHNwZWNpYWwgdG9rZW5zCit9OworCitzdHJ1Y3QgVG9rZW4gewor
ICAgIFRva2VuVHlwZSBtX3R5cGU7CisgICAgU291cmNlU3BhbiBtX3NwYW47CisgICAgdW5pb24g
eworICAgICAgICBkb3VibGUgbV9saXRlcmFsVmFsdWU7CisgICAgICAgIFN0cmluZ1ZpZXcgbV9p
ZGVudDsKKyAgICB9OworCisgICAgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJjZVBvc2l0aW9u
IHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAg
ICAgICwgbV9zcGFuKHBvc2l0aW9uLm1fbGluZSwgcG9zaXRpb24ubV9saW5lT2Zmc2V0LCBwb3Np
dGlvbi5tX29mZnNldCwgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9r
ZW5UeXBlOjpJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJ
bnRlZ2VyTGl0ZXJhbCk7CisgICAgICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SW50ZWdl
ckxpdGVyYWxTaWduZWQpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkludGVn
ZXJMaXRlcmFsVW5zaWduZWQpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkRl
Y2ltYWxGbG9hdExpdGVyYWwpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6Okhl
eEZsb2F0TGl0ZXJhbCk7CisgICAgfQorCisgICAgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJj
ZVBvc2l0aW9uIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGRvdWJsZSBsaXRlcmFsVmFsdWUp
CisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9zcGFuKHBvc2l0aW9uLm1fbGlu
ZSwgcG9zaXRpb24ubV9saW5lT2Zmc2V0LCBwb3NpdGlvbi5tX29mZnNldCwgbGVuZ3RoKQorICAg
ICAgICAsIG1fbGl0ZXJhbFZhbHVlKGxpdGVyYWxWYWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCh0eXBlID09IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwKKyAgICAgICAgICAgIHx8IHR5cGUg
PT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZAorICAgICAgICAgICAgfHwgdHlwZSA9
PSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsVW5zaWduZWQKKyAgICAgICAgICAgIHx8IHR5cGUg
PT0gVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsCisgICAgICAgICAgICB8fCB0eXBlID09
IFRva2VuVHlwZTo6SGV4RmxvYXRMaXRlcmFsKTsKKyAgICB9CisKKyAgICBUb2tlbihUb2tlblR5
cGUgdHlwZSwgU291cmNlUG9zaXRpb24gcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5n
VmlldyBpZGVudCkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3NwYW4ocG9z
aXRpb24ubV9saW5lLCBwb3NpdGlvbi5tX2xpbmVPZmZzZXQsIHBvc2l0aW9uLm1fb2Zmc2V0LCBs
ZW5ndGgpCisgICAgICAgICwgbV9pZGVudChpZGVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
eXBlID09IFRva2VuVHlwZTo6SWRlbnRpZmllcik7CisgICAgfQorCisgICAgVG9rZW4oVG9rZW4m
JiBvdGhlcikKKyAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQorICAgICAgICAsIG1fc3Bh
bihvdGhlci5tX3NwYW4pCisgICAgeworICAgICAgICBzd2l0Y2gob3RoZXIubV90eXBlKSB7Cisg
ICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJZGVudGlmaWVyOgorICAgICAgICAgICAgbV9pZGVudCA9
IG90aGVyLm1faWRlbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUb2tlblR5
cGU6OkludGVnZXJMaXRlcmFsOgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVy
YWxTaWduZWQ6CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVk
OgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbDoKKyAgICAgICAg
Y2FzZSBUb2tlblR5cGU6OkhleEZsb2F0TGl0ZXJhbDoKKyAgICAgICAgICAgIG1fbGl0ZXJhbFZh
bHVlID0gb3RoZXIubV9saXRlcmFsVmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgflRv
a2VuKCkKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgPT0gVG9rZW5UeXBlOjpJZGVudGlmaWVy
KQorICAgICAgICAgICAgKCZtX2lkZW50KS0+flN0cmluZ1ZpZXcoKTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5j
cHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKaW5kZXggNzdjOGE2MTgzM2FlLi43OTRi
NGIzNjcyMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAorKysgYi9T
b3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKQEAgLTI1LDggKzI1LDcgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldHU0wuaCIKLQotI2luY2x1ZGUgIkFTVC5oIgorI2luY2x1
ZGUgIlNoYWRlci5oIgogCiBuYW1lc3BhY2UgV0dTTCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9XR1NMLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oCmluZGV4IGIwNmQx
MWI1NmYxYy4uMTg1NTQ2ZGFiYmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dT
TC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmgKQEAgLTU0LDEyICs1NCwxNCBAQCBz
dHJ1Y3QgQ29tcGlsYXRpb25NZXNzYWdlIHsKICAgICB1aW50NjRfdCBsZW5ndGg7CiB9OwogCi1j
bGFzcyBBU1Q7CituYW1lc3BhY2UgQVNUIHsKK2NsYXNzIFNoYWRlcjsKK30KIAogc3RydWN0IFN1
Y2Nlc3NmdWxDaGVjayB7CiAgICAgflN1Y2Nlc3NmdWxDaGVjaygpOwogICAgIFZlY3RvcjxDb21w
aWxhdGlvbk1lc3NhZ2U+IHdhcm5pbmdzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q+IGFzdDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTaGFkZXI+IGFzdDsKIH07CiAKIHN0cnVjdCBGYWls
ZWRDaGVjayB7CkBAIC0yMDksNyArMjExLDcgQEAgc3RydWN0IFByZXBhcmVSZXN1bHQgewogCiAv
LyBUaGVzZSBhcmUgbm90IGFsbG93ZWQgdG8gZmFpbC4KIC8vIEFsbCBmYWlsdXJlcyBtdXN0IGhh
dmUgYWxyZWFkeSBiZWVuIGNhdWdodCBpbiBjaGVjaygpLgotUHJlcGFyZVJlc3VsdCBwcmVwYXJl
KGNvbnN0IEFTVCYsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5l
TGF5b3V0Pj4mKTsKLVByZXBhcmVSZXN1bHQgcHJlcGFyZShjb25zdCBBU1QmLCBjb25zdCBTdHJp
bmcmIGVudHJ5UG9pbnROYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFBpcGVsaW5lTGF5b3V0PiYp
OworUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVDo6U2hhZGVyJiwgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8UGlwZWxpbmVMYXlvdXQ+PiYpOworUHJlcGFyZVJlc3Vs
dCBwcmVwYXJlKGNvbnN0IEFTVDo6U2hhZGVyJiwgY29uc3QgU3RyaW5nJiBlbnRyeVBvaW50TmFt
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxQaXBlbGluZUxheW91dD4mKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhl
clRlc3RzLm1tIGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTE1NTU3N2U0ZGJlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRl
c3RzLm1tCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkxleGVyLmgiCisj
aW1wb3J0IDxYQ1Rlc3QvWENUZXN0Lmg+CisKK0BpbnRlcmZhY2UgV0dTTExleGVyVGVzdHMgOiBY
Q1Rlc3RDYXNlCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdHU0xMZXhlclRlc3RzCisKKy0g
KHZvaWQpdGVzdExleGVyT25TaW5nbGVUb2tlbnMgeworICAgIGF1dG8gY2hlY2tTaW5nbGVUb2tl
biA9IFtdIChjb25zdCBjaGFyKiBzdHJpbmcsIFdHU0w6OlRva2VuVHlwZSB0eXBlKSB7CisgICAg
ICAgIFdHU0w6OkxleGVyPExDaGFyPiBsZXhlcihzdHJpbmcpOworICAgICAgICBXR1NMOjpUb2tl
biByZXN1bHQgPSBsZXhlci5sZXgoKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1f
dHlwZSwgdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBhdXRvIGNo
ZWNrU2luZ2xlTGl0ZXJhbCA9IFsmXSAoY29uc3QgY2hhciogc3RyaW5nLCBXR1NMOjpUb2tlblR5
cGUgdHlwZSwgZG91YmxlIGxpdGVyYWxWYWx1ZSkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1
bHQgPSBjaGVja1NpbmdsZVRva2VuKHN0cmluZywgdHlwZSk7CisgICAgICAgIFhDVEFzc2VydEVx
dWFsKHJlc3VsdC5tX2xpdGVyYWxWYWx1ZSwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9OworCisgICAg
Y2hlY2tTaW5nbGVUb2tlbigiIiwgV0dTTDo6VG9rZW5UeXBlOjpFbmRPZkZpbGUpOworICAgIGNo
ZWNrU2luZ2xlTGl0ZXJhbCgiMSIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDEp
OworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMCIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxp
dGVyYWwsIDApOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMTQyIiwgV0dTTDo6VG9rZW5UeXBl
OjpJbnRlZ2VyTGl0ZXJhbCwgMTQyKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjEuMSIsIFdH
U0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMS4xKTsKKyAgICBjaGVja1Npbmds
ZUxpdGVyYWwoIjAuNCIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC40
KTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjAxMjMuNDU2IiwgV0dTTDo6VG9rZW5UeXBlOjpE
ZWNpbWFsRmxvYXRMaXRlcmFsLCAwMTIzLjQ1Nik7CisgICAgY2hlY2tTaW5nbGVUb2tlbigiMDEy
MyIsIFdHU0w6OlRva2VuVHlwZTo6SW52YWxpZCk7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCIw
MTIzLiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMTIzKTsKKyAgICBj
aGVja1NpbmdsZUxpdGVyYWwoIi40NTYiLCBXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExp
dGVyYWwsIDAuNDU2KTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjQyZiIsIFdHU0w6OlRva2Vu
VHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgNDIpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgi
NDJlMGYiLCBXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDQyKTsKKyAgICBj
aGVja1NpbmdsZUxpdGVyYWwoIjA0MmUwZiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgNDIpOworICAgIGNoZWNrU2luZ2xlVG9rZW4oIjA0MmYiLCBXR1NMOjpUb2tlblR5
cGU6OkludmFsaWQpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJlLTMiLCBXR1NMOjpUb2tl
blR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDQyZS0zKTsKKyAgICBjaGVja1NpbmdsZUxpdGVy
YWwoIjQyZS1hIiwgV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgNDIpOworfQorCist
ICh2b2lkKSB0ZXN0TGV4ZXJPbkNvbXB1dGVTaGFkZXIgeworICAgIFdHU0w6OkxleGVyPExDaGFy
PiBsZXhlcigiW1tibG9ja11dIHN0cnVjdCBCIHtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBhOiBpMzI7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIltbZ3JvdXAoMCksIGJpbmRpbmcoMCldXVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IHg6IEI7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltb
c3RhZ2UoY29tcHV0ZSldXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm4gbWFp
bigpIHtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LmEgPSA0MjtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXIgPSAwOworICAgIGF1dG8gY2hlY2tOZXh0VG9rZW4gPSBbJl0gKFdHU0w6OlRva2VuVHlw
ZSB0eXBlKSB7CisgICAgICAgIFdHU0w6OlRva2VuIHJlc3VsdCA9IGxleGVyLmxleCgpOworICAg
ICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV90eXBlLCB0eXBlKTsKKyAgICAgICAgWENUQXNz
ZXJ0RXF1YWwocmVzdWx0Lm1fc3Bhbi5tX2xpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisgICAgYXV0byBjaGVja05leHRUb2tlbklzSWRlbnRpZmllciA9
IFsmXSAoY29uc3QgY2hhciogaWRlbnQpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0g
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpJZGVudGlmaWVyKTsKKyAgICAgICAgWENU
QXNzZXJ0RXF1YWwocmVzdWx0Lm1faWRlbnQsIGlkZW50KTsKKyAgICB9OworICAgIGF1dG8gY2hl
Y2tOZXh0VG9rZW5Jc0xpdGVyYWwgPSBbJl0gKFdHU0w6OlRva2VuVHlwZSB0eXBlLCBkb3VibGUg
bGl0ZXJhbFZhbHVlKSB7CisgICAgICAgIFdHU0w6OlRva2VuIHJlc3VsdCA9IGNoZWNrTmV4dFRv
a2VuKHR5cGUpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV9saXRlcmFsVmFsdWUs
IGxpdGVyYWxWYWx1ZSk7CisgICAgfTsKKworICAgIC8vIFtbYmxvY2tdXSBzdHJ1Y3QgQiB7Cisg
ICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyTGVmdCk7CisgICAgY2hlY2tO
ZXh0VG9rZW5Jc0lkZW50aWZpZXIoImJsb2NrIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpBdHRyUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6S2V5d29yZFN0cnVjdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIkIiKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlTGVmdCk7CisKKyAgICAv
LyBhOiBpMzI7CisgICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlm
aWVyKCJhIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb2xvbik7Cisg
ICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImkzMiIpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6U2VtaWNvbG9uKTsKKworICAgIC8vIH0KKyAgICArK2xpbmVOdW1i
ZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZVJpZ2h0KTsKKwor
ICAgIC8vIFtbZ3JvdXAoMCksIGJpbmRpbmcoMCldXQorICAgIGxpbmVOdW1iZXIgKz0gMjsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJMZWZ0KTsKKyAgICBjaGVja05l
eHRUb2tlbklzSWRlbnRpZmllcigiZ3JvdXAiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6
VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgMCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5
cGU6OkNvbW1hKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiYmluZGluZyIpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVj
a05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0clJpZ2h0KTsKKworICAgIC8vIHZhcjxz
dG9yYWdlLCByZWFkX3dyaXRlPiB4OiBCOworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRWYXIpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6TFQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJz
dG9yYWdlIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb21tYSk7Cisg
ICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInJlYWRfd3JpdGUiKTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkdUKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRp
ZmllcigieCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6Q29sb24pOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJCIik7CisgICAgY2hlY2tOZXh0VG9rZW4o
V0dTTDo6VG9rZW5UeXBlOjpTZW1pY29sb24pOworCisgICAgLy8gW1tzdGFnZShjb21wdXRlKV1d
CisgICAgbGluZU51bWJlciArPSAyOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6QXR0ckxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJzdGFnZSIpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVj
a05leHRUb2tlbklzSWRlbnRpZmllcigiY29tcHV0ZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdH
U0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpBdHRyUmlnaHQpOworCisgICAgLy8gZm4gbWFpbigpIHsKKyAgICArK2xpbmVOdW1i
ZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkRm4pOworICAg
IGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJtYWluIik7CisgICAgY2hlY2tOZXh0VG9rZW4o
V0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBl
OjpCcmFjZUxlZnQpOworCisgICAgLy8geC5hID0gNDI7CisgICAgKytsaW5lTnVtYmVyOworICAg
IGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dT
TDo6VG9rZW5UeXBlOjpQZXJpb2QpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJh
Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpFcXVhbCk7CisgICAgY2hl
Y2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgNDIp
OworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6U2VtaWNvbG9uKTsKKworICAg
IC8vIH0KKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpCcmFjZVJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkVu
ZE9mRmlsZSk7Cit9CisKKy0gKHZvaWQpIHRlc3RMZXhlck9uR3JhcGhpY3NTaGFkZXIgeworICAg
IFdHU0w6OkxleGVyPExDaGFyPiBsZXhlcigiW1tzdGFnZSh2ZXJ0ZXgpXV1cbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImZuIHZlcnRleFNoYWRlcihbW2xvY2F0aW9uKDApXV0geDog
dmVjNDxmMzI+KSAtPiBbW2J1aWx0aW4ocG9zaXRpb24pXV0gdmVjNDxmMzI+IHtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4geDtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW1tzdGFnZShmcmFnbWVudCldXVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm4gZnJhZ21lbnRTaGFkZXIoKSAtPiBbW2xvY2F0
aW9uKDApXV0gdmVjNDxmMzI+IHtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdmVjNDxmMzI+KDAuNCwgMC40LCAwLjgsIDEuMCk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gMDsKKyAg
ICBhdXRvIGNoZWNrTmV4dFRva2VuID0gWyZdIChXR1NMOjpUb2tlblR5cGUgdHlwZSkgeworICAg
ICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBsZXhlci5sZXgoKTsKKyAgICAgICAgWENUQXNzZXJ0
RXF1YWwocmVzdWx0Lm1fdHlwZSwgdHlwZSk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3Vs
dC5tX3NwYW4ubV9saW5lLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworICAgIGF1dG8gY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIgPSBbJl0gKGNvbnN0IGNo
YXIqIGlkZW50KSB7CisgICAgICAgIFdHU0w6OlRva2VuIHJlc3VsdCA9IGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6SWRlbnRpZmllcik7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJl
c3VsdC5tX2lkZW50LCBpZGVudCk7CisgICAgfTsKKyAgICBhdXRvIGNoZWNrTmV4dFRva2VuSXNM
aXRlcmFsID0gWyZdIChXR1NMOjpUb2tlblR5cGUgdHlwZSwgZG91YmxlIGxpdGVyYWxWYWx1ZSkg
eworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBjaGVja05leHRUb2tlbih0eXBlKTsKKyAg
ICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fbGl0ZXJhbFZhbHVlLCBsaXRlcmFsVmFsdWUp
OworICAgIH07CisKKyAgICAvLyBbW3N0YWdlKHZlcnRleCldXQorICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6QXR0ckxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlm
aWVyKCJzdGFnZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5M
ZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigidmVydGV4Iik7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJSaWdodCk7CisKKyAgICArK2xpbmVOdW1iZXI7Cisg
ICAgLy8gZm4gdmVydGV4U2hhZGVyKFtbbG9jYXRpb24oMCldXSB4OiB2ZWM0PGYzMj4pIC0+IFtb
YnVpbHRpbihwb3NpdGlvbildXSB2ZWM0PGYzMj4geworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6S2V5d29yZEZuKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigi
dmVydGV4U2hhZGVyIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJl
bkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0ckxlZnQpOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJsb2NhdGlvbiIpOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklz
TGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6QXR0clJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRp
ZmllcigieCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6Q29sb24pOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIo
ImYzMiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBcnJvdyk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpBdHRyTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImJ1
aWx0aW4iKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7
CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInBvc2l0aW9uIik7CisgICAgY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OkF0dHJSaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50
aWZpZXIoInZlYzQiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkxUKTsK
KyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiZjMyIik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpHVCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpCcmFjZUxlZnQpOworCisgICAgLy8gcmV0dXJuIHg7CisgICAgKytsaW5lTnVtYmVyOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZFJldHVybik7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIngiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyB9CisgICAgKytsaW5lTnVtYmVyOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VSaWdodCk7CisKKyAgICAv
LyBbW3N0YWdlKGZyYWdtZW50KV1dCisgICAgbGluZU51bWJlciArPSAyOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0ckxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJ
ZGVudGlmaWVyKCJzdGFnZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6
UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiZnJhZ21lbnQiKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0clJpZ2h0KTsKKworICAgIC8vIGZuIGZy
YWdtZW50U2hhZGVyKCkgLT4gW1tsb2NhdGlvbigwKV1dIHZlYzQ8ZjMyPiB7CisgICAgKytsaW5l
TnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZEZuKTsK
KyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiZnJhZ21lbnRTaGFkZXIiKTsKKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkFycm93KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5
cGU6OkF0dHJMZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigibG9jYXRpb24i
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwg
MCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJSaWdodCk7CisgICAgY2hlY2tO
ZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlYzQiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiZjMyIik7Cisg
ICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpHVCk7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZUxlZnQpOworCisgICAgLy8gcmV0dXJuIHZlYzQ8ZjMy
PigwLjQsIDAuNCwgMC44LCAxLjApOworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRSZXR1cm4pOworICAgIGNoZWNrTmV4dFRva2Vu
SXNJZGVudGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBl
OjpMVCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImYzMiIpOworICAgIGNoZWNr
TmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NM
OjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDAuNCk7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpDb21tYSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwo
V0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCAwLjQpOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6Q29tbWEpOworICAgIGNoZWNrTmV4dFRva2VuSXNMaXRl
cmFsKFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC44KTsKKyAgICBjaGVj
a05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbW1hKTsKKyAgICBjaGVja05leHRUb2tlbklz
TGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDEuMCk7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyB9CisgICAgKyts
aW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VSaWdo
dCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpFbmRPZkZpbGUpOworfQor
CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRU
ZXN0cy5tbSBiL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMVW5pdFRlc3RzLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzc0YmFkNjMzOTQuLjAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDxYQ1Rlc3QvWENUZXN0Lmg+Ci0jaW1wb3J0IDx2ZWN0b3I+
Ci0jaW1wb3J0IDx3dGYvRGF0YUxvZy5oPgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1AaW50
ZXJmYWNlIFdHU0xVbml0VGVzdHMgOiBYQ1Rlc3RDYXNlCi0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdHU0xVbml0VGVzdHMKLQotLSAodm9pZCl0ZXN0RXhhbXBsZSB7Ci0gICAgZGF0YUxvZygi
YXNkZlxuIik7Ci0gICAgVmVjdG9yPGludD4geCB7IDIsIDMsIH07Ci0gICAgVmVjdG9yPGludD4g
eTsKLSAgICB5LmFwcGVuZCgyKTsKLSAgICB5LmFwcGVuZCgzKTsKLSAgICBYQ1RBc3NlcnRFcXVh
bCh4LCB5KTsKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggODU3MjMyYmIxOWE4Li5lZjUzOTZiY2YwYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNyw3ICs3
LDcgQEAKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwot
CQkxQzAyM0QzRjI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDIzRDNFMjc0NDkwNzAwMDFE
QjczNCAvKiBXR1NMVW5pdFRlc3RzLm1tICovOyB9OworCQkxQzAyM0QzRjI3NDQ5MDcwMDAxREI3
MzQgLyogV0dTTExleGVyVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMu
bW0gKi87IH07CiAJCTFDMDIzRDQwMjc0NDkwNzAwMDFEQjczNCAvKiBsaWJ3Z3NsLmEgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdGMjI3MTZC
MkNDMDBBNTI1NEQgLyogbGlid2dzbC5hICovOyB9OwogCQkxQzAyM0Q0QjI3NDQ5NUI5MDAxREI3
MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwMjNENEEyNzQ0OTVCOTAwMURCNzM0IC8qIEphdmFT
Y3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJMUMyQ0VERUUyNzFFOEE3MzAwRURDMTZGIC8q
IE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDMkNFREVEMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRhbC5mcmFtZXdvcmsgKi87
IH07CkBAIC00MSw2ICs0MSwyMCBAQAogCQkxQ0VCRDdGODI3MTZCMzQ0MDBBNTI1NEQgLyogV0dT
TC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ3
RjcyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQdWJsaWMsICk7IH07IH07CiAJCTFDRUJEODAzMjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEODAy
MjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNwcCAqLzsgfTsKIAkJMUNFQkQ4MjYyNzE2Q0FDQzAw
QTUyNTREIC8qIGxpYndnc2wuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDRUJEN0YyMjcxNkIyQ0MwMEE1MjU0RCAvKiBsaWJ3Z3NsLmEgKi87IH07
CisJCTMzNTJDRkFGMjc1NThCQkEwMDQyOTgzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MkNGQUUyNzU1OEJCQTAwNDI5ODM5IC8q
IFRva2VuLmggKi87IH07CisJCTMzNzE2QTVCMjc0NTdERTYwMEEzOTUyMiAvKiBTaGFkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzNzE2QTVBMjc0
NTdERTYwMEEzOTUyMiAvKiBTaGFkZXIuaCAqLzsgfTsKKwkJMzM4Mjk1QUMyNzNERTM0QjAwMUQ3
NDcyIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMzODI5NUFCMjczREUzNEIwMDFENzQ3MiAvKiBMZXhlci5jcHAgKi87IH07CisJCTMz
OTBBMTJEMjc0NDg2MzUwMDQwMzQ5QSAvKiBTb3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzkwQTEyQzI3NDQ4NjM1MDA0MDM0OUEgLyog
U291cmNlU3Bhbi5oICovOyB9OworCQkzMzkwQTEzMDI3NDRBNDk2MDA0MDM0OUEgLyogQVNUTm9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5MEEx
MkYyNzQ0QTQ5NjAwNDAzNDlBIC8qIEFTVE5vZGUuaCAqLzsgfTsKKwkJMzM5MEExMzIyNzQ0QTUw
MzAwNDAzNDlBIC8qIEdsb2JhbERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5MEExMzEyNzQ0QTUwMzAwNDAzNDlBIC8qIEdsb2JhbERp
cmVjdGl2ZS5oICovOyB9OworCQkzMzkwQTEzNDI3NDRBNUI3MDA0MDM0OUEgLyogR2xvYmFsRGVj
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5MEEx
MzMyNzQ0QTVCNzAwNDAzNDlBIC8qIEdsb2JhbERlY2wuaCAqLzsgfTsKKwkJMzM5MEExMzYyNzQ0
QTZDMTAwNDAzNDlBIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzM5MEExMzUyNzQ0QTZDMTAwNDAzNDlBIC8qIEF0dHJpYnV0ZS5o
ICovOyB9OworCQkzMzkwQTEzODI3NDRBNzJDMDA0MDM0OUEgLyogVmFyaWFibGVRdWFsaWZpZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTM3
Mjc0NEE3MkMwMDQwMzQ5QSAvKiBWYXJpYWJsZVF1YWxpZmllci5oICovOyB9OworCQkzMzkwQTEz
QTI3NDRBNzZGMDA0MDM0OUEgLyogVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzM5MEExMzkyNzQ0QTc2RjAwNDAzNDlBIC8qIFR5cGUuaCAqLzsg
fTsKKwkJMzM5MEExM0MyNzQ0QTdEODAwNDAzNDlBIC8qIEV4cHJlc3Npb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTNCMjc0NEE3RDgwMDQw
MzQ5QSAvKiBFeHByZXNzaW9uLmggKi87IH07CisJCTMzOTBBMTNFMjc0NEE4NTcwMDQwMzQ5QSAv
KiBTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOTBBMTNEMjc0NEE4NTcwMDQwMzQ5QSAvKiBTdGF0ZW1lbnQuaCAqLzsgfTsKKwkJMzM5
MEExNDAyNzQ0QTk5MDAwNDAzNDlBIC8qIFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5MEExM0YyNzQ0QTk5MDAwNDAzNDlBIC8qIFBhcnNl
ci5oICovOyB9OworCQkzMzkwQTE0MjI3NDRBOUI3MDA0MDM0OUEgLyogUGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTBBMTQxMjc0NEE5
QjcwMDQwMzQ5QSAvKiBQYXJzZXIuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC02
Miw3ICs3Niw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkx
QzAyM0QzQzI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy54Y3Rlc3QgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdHU0xVbml0VGVzdHMueGN0ZXN0OyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQg
LyogV0dTTFVuaXRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xVbml0VGVzdHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMDIzRDNFMjc0NDkwNzAwMDFEQjcz
NCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xMZXhlclRl
c3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0NzI3NDQ5MTZEMDAx
REI3MzQgLyogV0dTTFVuaXRUZXN0cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXR1NMVW5pdFRl
c3RzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0QTI3NDQ5
NUI5MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGgg
PSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTFDMkNFREVEMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRhbC5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IE1ldGFsLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvTWV0YWwuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKQEAgLTEy
Niw3ICsxNDAsNiBAQAogCQkxQ0VCRDgwMTI3MTZCOUFCMDBBNTI1NEQgLyogU0RLVmFyaWFudC54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXR1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNFQkQ4MDQyNzE2QkZBQjAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25m
aWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNFQkQ4MDcyNzE2QzJDMDAwQTUy
NTREIC8qIEFTVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNFQkQ4MEEyNzE2QzM2QzAwQTUyNTREIC8qIGNvbmZpZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEIyNzE2
QzM3OTAwQTUyNTREIC8qIEV4cG9ydE1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHBvcnRNYWNy
b3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQkQ4MEQyNzE2QzNEODAwQTUy
NTREIC8qIFNoYWRlck1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNb2R1bGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNSw2ICsxNDgsMjEgQEAKIAkJMUNFQkQ4MkIy
NzE2Q0FGQjAwQTUyNTREIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBu
YW1lID0gQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9
OwogCQkxQ0VCRDgyRDI3MTZDQjE2MDBBNTI1NEQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7
IH07CiAJCTFDRUJEODMwMjcxNkNCMzgwMEE1MjU0RCAvKiBsaWJpY3Vjb3JlLnRiZCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vjb2RlLnRl
eHQtYmFzZWQtZHlsaWItZGVmaW5pdGlvbiI7IG5hbWUgPSBsaWJpY3Vjb3JlLnRiZDsgcGF0aCA9
IHVzci9saWIvbGliaWN1Y29yZS50YmQ7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQkzMzUy
Q0ZBRTI3NTU4QkJBMDA0Mjk4MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM3MTZBNUEyNzQ1N0RFNjAwQTM5NTIyIC8q
IFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4Mjk1QTgyNzNERDkyQzAwMUQ3NDcyIC8qIExl
eGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMzODI5NUFCMjczREUzNEIwMDFENzQ3MiAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBBMTJDMjc0
NDg2MzUwMDQwMzQ5QSAvKiBTb3VyY2VTcGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVNwYW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExMkYyNzQ0QTQ5NjAwNDAzNDlB
IC8qIEFTVE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMzkwQTEzMTI3NDRBNTAzMDA0MDM0OUEgLyogR2xvYmFsRGlyZWN0aXZl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbERpcmVjdGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMzkwQTEzMzI3NDRBNUI3MDA0MDM0OUEgLyogR2xvYmFsRGVjbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHbG9iYWxEZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMz
OTBBMTM1Mjc0NEE2QzEwMDQwMzQ5QSAvKiBBdHRyaWJ1dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0
cmlidXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTBBMTM3Mjc0NEE3MkMw
MDQwMzQ5QSAvKiBWYXJpYWJsZVF1YWxpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVF1
YWxpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzkwQTEzOTI3NDRBNzZG
MDA0MDM0OUEgLyogVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMzOTBBMTNCMjc0NEE3RDgwMDQwMzQ5QSAvKiBFeHByZXNzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzM5MEExM0QyNzQ0QTg1NzAwNDAzNDlBIC8qIFN0YXRlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExM0YyNzQ0
QTk5MDAwNDAzNDlBIC8qIFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5MEExNDEyNzQ0QTlCNzAwNDAzNDlBIC8qIFBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0xNzAsNyArMTk4LDcgQEAKIAkJ
MUMwMjNEM0QyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTFDMDIzRDNFMjc0NDkwNzAwMDFEQjcz
NCAvKiBXR1NMVW5pdFRlc3RzLm1tICovLAorCQkJCTFDMDIzRDNFMjc0NDkwNzAwMDFEQjczNCAv
KiBXR1NMTGV4ZXJUZXN0cy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gV0dTTFVuaXRUZXN0czsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNTksOCArMjg3LDE0IEBACiAJCTFDRUJE
N0Y2MjcxNkIzMzEwMEE1MjU0RCAvKiBXR1NMICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkxQ0VCRDgwNzI3MTZDMkMwMDBBNTI1NEQgLyogQVNULmggKi8s
CisJCQkJMzM5MEExMkUyNzQ0QTNFMTAwNDAzNDlBIC8qIEFTVCAqLywKIAkJCQkxQ0VCRDgwNDI3
MTZCRkFCMDBBNTI1NEQgLyogY29uZmlnLmggKi8sCisJCQkJMzM4Mjk1QTgyNzNERDkyQzAwMUQ3
NDcyIC8qIExleGVyLmggKi8sCisJCQkJMzM4Mjk1QUIyNzNERTM0QjAwMUQ3NDcyIC8qIExleGVy
LmNwcCAqLywKKwkJCQkzMzkwQTEzRjI3NDRBOTkwMDA0MDM0OUEgLyogUGFyc2VyLmggKi8sCisJ
CQkJMzM5MEExNDEyNzQ0QTlCNzAwNDAzNDlBIC8qIFBhcnNlci5jcHAgKi8sCisJCQkJMzM5MEEx
MkMyNzQ0ODYzNTAwNDAzNDlBIC8qIFNvdXJjZVNwYW4uaCAqLywKKwkJCQkzMzUyQ0ZBRTI3NTU4
QkJBMDA0Mjk4MzkgLyogVG9rZW4uaCAqLywKIAkJCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQg
LyogV0dTTC5jcHAgKi8sCiAJCQkJMUNFQkQ3RjcyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCAq
LywKIAkJCSk7CkBAIC0yOTUsNiArMzI5LDIyIEBACiAJCQluYW1lID0gRnJhbWV3b3JrczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTMzOTBBMTJFMjc0NEEzRTEwMDQwMzQ5
QSAvKiBBU1QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTMzOTBBMTJGMjc0NEE0OTYwMDQwMzQ5QSAvKiBBU1ROb2RlLmggKi8sCisJCQkJMzM5MEExMzUy
NzQ0QTZDMTAwNDAzNDlBIC8qIEF0dHJpYnV0ZS5oICovLAorCQkJCTMzOTBBMTMxMjc0NEE1MDMw
MDQwMzQ5QSAvKiBHbG9iYWxEaXJlY3RpdmUuaCAqLywKKwkJCQkzMzkwQTEzMzI3NDRBNUI3MDA0
MDM0OUEgLyogR2xvYmFsRGVjbC5oICovLAorCQkJCTMzOTBBMTNCMjc0NEE3RDgwMDQwMzQ5QSAv
KiBFeHByZXNzaW9uLmggKi8sCisJCQkJMzM3MTZBNUEyNzQ1N0RFNjAwQTM5NTIyIC8qIFNoYWRl
ci5oICovLAorCQkJCTMzOTBBMTNEMjc0NEE4NTcwMDQwMzQ5QSAvKiBTdGF0ZW1lbnQuaCAqLywK
KwkJCQkzMzkwQTEzOTI3NDRBNzZGMDA0MDM0OUEgLyogVHlwZS5oICovLAorCQkJCTMzOTBBMTM3
Mjc0NEE3MkMwMDQwMzQ5QSAvKiBWYXJpYWJsZVF1YWxpZmllci5oICovLAorCQkJKTsKKwkJCXBh
dGggPSBBU1Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdy
b3VwIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwpAQCAtMzEyLDcgKzM2MiwxOSBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMzM5MEEx
MzAyNzQ0QTQ5NjAwNDAzNDlBIC8qIEFTVE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUJE
N0Y4MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzkwQTE0
MDI3NDRBOTkwMDA0MDM0OUEgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzkwQTEy
RDI3NDQ4NjM1MDA0MDM0OUEgLyogU291cmNlU3Bhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM5
MEExMzIyNzQ0QTUwMzAwNDAzNDlBIC8qIEdsb2JhbERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzM5MEExMzQyNzQ0QTVCNzAwNDAzNDlBIC8qIEdsb2JhbERlY2wuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMzOTBBMTNDMjc0NEE3RDgwMDQwMzQ5QSAvKiBFeHByZXNzaW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMzkwQTEzNjI3NDRBNkMxMDA0MDM0OUEgLyogQXR0cmlidXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzkwQTEzQTI3NDRBNzZGMDA0MDM0OUEgLyogVHlwZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzM1MkNGQUYyNzU1OEJCQTAwNDI5ODM5IC8qIFRva2VuLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMzcxNkE1QjI3NDU3REU2MDBBMzk1MjIgLyogU2hhZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMzkwQTEzRTI3NDRBODU3MDA0MDM0OUEgLyogU3RhdGVtZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzkwQTEzODI3NDRBNzJDMDA0MDM0OUEgLyogVmFyaWFibGVRdWFs
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDM1LDcgKzQ5Nyw3IEBACiAJCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKLQkJCQkxQzAyM0QzRjI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTFDMDIzRDNGMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMTGV4
ZXJUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDczLDYgKzUzNSw4IEBACiAJCQlpc2EgPSBQ
QlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJ
CQlmaWxlcyA9ICgKKwkJCQkzMzgyOTVBQzI3M0RFMzRCMDAxRDc0NzIgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzM5MEExNDIyNzQ0QTlCNzAwNDAzNDlBIC8qIFBhcnNlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsK
</data>
<flag name="review"
          id="470501"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
    <flag name="commit-queue"
          id="470502"
          type_id="3"
          status="-"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451907</attachid>
            <date>2022-02-14 08:39:54 -0800</date>
            <delta_ts>2022-02-14 08:53:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchLexer</filename>
            <type>text/plain</type>
            <size>58651</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggOGI1NzZmNmFlNWE4Li5kNjJmNzg5MmNmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNzIgQEAKKzIwMjItMDItMTQgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNv
bT4KKworICAgICAgICBbV0dTTF0gSW1wbGVtZW50IGVub3VnaCBvZiB0aGUgbGV4ZXIgZm9yIHRo
ZSBzaW1wbGVzdCBzaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzMyNzYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NzMyNjc1PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGlzIGp1
c3QgZW5vdWdoIG9mIHRoZSBsZXhlciBpbiB0aGlzIHBhdGNoIHRvIHBhc3MgdGhlIHVuaXQgdGVz
dHMgKGFsc28gYWRkZWQgYnkgdGhlIHBhdGNoKS4KKyAgICAgICAgVGhlIGxleGVyIGlzIHRlbXBs
YXRlZCBieSB0aGUgY2hhcmFjdGVyIHNpemUsIGZvbGxvd2luZyB0aGUgY29kZSBmcm9tIEpTQydz
IGxleGVyLgorCisgICAgICAgIFRoZSBsZXhpbmcgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMg
aXMgYSBiaXQgaGFja3ksIGFuZCBwcm9iYWJseSBoYXMgc29tZSBwcmVjaXNpb24gaXNzdWVzIGlu
IGNvcm5lciBjYXNlcywgYnV0IGl0IHBhc3NlZCBhbGwgc2ltcGxlIHVuaXQgdGVzdHMsCisgICAg
ICAgIHNvIGZvciBub3cgSSBqdXN0IGxlZnQgaXQgYXMgaXMgd2l0aCBhIEZJWE1FLCB0byBiZSBm
aXhlZCBvbmNlIHdlIGNhbiBydW4gdGhlIGZ1bGwgQ1RTLgorCisgICAgICAgIFRoZSBUb2tlblR5
cGUgaW5jbHVkZXMgYW4gYEludmFsaWRgIHZhbHVlLiBJIGNvdWxkIGluc3RlYWQgaGF2ZSB1c2Vk
IHN0ZDo6b3B0aW9uYWw8VG9rZW4+IGV2ZXJ5d2hlcmUuCisgICAgICAgIEkgbWFkZSB0aGlzIGNo
b2ljZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIC0gc3BhY2UgZWZmaWNpZW5jeTogd2UgZG9u
J3QgdXNlIGFuIGV4dHJhIHdvcmQgb2YgbWVtb3J5IGZvciB0aGUgdmFyaWFudCdzIHRhZworICAg
ICAgICAtIGVhc2Ugb2YgdXNlOiBldmVyeXdoZXJlIHRoYXQgd2UgY2hlY2sgZm9yIGEgZ2l2ZW4g
VG9rZW5UeXBlLCB3ZSB3b3VsZCBoYXZlIHRvIGZpcnN0IGNoZWNrIHRoYXQgdGhlIFRva2VuIGlz
IG5vdCBudWxsb3B0LCBhbmQgdGhlbiBjaGVjayB0aGUgVG9rZW5UeXBlLgorCisgICAgICAgICog
Q29uZmlndXJhdGlvbnMvV0dTTFVuaXRUZXN0cy54Y2NvbmZpZzoKKyAgICAgICAgKiBXR1NML0xl
eGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6bGV4KToKKyAgICAgICAg
KFdHU0w6OkxleGVyPFQ+OjpzaGlmdCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6cGVlayk6
CisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6c2tpcFdoaXRlc3BhY2UpOgorICAgICAgICAoV0dT
TDo6TGV4ZXI8VD46OmlzQXRFbmRPZkZpbGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8
VD46OnBhcnNlRGVjaW1hbEludGVnZXIpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBhcnNl
RGVjaW1hbEZsb2F0RXhwb25lbnQpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBhcnNlSW50
ZWdlckxpdGVyYWxTdWZmaXgpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc1doaXRl
U3BhY2UpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJTdGFydCk6
CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVy
KToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6aXNEZWNpbWFsKToKKyAgICAgICAgKFdH
U0w6OkxleGVyPExDaGFyPjo6aXNIZXhhZGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxM
Q2hhcj46OnJlYWREZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6cmVhZEhl
eGFkZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKToK
KyAgICAgICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNJZGVudGlmaWVyU3RhcnQpOgorICAgICAg
ICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJhY3Rlcik6CisgICAg
ICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OmlzRGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhl
cjxVQ2hhcj46OmlzSGV4YWRlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojpy
ZWFkRGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OnJlYWRIZXhhZGVjaW1h
bCk6CisgICAgICAgICogV0dTTC9MZXhlci5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkxleGVy
OjpMZXhlcik6CisgICAgICAgIChXR1NMOjpMZXhlcjo6Y3VycmVudFBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdHU0w6OkxleGVyOjpjdXJyZW50T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkxleGVyOjpjdXJyZW50VG9rZW5MZW5ndGggY29uc3QpOgorICAgICAgICAoV0dTTDo6TGV4
ZXI6Om1ha2VUb2tlbik6CisgICAgICAgIChXR1NMOjpMZXhlcjo6bWFrZUxpdGVyYWxUb2tlbik6
CisgICAgICAgIChXR1NMOjpMZXhlcjo6bWFrZUlkZW50aWZpZXJUb2tlbik6CisgICAgICAgICog
V0dTTC9Tb3VyY2VTcGFuLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6U291cmNlU3Bhbjo6U291
cmNlU3Bhbik6CisgICAgICAgICogV0dTTC9Ub2tlbi5jcHA6IEFkZGVkLgorICAgICAgICAoV0dT
TDo6dG9TdHJpbmcpOgorICAgICAgICAqIFdHU0wvVG9rZW4uaDogQWRkZWQuCisgICAgICAgIChX
R1NMOjpUb2tlbjo6VG9rZW4pOgorICAgICAgICAoV0dTTDo6VG9rZW46Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXR1NMOjpUb2tlbjo6flRva2VuKToKKyAgICAgICAgKiBXR1NML1dHU0wuY3BwOgor
ICAgICAgICAoV0dTTDo6c3RhdGljQ2hlY2spOgorICAgICAgICAqIFdHU0xVbml0VGVzdHMvV0dT
TExleGVyVGVzdHMubW06IEFkZGVkLgorICAgICAgICAoLVtXR1NMTGV4ZXJUZXN0cyB0ZXN0TGV4
ZXJPblNpbmdsZVRva2Vuc10pOgorICAgICAgICAoLVtXR1NMTGV4ZXJUZXN0cyB0ZXN0TGV4ZXJP
bkNvbXB1dGVTaGFkZXJdKToKKyAgICAgICAgKC1bV0dTTExleGVyVGVzdHMgdGVzdExleGVyT25H
cmFwaGljc1NoYWRlcl0pOgorICAgICAgICAqIFdHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKC1bV0dTTFVuaXRUZXN0cyB0ZXN0RXhhbXBsZV0pOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDIy
LTAxLTI2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dlYkdQVV0gTWFrZSBzdXJlIFdHU0xVbml0VGVzdHMgY2FuIGNhbGwgaW50byBXR1NMCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0NvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNj
b25maWcgYi9Tb3VyY2UvV2ViR1BVL0NvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNjb25m
aWcKaW5kZXggMDE1MDQ1MDI0Mjc0Li44NDYxMjU5YTQ4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvQ29uZmlndXJhdGlvbnMvV0dTTFVuaXRUZXN0cy54Y2NvbmZpZworKysgYi9Tb3VyY2Uv
V2ViR1BVL0NvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNjb25maWcKQEAgLTIxLDYgKzIx
LDcgQEAKIC8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7CiBIRUFERVJfU0VBUkNIX1BBVEhTID0gIiQoQlVJTFRfUFJPRFVDVFNfRElSKS91
c3IvbG9jYWwvaW5jbHVkZSIgJChpbmhlcml0ZWQpOwogUFJPRFVDVF9OQU1FID0gV0dTTFVuaXRU
ZXN0czsKIEVOQUJMRV9URVNUQUJJTElUWSA9IFlFUzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV0dTTC9MZXhlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmMwMGM2NzM4ZTYyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNwcApAQCAtMCwwICsxLDQ2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitUb2tlbiBMZXhlcjxUPjo6bGV4KCkKK3sKKyAgICBza2lwV2hpdGVzcGFjZSgp
OworCisgICAgbV90b2tlblN0YXJ0aW5nUG9zaXRpb24gPSBtX2N1cnJlbnRQb3NpdGlvbjsKKwor
ICAgIGlmIChpc0F0RW5kT2ZGaWxlKCkpCisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5U
eXBlOjpFbmRPZkZpbGUpOworCisgICAgc3dpdGNoIChtX2N1cnJlbnQpIHsKKyAgICBjYXNlICco
JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6
OlBhcmVuTGVmdCk7CisgICAgY2FzZSAnKSc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJl
dHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjYXNlICd7JzoKKyAg
ICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkJyYWNl
TGVmdCk7CisgICAgY2FzZSAnfSc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBt
YWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFjZVJpZ2h0KTsKKyAgICBjYXNlICdbJzoKKyAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkJyYWNrZXRMZWZ0
KTsKKyAgICBjYXNlICddJzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VU
b2tlbihUb2tlblR5cGU6OkJyYWNrZXRSaWdodCk7CisgICAgY2FzZSAnOic6CisgICAgICAgIHNo
aWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpDb2xvbik7CisgICAg
Y2FzZSAnLCc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpDb21tYSk7CisgICAgY2FzZSAnOyc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
IHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpTZW1pY29sb24pOworICAgIGNhc2UgJz0nOgor
ICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RXF1
YWwpOworICAgIGNhc2UgJz4nOgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFr
ZVRva2VuKFRva2VuVHlwZTo6R1QpOworICAgIGNhc2UgJzwnOgorICAgICAgICBzaGlmdCgpOwor
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6TFQpOworICAgIGNhc2UgJ0AnOgor
ICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QXR0
cmlidXRlKTsKKyAgICBjYXNlICcuJzogeworICAgICAgICBzaGlmdCgpOworICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBvc3RQZXJpb2QgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgIGlmICgh
cG9zdFBlcmlvZCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpQZXJp
b2QpOworICAgICAgICBkb3VibGUgbGl0ZXJhbFZhbHVlID0gcG9zdFBlcmlvZC52YWx1ZSgpOwor
ICAgICAgICAvLyBGSVhNRTogdmVyaWZ5IHRoYXQgdGhlcmUgaXMgbm8gdW5uYWNlcHRhYmxlIHBy
ZWNpc2lvbiBsb3NzCisgICAgICAgIC8vIEl0IHNob3VsZCBiZSB0ZXN0ZWQgaW4gdGhlIENUUywg
Zm9yIG5vdyBsZXQncyBnZXQgc29tZXRoaW5nIHRoYXQgd29ya3MKKyAgICAgICAgLy8gQWxzbyB0
aGUgc2FtZSBjb2RlIGFwcGVhcnMgaW4gYSBmZXcgcGxhY2VzIGJlbG93LgorICAgICAgICBsaXRl
cmFsVmFsdWUgLz0gcG93KDEwLCBjdXJyZW50T2Zmc2V0KCkgLSBvZmZzZXQpOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVu
dCgpOworICAgICAgICBpZiAoZXhwb25lbnQpCisgICAgICAgICAgICBsaXRlcmFsVmFsdWUgKj0g
cG93KDEwLCBleHBvbmVudC52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9r
ZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgIH0K
KyAgICBjYXNlICctJzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgaWYgKG1fY3VycmVudCA9
PSAnPicpIHsKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVRv
a2VuKFRva2VuVHlwZTo6QXJyb3cpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJzAnOiB7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIGRvdWJsZSBsaXRlcmFsVmFsdWUg
PSAwOworICAgICAgICBpZiAobV9jdXJyZW50ID09ICd4JykgeworICAgICAgICAgICAgLy8gRklY
TUU6IGFkZCBzdXBwb3J0IGZvciBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludCBsaXRlcmFscwor
ICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIGJvb2wgaGV4TnVtYmVySXNFbXB0eSA9
IHRydWU7CisgICAgICAgICAgICB3aGlsZSAoaXNIZXhhZGVjaW1hbChtX2N1cnJlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICo9IDE2OworICAgICAgICAgICAgICAgIGxpdGVy
YWxWYWx1ZSArPSByZWFkSGV4YWRlY2ltYWwobV9jdXJyZW50KTsKKyAgICAgICAgICAgICAgICBz
aGlmdCgpOworICAgICAgICAgICAgICAgIGhleE51bWJlcklzRW1wdHkgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoZXhOdW1iZXJJc0VtcHR5KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50ZWdlckxpdGVyYWxTdWZmaXgo
bGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNGbG9hdGluZ1BvaW50
ID0gZmFsc2U7CisgICAgICAgIGlmIChpc0RlY2ltYWwobV9jdXJyZW50KSB8fCBtX2N1cnJlbnQg
PT0gJy4nIHx8IG1fY3VycmVudCA9PSAnZScgfHwgbV9jdXJyZW50ID09ICdFJykgeworICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gaW50ZWdlclBhcnQgPSBwYXJzZURlY2ltYWxJ
bnRlZ2VyKCk7CisgICAgICAgICAgICBpZiAoaW50ZWdlclBhcnQpCisgICAgICAgICAgICAgICAg
bGl0ZXJhbFZhbHVlID0gaW50ZWdlclBhcnQudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChtX2N1
cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgaXNGbG9hdGluZ1BvaW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaGFy
ZSB0aGlzIGNvZGUgd2l0aCB0aGUgWzEtOV0gY2FzZQorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGN1cnJlbnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBwb3N0UGVyaW9kID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgICAgICAg
ICAgICAgIGlmIChwb3N0UGVyaW9kKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFj
dGlvbmFsUGFydCA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZnJh
Y3Rpb25hbFBhcnQgLz0gcG93KDEwLCBjdXJyZW50T2Zmc2V0KCkgLSBvZmZzZXQpOworICAgICAg
ICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUgKz0gZnJhY3Rpb25hbFBhcnQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTGl0
ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RkOjpv
cHRpb25hbDxpbnQ2NF90PiBleHBvbmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKSkg
eworICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSAqPSBwb3coMTAsIGV4cG9uZW50LnZhbHVl
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6
RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIERlY2ltYWwgaW50ZWdlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHN0YXJ0IHdpdGgg
MC4KKyAgICAgICAgICAgIGlmICghaXNGbG9hdGluZ1BvaW50KQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpJbnZhbGlkKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9jdXJyZW50ID09ICdmJykgeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwg
bGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNGbG9hdGluZ1BvaW50KQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxv
YXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgICAgICByZXR1cm4gcGFyc2VJbnRlZ2VyTGl0
ZXJhbFN1ZmZpeChsaXRlcmFsVmFsdWUpOworICAgIH0KKyAgICBjYXNlICcxJzoKKyAgICBjYXNl
ICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBj
YXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAgICBjYXNlICc4JzoKKyAgICBjYXNlICc5Jzogewor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiB2YWx1ZSA9IHBhcnNlRGVjaW1hbEludGVn
ZXIoKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4o
VG9rZW5UeXBlOjpJbnZhbGlkKTsKKyAgICAgICAgZG91YmxlIGxpdGVyYWxWYWx1ZSA9IHZhbHVl
LnZhbHVlKCk7CisgICAgICAgIGJvb2wgaXNGbG9hdGluZ1BvaW50ID0gZmFsc2U7CisgICAgICAg
IGlmIChtX2N1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAgICBpc0Zsb2F0aW5nUG9pbnQgPSB0
cnVlOworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IGN1cnJlbnRPZmZzZXQoKTsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBv
c3RQZXJpb2QgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgICAgICBpZiAocG9zdFBl
cmlvZCkgeworICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFjdGlvbmFsUGFydCA9IHBvc3RQZXJp
b2QudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBmcmFjdGlvbmFsUGFydCAvPSBwb3coMTAsIGN1
cnJlbnRPZmZzZXQoKSAtIG9mZnNldCk7CisgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICs9
IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChz
dGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVu
dCgpKSB7CisgICAgICAgICAgICBsaXRlcmFsVmFsdWUgKj0gcG93KDEwLCBleHBvbmVudC52YWx1
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVj
aW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bV9jdXJyZW50ID09ICdmJykgeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0
ZXJhbFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRmxvYXRpbmdQb2ludCkKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZUludGVnZXJMaXRlcmFsU3VmZml4KGxpdGVyYWxWYWx1ZSk7
CisgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYo
aXNJZGVudGlmaWVyU3RhcnQobV9jdXJyZW50KSkgeworICAgICAgICAgICAgY29uc3QgVCogc3Rh
cnRPZlRva2VuID0gbV9jb2RlOworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHdo
aWxlKGlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKG1fY3VycmVudCkpCisgICAgICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhIHRyaWUgd291bGQgYmUgbW9yZSBl
ZmZpY2llbnQgaGVyZSwgbG9vayBhdCBKYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJh
dG9yLnB5IGZvciBhbiBleGFtcGxlIG9mIGNvZGUgYXV0b2dlbmVyYXRpb24gdGhhdCBwcm9kdWNl
cyBzdWNoIGEgdHJpZS4KKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0YXJ0T2ZUb2tl
biwgY3VycmVudFRva2VuTGVuZ3RoKCkgfTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJIGRvbid0
IHRoaW5rIHRoYXQgdHJ1ZS9mYWxzZS9mMzIvdTMyL2kzMi9ib29sIG5lZWQgdG8gYmUgdGhlaXIg
b3duIHRva2VucywgdGhleSBjb3VsZCBqdXN0IGJlIHJlZ3VsYXIgaWRlbnRpZmllcnMuCisgICAg
ICAgICAgICBpZiAodmlldyA9PSAiZm4iKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW4oVG9rZW5UeXBlOjpLZXl3b3JkRm4pOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gImZ1bmN0
aW9uIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29y
ZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJwcml2YXRlIikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFByaXZhdGUpOworICAg
ICAgICAgICAgaWYgKHZpZXcgPT0gInJlYWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkUmVhZCk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAi
cmVhZF93cml0ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6
OktleXdvcmRSZWFkV3JpdGUpOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInJldHVybiIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRSZXR1cm4p
OworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInN0b3JhZ2UiKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkU3RvcmFnZSk7CisgICAgICAgICAgICBp
ZiAodmlldyA9PSAic3RydWN0IikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRv
a2VuVHlwZTo6S2V5d29yZFN0cnVjdCk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAidW5pZm9y
bSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRV
bmlmb3JtKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJ2YXIiKQorICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkVmFyKTsKKyAgICAgICAgICAgIGlm
ICh2aWV3ID09ICJ3b3JrZ3JvdXAiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4o
VG9rZW5UeXBlOjpLZXl3b3JkV29ya2dyb3VwKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJ3
cml0ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdv
cmRXcml0ZSk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAiYXNtIiB8fCB2aWV3ID09ICJiZjE2
IiB8fCB2aWV3ID09ICJjb25zdCIgfHwgdmlldyA9PSAiZG8iIHx8IHZpZXcgPT0gImVudW0iCisg
ICAgICAgICAgICAgICAgfHwgdmlldyA9PSAiZjE2IiB8fCB2aWV3ID09ICJmNjQiIHx8IHZpZXcg
PT0gImhhbmRsZSIgfHwgdmlldyA9PSAiaTgiIHx8IHZpZXcgPT0gImkxNiIKKyAgICAgICAgICAg
ICAgICB8fCB2aWV3ID09ICJpNjQiIHx8IHZpZXcgPT0gIm1hdCIgfHwgdmlldyA9PSAicHJlbWVy
Z2UiIHx8IHZpZXcgPT0gInJlZ2FyZGxlc3MiCisgICAgICAgICAgICAgICAgfHwgdmlldyA9PSAi
dHlwZWRlZiIgfHwgdmlldyA9PSAidTgiIHx8IHZpZXcgPT0gInUxNiIgfHwgdmlldyA9PSAidTY0
IiB8fCB2aWV3ID09ICJ1bmxlc3MiCisgICAgICAgICAgICAgICAgfHwgdmlldyA9PSAidXNpbmci
IHx8IHZpZXcgPT0gInZlYyIgfHwgdmlldyA9PSAidm9pZCIgfHwgdmlldyA9PSAid2hpbGUiKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpSZXNlcnZlZFdvcmQp
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VJZGVudGlmaWVyVG9rZW4odmlldyk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBl
OjpJbnZhbGlkKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+Ojpz
aGlmdCgpCit7CisgICAgLy8gQXQgb25lIHBvaW50IHRpbWluZyBzaG93ZWQgdGhhdCBzZXR0aW5n
IG1fY3VycmVudCB0byAwIHVuY29uZGl0aW9uYWxseSB3YXMgZmFzdGVyIHRoYW4gYW4gaWYtZWxz
ZSBzZXF1ZW5jZS4KKyAgICBtX2N1cnJlbnQgPSAwOworICAgICsrbV9jb2RlOworICAgICsrbV9j
dXJyZW50UG9zaXRpb24ubV9vZmZzZXQ7CisgICAgKyttX2N1cnJlbnRQb3NpdGlvbi5tX2xpbmVP
ZmZzZXQ7CisgICAgaWYgKExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQorICAgICAgICBtX2N1
cnJlbnQgPSAqbV9jb2RlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1QgTGV4ZXI8VD46
OnBlZWsodW5zaWduZWQgaSkKK3sKKyAgICBpZiAoVU5MSUtFTFkobV9jb2RlICsgaSA+PSBtX2Nv
ZGVFbmQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKihtX2NvZGUgKyBpKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+Ojpza2lwV2hpdGVzcGFjZSgp
Cit7CisgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShtX2N1cnJlbnQpKSB7CisgICAgICAgIGlmICht
X2N1cnJlbnQgPT0gJ1xuJykgeworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICsr
bV9jdXJyZW50UG9zaXRpb24ubV9saW5lOworICAgICAgICAgICAgbV9jdXJyZW50UG9zaXRpb24u
bV9saW5lT2Zmc2V0ID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzaGlmdCgpOwor
ICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIExleGVyPFQ+Ojppc0F0RW5k
T2ZGaWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9jb2RlID09IG1fY29kZUVuZCkgeworICAgICAg
ICBBU1NFUlQobV9jdXJyZW50ID09IDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgQVNTRVJUKG1fY29kZSA8IG1fY29kZUVuZCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IExleGVyPFQ+Ojpw
YXJzZURlY2ltYWxJbnRlZ2VyKCkKK3sKKyAgICBpZiAoIWlzRGVjaW1hbChtX2N1cnJlbnQpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgQ2hlY2tlZFVpbnQ2NCB2YWx1ZSA9
IDA7CisgICAgd2hpbGUgKGlzRGVjaW1hbChtX2N1cnJlbnQpKSB7CisgICAgICAgIHZhbHVlICo9
IDEwdWxsOworICAgICAgICB2YWx1ZSArPSByZWFkRGVjaW1hbChtX2N1cnJlbnQpOworICAgICAg
ICBzaGlmdCgpOworICAgIH0KKyAgICBpZiAodmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB7IHZhbHVlLnZhbHVlKCkgfTsKK30K
KworLy8gUGFyc2UgcGF0dGVybiAoZXxFKShcK3wtKT9bMC05XStmPyBpZiBpdCBpcyBwcmVzZW50
LCBhbmQgcmV0dXJuIHRoZSBleHBvbmVudAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6Om9w
dGlvbmFsPGludDY0X3Q+IExleGVyPFQ+OjpwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCkKK3sK
KyAgICBUIGNoYXIxID0gcGVlaygxKTsKKyAgICBUIGNoYXIyID0gcGVlaygyKTsKKyAgICAvLyBD
aGVjayBmb3IgcGF0dGVybiAoZXxFKShcK3wtKT9bMC05XSsKKyAgICBpZiAobV9jdXJyZW50ICE9
ICdlJyAmJiBtX2N1cnJlbnQgIT0gJ0UnKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmIChjaGFyMSA9PSAnKycgfHwgY2hhcjEgPT0gJy0nKSB7CisgICAgICAgIGlmICghaXNE
ZWNpbWFsKGNoYXIyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfSBl
bHNlIGlmICghaXNEZWNpbWFsKGNoYXIxKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBzaGlmdCgpOworCisgICAgYm9vbCBuZWdhdGVFeHBvbmVudCA9IGZhbHNlOworICAgIGlm
IChtX2N1cnJlbnQgPT0gJy0nKSB7CisgICAgICAgIG5lZ2F0ZUV4cG9uZW50ID0gdHJ1ZTsKKyAg
ICAgICAgc2hpZnQoKTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnKycpCisgICAgICAg
IHNoaWZ0KCk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFyc2VE
ZWNpbWFsSW50ZWdlcigpOworICAgIGlmICghZXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgQ2hlY2tlZEludDY0IGV4cG9uZW50VmFsdWUgPSBleHBvbmVudC52YWx1
ZSgpOworICAgIGlmIChuZWdhdGVFeHBvbmVudCkKKyAgICAgICAgZXhwb25lbnRWYWx1ZSA9IC0g
ZXhwb25lbnRWYWx1ZTsKKyAgICBpZiAoZXhwb25lbnRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgZXhwb25lbnRWYWx1ZS52
YWx1ZSgpIH07Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Rva2VuIExleGVyPFQ+Ojpw
YXJzZUludGVnZXJMaXRlcmFsU3VmZml4KGRvdWJsZSBsaXRlcmFsVmFsdWUpCit7CisgICAgaWYg
KG1fY3VycmVudCA9PSAnaScpIHsKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZCwgbGl0ZXJhbFZh
bHVlKTsKKyAgICB9CisgICAgaWYgKG1fY3VycmVudCA9PSAndScpIHsKKyAgICAgICAgc2hpZnQo
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJbnRlZ2VyTGl0
ZXJhbFVuc2lnbmVkLCBsaXRlcmFsVmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gbWFrZUxpdGVy
YWxUb2tlbihUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworfTsKKwor
dGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxMQ2hhcj46OmlzV2hpdGVTcGFj
ZShMQ2hhciBjaCkKK3sKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAnICc6CisgICAgY2Fz
ZSAnXHQnOgorICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICdcdic6CisgICAgY2FzZSAnXGYnOgor
ICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUg
Ym9vbCBMZXhlcjxMQ2hhcj46OmlzSWRlbnRpZmllclN0YXJ0KExDaGFyIGNoKQoreworICAgIHJl
dHVybiAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicp
OworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPExDaGFyPjo6aXNW
YWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoTENoYXIgY2gpCit7CisgICAgcmV0dXJuIChjaCA+PSAn
YScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwgKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpIHx8IGNoID09ICdfJzsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19J
TkxJTkUgYm9vbCBMZXhlcjxMQ2hhcj46OmlzRGVjaW1hbChMQ2hhciBjaCkKK3sKKyAgICByZXR1
cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lO
TElORSBib29sIExleGVyPExDaGFyPjo6aXNIZXhhZGVjaW1hbChMQ2hhciBjaCkKK3sKKyAgICBy
ZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ2Yn
KSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJyk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNf
SU5MSU5FIHVpbnQ2NF90IExleGVyPExDaGFyPjo6cmVhZERlY2ltYWwoTENoYXIgY2gpCit7Cisg
ICAgQVNTRVJUKGlzRGVjaW1hbChjaCkpOworICAgIHJldHVybiBjaCAtICcwJzsKK30KKwordGVt
cGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgdWludDY0X3QgTGV4ZXI8TENoYXI+OjpyZWFkSGV4YWRl
Y2ltYWwoTENoYXIgY2gpCit7CisgICAgQVNTRVJUKGlzSGV4YWRlY2ltYWwoY2gpKTsKKyAgICBp
ZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykKKyAgICAgICAgcmV0dXJuIGNoIC0gJzAnOworICAg
IGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKQorICAgICAgICByZXR1cm4gY2ggLSAnYSc7Cisg
ICAgQVNTRVJUKGNoID49ICdBJyAmJiBjaCA8PSAnRicpOworICAgIHJldHVybiBjaCAtICdBJzsK
K30KKworCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFVDaGFyPjo6aXNX
aGl0ZVNwYWNlKFVDaGFyIGNoKQoreworICAgIC8vIFdHU0wgZG9lcyBub3QgY3VycmVudGx5IHN1
cHBvcnQgYW55IG5vbi1BU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKyAgICByZXR1cm4gTGV4
ZXI8TENoYXI+Ojppc1doaXRlU3BhY2Uoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisKK3Rl
bXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VUNoYXI+Ojppc0lkZW50aWZpZXJT
dGFydChVQ2hhciBjaCkKK3sKKyAgICAvLyBXR1NMIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0
IGFueSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBpZGVudGlmaWVycworICAgIHJldHVybiBMZXhl
cjxMQ2hhcj46OmlzSWRlbnRpZmllclN0YXJ0KHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQor
Cit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFVDaGFyPjo6aXNWYWxpZElk
ZW50aWZpZXJDaGFyYWN0ZXIoVUNoYXIgY2gpCit7CisgICAgLy8gV0dTTCBkb2VzIG5vdCBjdXJy
ZW50bHkgc3VwcG9ydCBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gaWRlbnRpZmllcnMKKyAg
ICByZXR1cm4gTGV4ZXI8TENoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJhY3RlcihzdGF0aWNf
Y2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBM
ZXhlcjxVQ2hhcj46OmlzRGVjaW1hbChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8TENo
YXI+Ojppc0RlY2ltYWwoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisKK3RlbXBsYXRlIDw+
CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VUNoYXI+Ojppc0hleGFkZWNpbWFsKFVDaGFyIGNo
KQoreworICAgIHJldHVybiBMZXhlcjxMQ2hhcj46OmlzSGV4YWRlY2ltYWwoc3RhdGljX2Nhc3Q8
TENoYXI+KGNoKSk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IExl
eGVyPFVDaGFyPjo6cmVhZERlY2ltYWwoVUNoYXIgY2gpCit7CisgICAgcmV0dXJuIExleGVyPExD
aGFyPjo6cmVhZERlY2ltYWwoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisKK3RlbXBsYXRl
IDw+CitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IExleGVyPFVDaGFyPjo6cmVhZEhleGFkZWNpbWFs
KFVDaGFyIGNoKQoreworICAgIHJldHVybiBMZXhlcjxMQ2hhcj46OnJlYWRIZXhhZGVjaW1hbChz
dGF0aWNfY2FzdDxMQ2hhcj4oY2gpKTsKK30KKwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8TENoYXI+
OwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8VUNoYXI+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9MZXhlci5oIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNDYzYzkwNjZlZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuaApAQCAtMCwwICsxLDEwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXR1NMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExleGVy
IHsKK3B1YmxpYzoKKyAgICBMZXhlcihjb25zdCBTdHJpbmcmIHdnc2wpCisgICAgeworICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxULCBMQ2hhcj46OnZhbHVlKSB7CisgICAgICAg
ICAgICBtX2NvZGUgPSB3Z3NsLmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICBtX2NvZGVFbmQg
PSBtX2NvZGUgKyB3Z3NsLnNpemVJbkJ5dGVzKCk7CisgICAgICAgIH0gZWxzZSBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZTxULCBVQ2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICBtX2NvZGUg
PSB3Z3NsLmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgQVNTRVJUKHdnc2wuc2l6ZUluQnl0
ZXMoKSAlIDIgPT0gMCk7CisgICAgICAgICAgICBtX2NvZGVFbmQgPSBtX2NvZGUgKyB3Z3NsLnNp
emVJbkJ5dGVzKCkgLyAyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9jdXJyZW50ID0gKG1fY29kZSAhPSBtX2Nv
ZGVFbmQpID8gKm1fY29kZSA6IDA7CisgICAgfQorCisgICAgVG9rZW4gbGV4KCk7CisgICAgYm9v
bCBpc0F0RW5kT2ZGaWxlKCkgY29uc3Q7CisgICAgU291cmNlUG9zaXRpb24gY3VycmVudFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zaXRpb247IH0KKworICAgIC8vIE9ubHkg
cHVibGljIHNvIHRoYXQgdGhlIFVDaGFyIHZlcnNpb24gb2YgdGhlIExleGVyIGNhbiBkZWZlciB0
byB0aGUgTENoYXIgdmVyc2lvbgorICAgIHN0YXRpYyBib29sIGlzV2hpdGVTcGFjZShUIGNoYXJh
Y3Rlcik7CisgICAgc3RhdGljIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoVCBjaGFyYWN0ZXIpOwor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKFQgY2hhcmFjdGVyKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0RlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyBib29s
IGlzSGV4YWRlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyB1aW50NjRfdCByZWFkRGVj
aW1hbChUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIHVpbnQ2NF90IHJlYWRIZXhhZGVjaW1hbChU
IGNoYXJhY3Rlcik7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgIGN1cnJlbnRPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRQb3NpdGlvbi5tX29mZnNldDsgfQorICAgIHVuc2lnbmVk
IGN1cnJlbnRUb2tlbkxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRPZmZzZXQoKSAtIG1f
dG9rZW5TdGFydGluZ1Bvc2l0aW9uLm1fb2Zmc2V0OyB9CisKKyAgICBUb2tlbiBtYWtlVG9rZW4o
VG9rZW5UeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4geyB0eXBlLCBtX3Rva2VuU3Rh
cnRpbmdQb3NpdGlvbiwgY3VycmVudFRva2VuTGVuZ3RoKCkgfTsKKyAgICB9CisgICAgVG9rZW4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGUgdHlwZSwgZG91YmxlIGxpdGVyYWxWYWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB7IHR5cGUsIG1fdG9rZW5TdGFydGluZ1Bvc2l0aW9uLCBjdXJy
ZW50VG9rZW5MZW5ndGgoKSwgbGl0ZXJhbFZhbHVlIH07CisgICAgfQorICAgIFRva2VuIG1ha2VJ
ZGVudGlmaWVyVG9rZW4oU3RyaW5nVmlldyB2aWV3KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsg
V0dTTDo6VG9rZW5UeXBlOjpJZGVudGlmaWVyLCBtX3Rva2VuU3RhcnRpbmdQb3NpdGlvbiwgY3Vy
cmVudFRva2VuTGVuZ3RoKCksIHZpZXcgfTsKKyAgICB9CisKKyAgICB2b2lkIHNoaWZ0KCk7Cisg
ICAgVCBwZWVrKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNraXBXaGl0ZXNwYWNlKCk7CisKKyAgICAv
LyBSZWFkcyBbMC05XSsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYXJzZURlY2ltYWxJ
bnRlZ2VyKCk7CisgICAgLy8gUGFyc2UgcGF0dGVybiAoZXxFKShcK3wtKT9bMC05XStmPyBpZiBp
dCBpcyBwcmVzZW50LCBhbmQgcmV0dXJuIHRoZSBleHBvbmVudAorICAgIHN0ZDo6b3B0aW9uYWw8
aW50NjRfdD4gcGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVudCgpOworICAgIC8vIENoZWNrcyB3aGV0
aGVyIHRoZXJlIGlzIGFuICJpIiBvciAidSIgY29taW5nLCBhbmQgcmV0dXJuIHRoZSByaWdodCBr
aW5kIG9mIGxpdGVyYWwgdG9rZW4KKyAgICBUb2tlbiBwYXJzZUludGVnZXJMaXRlcmFsU3VmZml4
KGRvdWJsZSBsaXRlcmFsVmFsdWUpOworCisgICAgVCBtX2N1cnJlbnQ7CisgICAgY29uc3QgVCog
bV9jb2RlOworICAgIGNvbnN0IFQqIG1fY29kZUVuZDsKKyAgICBTb3VyY2VQb3NpdGlvbiBtX2N1
cnJlbnRQb3NpdGlvbiB7IDAsIDAsIDAgfTsKKyAgICBTb3VyY2VQb3NpdGlvbiBtX3Rva2VuU3Rh
cnRpbmdQb3NpdGlvbiB7IDAsIDAsIDAgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV0dTTC9Tb3VyY2VTcGFuLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvU291cmNlU3Bhbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjdjOTQ0NDg4NDkyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1NvdXJjZVNwYW4uaApAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXR1NMIHsK
Kworc3RydWN0IFNvdXJjZVBvc2l0aW9uIHsKKyAgICB1bnNpZ25lZCBtX2xpbmU7CisgICAgdW5z
aWduZWQgbV9saW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworfTsKKworc3RydWN0
IFNvdXJjZVNwYW4geworICAgIHVuc2lnbmVkIG1fbGluZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVP
ZmZzZXQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7CisK
KyAgICBTb3VyY2VTcGFuKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGxpbmVPZmZzZXQsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IG1fbGluZShsaW5lKQorICAg
ICAgICAsIG1fbGluZU9mZnNldChsaW5lT2Zmc2V0KQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBT
b3VyY2VTcGFuKFNvdXJjZVBvc2l0aW9uIHN0YXJ0LCBTb3VyY2VQb3NpdGlvbiBlbmQpCisgICAg
ICAgIDogbV9saW5lIChzdGFydC5tX2xpbmUpCisgICAgICAgICwgbV9saW5lT2Zmc2V0KHN0YXJ0
Lm1fbGluZU9mZnNldCkKKyAgICAgICAgLCBtX29mZnNldChzdGFydC5tX29mZnNldCkKKyAgICAg
ICAgLCBtX2xlbmd0aChlbmQubV9vZmZzZXQgLSBzdGFydC5tX29mZnNldCkKKyAgICB7CisgICAg
fQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1Rva2VuLmNwcCBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9Ub2tlbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi5iZWZhMTFlMjI3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvVG9rZW4uY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKworU3Ry
aW5nIHRvU3RyaW5nKFRva2VuVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAg
Y2FzZSBUb2tlblR5cGU6OkludmFsaWQ6CisgICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAg
Y2FzZSBUb2tlblR5cGU6OkVuZE9mRmlsZToKKyAgICAgICAgcmV0dXJuICJFT0YiOworICAgIGNh
c2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbDoKKyAgICAgICAgcmV0dXJuICJJbnRlZ2VyTGl0
ZXJhbCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkOgorICAgICAg
ICByZXR1cm4gIkludGVnZXJMaXRlcmFsU2lnbmVkIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6SW50
ZWdlckxpdGVyYWxVbnNpZ25lZDoKKyAgICAgICAgcmV0dXJuICJJbnRlZ2VyTGl0ZXJhbFVuc2ln
bmVkIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbDoKKyAgICAgICAg
cmV0dXJuICJEZWNpbWFsRmxvYXRMaXRlcmFsIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6SGV4Rmxv
YXRMaXRlcmFsOgorICAgICAgICByZXR1cm4gIkhleEZsb2F0TGl0ZXJhbCI7CisgICAgY2FzZSBU
b2tlblR5cGU6OklkZW50aWZpZXI6CisgICAgICAgIHJldHVybiAiSWRlbnRpZmllciI7CisgICAg
Y2FzZSBUb2tlblR5cGU6OlJlc2VydmVkV29yZDoKKyAgICAgICAgcmV0dXJuICJSZXNlcnZlZFdv
cmQiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkU3RydWN0OgorICAgICAgICByZXR1cm4g
InN0cnVjdCI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRGbjoKKyAgICAgICAgcmV0dXJu
ICJmbiI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRGdW5jdGlvbjoKKyAgICAgICAgcmV0
dXJuICJmdW5jdGlvbiI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRQcml2YXRlOgorICAg
ICAgICByZXR1cm4gInByaXZhdGUiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkUmVhZDoK
KyAgICAgICAgcmV0dXJuICJyZWFkIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFJlYWRX
cml0ZToKKyAgICAgICAgcmV0dXJuICJyZWFkX3dyaXRlIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6
S2V5d29yZFJldHVybjoKKyAgICAgICAgcmV0dXJuICJyZXR1cm4iOworICAgIGNhc2UgVG9rZW5U
eXBlOjpLZXl3b3JkU3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJzdG9yYWdlIjsKKyAgICBjYXNl
IFRva2VuVHlwZTo6S2V5d29yZFVuaWZvcm06CisgICAgICAgIHJldHVybiAidW5pZm9ybSI7Cisg
ICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRWYXI6CisgICAgICAgIHJldHVybiAidmFyIjsKKyAg
ICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFdvcmtncm91cDoKKyAgICAgICAgcmV0dXJuICJ3b3Jr
Z3JvdXAiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkV3JpdGU6CisgICAgICAgIHJldHVy
biAid3JpdGUiOworICAgIGNhc2UgVG9rZW5UeXBlOjpBcnJvdzoKKyAgICAgICAgcmV0dXJuICIt
PiI7CisgICAgY2FzZSBUb2tlblR5cGU6OkF0dHJpYnV0ZToKKyAgICAgICAgcmV0dXJuICJAIjsK
KyAgICBjYXNlIFRva2VuVHlwZTo6QnJhY2tldExlZnQ6CisgICAgICAgIHJldHVybiAiWyI7Cisg
ICAgY2FzZSBUb2tlblR5cGU6OkJyYWNrZXRSaWdodDoKKyAgICAgICAgcmV0dXJuICJdIjsKKyAg
ICBjYXNlIFRva2VuVHlwZTo6QnJhY2VMZWZ0OgorICAgICAgICByZXR1cm4gInsiOworICAgIGNh
c2UgVG9rZW5UeXBlOjpCcmFjZVJpZ2h0OgorICAgICAgICByZXR1cm4gIn0iOworICAgIGNhc2Ug
VG9rZW5UeXBlOjpDb2xvbjoKKyAgICAgICAgcmV0dXJuICI6IjsKKyAgICBjYXNlIFRva2VuVHlw
ZTo6Q29tbWE6CisgICAgICAgIHJldHVybiAiLCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkVxdWFs
OgorICAgICAgICByZXR1cm4gIj0iOworICAgIGNhc2UgVG9rZW5UeXBlOjpHVDoKKyAgICAgICAg
cmV0dXJuICI+IjsKKyAgICBjYXNlIFRva2VuVHlwZTo6TFQ6CisgICAgICAgIHJldHVybiAiPCI7
CisgICAgY2FzZSBUb2tlblR5cGU6OlBlcmlvZDoKKyAgICAgICAgcmV0dXJuICIuIjsKKyAgICBj
YXNlIFRva2VuVHlwZTo6UGFyZW5MZWZ0OgorICAgICAgICByZXR1cm4gIigiOworICAgIGNhc2Ug
VG9rZW5UeXBlOjpQYXJlblJpZ2h0OgorICAgICAgICByZXR1cm4gIikiOworICAgIGNhc2UgVG9r
ZW5UeXBlOjpTZW1pY29sb246CisgICAgICAgIHJldHVybiAiOyI7CisgICAgfQorfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvVG9rZW4uaCBiL1NvdXJjZS9XZWJHUFUvV0dT
TC9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjNjYzY5
OGE2NDNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1Rva2VuLmgKQEAg
LTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNv
dXJjZVNwYW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKworZW51bSBjbGFzcyBU
b2tlblR5cGU6IHVpbnQzMl90IHsKKyAgICAvLyBJbnN0ZWFkIG9mIGhhdmluZyB0aGlzIHR5cGUs
IHdlIGNvdWxkIGhhdmUgYSBzdGQ6Om9wdGlvbmFsPFRva2VuPiBldmVyeXdoZXJlIHRoYXQgd2Ug
Y3VycmVudGx5IGhhdmUgYSBUb2tlbi4KKyAgICAvLyBJIG1hZGUgdGhpcyBjaG9pY2UgZm9yIHR3
byByZWFzb25zOgorICAgIC8vIC0gc3BhY2UgZWZmaWNpZW5jeTogd2UgZG9uJ3QgdXNlIGFuIGV4
dHJhIHdvcmQgb2YgbWVtb3J5IGZvciB0aGUgdmFyaWFudCdzIHRhZworICAgIC8vIC0gZWFzZSBv
ZiB1c2U6IGV2ZXJ5d2hlcmUgdGhhdCB3ZSBjaGVjayBmb3IgYSBnaXZlbiBUb2tlblR5cGUsIHdl
IHdvdWxkIGhhdmUgdG8gZmlyc3QgY2hlY2sgdGhhdCB0aGUgVG9rZW4gaXMgbm90IG51bGxvcHQs
IGFuZCB0aGVuIGNoZWNrIHRoZSBUb2tlblR5cGUuCisgICAgSW52YWxpZCwKKworICAgIEVuZE9m
RmlsZSwKKworICAgIEludGVnZXJMaXRlcmFsLAorICAgIEludGVnZXJMaXRlcmFsU2lnbmVkLAor
ICAgIEludGVnZXJMaXRlcmFsVW5zaWduZWQsCisgICAgRGVjaW1hbEZsb2F0TGl0ZXJhbCwKKyAg
ICBIZXhGbG9hdExpdGVyYWwsCisKKyAgICBJZGVudGlmaWVyLAorCisgICAgUmVzZXJ2ZWRXb3Jk
LAorICAgIEtleXdvcmRGbiwKKyAgICBLZXl3b3JkRnVuY3Rpb24sCisgICAgS2V5d29yZFByaXZh
dGUsCisgICAgS2V5d29yZFJlYWQsCisgICAgS2V5d29yZFJlYWRXcml0ZSwKKyAgICBLZXl3b3Jk
UmV0dXJuLAorICAgIEtleXdvcmRTdG9yYWdlLAorICAgIEtleXdvcmRTdHJ1Y3QsCisgICAgS2V5
d29yZFVuaWZvcm0sCisgICAgS2V5d29yZFZhciwKKyAgICBLZXl3b3JkV29ya2dyb3VwLAorICAg
IEtleXdvcmRXcml0ZSwKKyAgICAvLyBGSVhNRTogYWRkIGFsbCB0aGUgb3RoZXIga2V5d29yZHM6
IHNlZSAja2V5d29yZC1zdW1tYXJ5IGluIHRoZSBXR1NMIHNwZWMKKyAgICAvLyBGSVhNRTogaW4g
dGhlIHNwZWMsIGkzMi91MzIvZjMyIGFyZSBrZXl3b3JkcywgYnV0IEkgYW0gdXNpbmcgaWRlbnRp
ZmllcnMgZm9yIHRoZW0gZm9yIG5vdy4KKyAgICAvLyBTaW1pbGFybHksIGluIHRoZSBzcGVjIHRy
dWUgYW5kIGZhbHNlIGFyZSBzcGVjaWFsIGxpdGVyYWxzIGFuZCBub3QgaWRlbnRpZmllcnMuCisg
ICAgLy8gSSBkb24ndCB0aGluayBpdCBtYXR0ZXJzLCBidXQgSSBzaG91bGQgcHJvYmFibHkgc2Vu
ZCBhIFBSIHRvIHVwZGF0ZSB0aGUgc3BlYyB0byBtYWtlIHRoZW0gaWRlbnRzIHNpbmNlIGl0IGlz
IHNpbXBsZXIgYW5kIHRoZXkgYXJlIG9ubHkgdXNlZCBpbiBwbGFjZXMgdGhhdCBpZGVudHMgYXJl
IGFsbG93ZWQuCisKKyAgICBBcnJvdywKKyAgICBBdHRyaWJ1dGUsCisgICAgQnJhY2VMZWZ0LAor
ICAgIEJyYWNlUmlnaHQsCisgICAgQnJhY2tldExlZnQsCisgICAgQnJhY2tldFJpZ2h0LAorICAg
IENvbG9uLAorICAgIENvbW1hLAorICAgIEVxdWFsLAorICAgIEdULAorICAgIExULAorICAgIFBl
cmlvZCwKKyAgICBQYXJlbkxlZnQsCisgICAgUGFyZW5SaWdodCwKKyAgICBTZW1pY29sb24sCisg
ICAgLy8gRklYTUU6IGFkZCBhbGwgdGhlIG90aGVyIHNwZWNpYWwgdG9rZW5zCit9OworCitTdHJp
bmcgdG9TdHJpbmcoVG9rZW5UeXBlIHR5cGUpOworCitzdHJ1Y3QgVG9rZW4geworICAgIFRva2Vu
VHlwZSBtX3R5cGU7CisgICAgU291cmNlU3BhbiBtX3NwYW47CisgICAgdW5pb24geworICAgICAg
ICBkb3VibGUgbV9saXRlcmFsVmFsdWU7CisgICAgICAgIFN0cmluZ1ZpZXcgbV9pZGVudDsKKyAg
ICB9OworCisgICAgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJjZVBvc2l0aW9uIHBvc2l0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9z
cGFuKHBvc2l0aW9uLm1fbGluZSwgcG9zaXRpb24ubV9saW5lT2Zmc2V0LCBwb3NpdGlvbi5tX29m
ZnNldCwgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJ
ZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0
ZXJhbCk7CisgICAgICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxT
aWduZWQpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFs
VW5zaWduZWQpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkRlY2ltYWxGbG9h
dExpdGVyYWwpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkhleEZsb2F0TGl0
ZXJhbCk7CisgICAgfQorCisgICAgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJjZVBvc2l0aW9u
IHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGRvdWJsZSBsaXRlcmFsVmFsdWUpCisgICAgICAg
IDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9zcGFuKHBvc2l0aW9uLm1fbGluZSwgcG9zaXRp
b24ubV9saW5lT2Zmc2V0LCBwb3NpdGlvbi5tX29mZnNldCwgbGVuZ3RoKQorICAgICAgICAsIG1f
bGl0ZXJhbFZhbHVlKGxpdGVyYWxWYWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlID09
IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gVG9rZW5U
eXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZAorICAgICAgICAgICAgfHwgdHlwZSA9PSBUb2tlblR5
cGU6OkludGVnZXJMaXRlcmFsVW5zaWduZWQKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gVG9rZW5U
eXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsCisgICAgICAgICAgICB8fCB0eXBlID09IFRva2VuVHlw
ZTo6SGV4RmxvYXRMaXRlcmFsKTsKKyAgICB9CisKKyAgICBUb2tlbihUb2tlblR5cGUgdHlwZSwg
U291cmNlUG9zaXRpb24gcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgU3RyaW5nVmlldyBpZGVu
dCkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3NwYW4ocG9zaXRpb24ubV9s
aW5lLCBwb3NpdGlvbi5tX2xpbmVPZmZzZXQsIHBvc2l0aW9uLm1fb2Zmc2V0LCBsZW5ndGgpCisg
ICAgICAgICwgbV9pZGVudChpZGVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlID09IFRv
a2VuVHlwZTo6SWRlbnRpZmllcik7CisgICAgfQorCisgICAgVG9rZW4mIG9wZXJhdG9yPShUb2tl
biYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBUb2tlblR5cGU6OklkZW50
aWZpZXIpCisgICAgICAgICAgICBtX2lkZW50Ln5TdHJpbmdWaWV3KCk7CisKKyAgICAgICAgbV90
eXBlID0gb3RoZXIubV90eXBlOworICAgICAgICBtX3NwYW4gPSBvdGhlci5tX3NwYW47CisKKyAg
ICAgICAgc3dpdGNoKG90aGVyLm1fdHlwZSkgeworICAgICAgICBjYXNlIFRva2VuVHlwZTo6SWRl
bnRpZmllcjoKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faWRlbnQpIFN0cmluZ1ZpZXco
KTsKKyAgICAgICAgICAgIG1faWRlbnQgPSBvdGhlci5tX2lkZW50OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbDoKKyAgICAgICAgY2Fz
ZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkOgorICAgICAgICBjYXNlIFRva2VuVHlw
ZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkRlY2lt
YWxGbG9hdExpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpIZXhGbG9hdExpdGVyYWw6
CisgICAgICAgICAgICBtX2xpdGVyYWxWYWx1ZSA9IG90aGVyLm1fbGl0ZXJhbFZhbHVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUb2tlbihjb25z
dCBUb2tlbiYgb3RoZXIpCisgICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKKyAgICAgICAg
LCBtX3NwYW4ob3RoZXIubV9zcGFuKQorICAgIHsKKyAgICAgICAgc3dpdGNoKG90aGVyLm1fdHlw
ZSkgeworICAgICAgICBjYXNlIFRva2VuVHlwZTo6SWRlbnRpZmllcjoKKyAgICAgICAgICAgIG5l
dyAoTm90TnVsbCwgJm1faWRlbnQpIFN0cmluZ1ZpZXcoKTsKKyAgICAgICAgICAgIG1faWRlbnQg
PSBvdGhlci5tX2lkZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVG9rZW5U
eXBlOjpJbnRlZ2VyTGl0ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRl
cmFsU2lnbmVkOgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25l
ZDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWw6CisgICAgICAg
IGNhc2UgVG9rZW5UeXBlOjpIZXhGbG9hdExpdGVyYWw6CisgICAgICAgICAgICBtX2xpdGVyYWxW
YWx1ZSA9IG90aGVyLm1fbGl0ZXJhbFZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5U
b2tlbigpCisgICAgeworICAgICAgICBpZiAobV90eXBlID09IFRva2VuVHlwZTo6SWRlbnRpZmll
cikKKyAgICAgICAgICAgICgmbV9pZGVudCktPn5TdHJpbmdWaWV3KCk7CisgICAgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wu
Y3BwIGIvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCmluZGV4IDI1YTY4NWUxNzE1MC4uOTRm
ZTM5YWJkNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKKysrIGIv
U291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCkBAIC0yNywxMSArMjcsMTUgQEAKICNpbmNsdWRl
ICJXR1NMLmgiCiAKICNpbmNsdWRlICJBU1QuaCIKKyNpbmNsdWRlICJMZXhlci5oIgogCiBuYW1l
c3BhY2UgV0dTTCB7CiAKLXN0ZDo6dmFyaWFudDxTdWNjZXNzZnVsQ2hlY2ssIEZhaWxlZENoZWNr
PiBzdGF0aWNDaGVjayhjb25zdCBTdHJpbmcmLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJjZU1h
cD4mKQorc3RkOjp2YXJpYW50PFN1Y2Nlc3NmdWxDaGVjaywgRmFpbGVkQ2hlY2s+IHN0YXRpY0No
ZWNrKGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJjZU1hcD4mKQog
eworICAgIC8vIE1ha2luZyBzdXJlIHRoYXQgdGhlIGxleGVyIGJ1aWxkcyBjb3JyZWN0bHksIHdp
bGwgYmUgcmVtb3ZlZCBpbiBsYXRlciBwYXRjaGVzCisgICAgTGV4ZXI8TENoYXI+IGxleGVyKHN0
cik7CisgICAgbGV4ZXIubGV4KCk7CiAgICAgcmV0dXJuIEZhaWxlZENoZWNrIHsgeyB9LCB7IH0g
fTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhl
clRlc3RzLm1tIGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDRiMmFiNzAyMTM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRl
c3RzLm1tCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIkxleGVyLmgiCisj
aW1wb3J0IDxYQ1Rlc3QvWENUZXN0Lmg+CisKK0BpbnRlcmZhY2UgV0dTTExleGVyVGVzdHMgOiBY
Q1Rlc3RDYXNlCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdHU0xMZXhlclRlc3RzCisKKy0g
KHZvaWQpdGVzdExleGVyT25TaW5nbGVUb2tlbnMgeworICAgIGF1dG8gY2hlY2tTaW5nbGVUb2tl
biA9IFtdIChjb25zdCBjaGFyKiBzdHJpbmcsIFdHU0w6OlRva2VuVHlwZSB0eXBlKSB7CisgICAg
ICAgIFdHU0w6OkxleGVyPExDaGFyPiBsZXhlcihzdHJpbmcpOworICAgICAgICBXR1NMOjpUb2tl
biByZXN1bHQgPSBsZXhlci5sZXgoKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1f
dHlwZSwgdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBhdXRvIGNo
ZWNrU2luZ2xlTGl0ZXJhbCA9IFsmXSAoY29uc3QgY2hhciogc3RyaW5nLCBXR1NMOjpUb2tlblR5
cGUgdHlwZSwgZG91YmxlIGxpdGVyYWxWYWx1ZSkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1
bHQgPSBjaGVja1NpbmdsZVRva2VuKHN0cmluZywgdHlwZSk7CisgICAgICAgIFhDVEFzc2VydEVx
dWFsKHJlc3VsdC5tX2xpdGVyYWxWYWx1ZSwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9OworCisgICAg
Y2hlY2tTaW5nbGVUb2tlbigiIiwgV0dTTDo6VG9rZW5UeXBlOjpFbmRPZkZpbGUpOworICAgIGNo
ZWNrU2luZ2xlTGl0ZXJhbCgiMSIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDEp
OworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMCIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxp
dGVyYWwsIDApOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMTQyIiwgV0dTTDo6VG9rZW5UeXBl
OjpJbnRlZ2VyTGl0ZXJhbCwgMTQyKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjEuMSIsIFdH
U0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMS4xKTsKKyAgICBjaGVja1Npbmds
ZUxpdGVyYWwoIjAuNCIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC40
KTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjAxMjMuNDU2IiwgV0dTTDo6VG9rZW5UeXBlOjpE
ZWNpbWFsRmxvYXRMaXRlcmFsLCAwMTIzLjQ1Nik7CisgICAgY2hlY2tTaW5nbGVUb2tlbigiMDEy
MyIsIFdHU0w6OlRva2VuVHlwZTo6SW52YWxpZCk7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCIw
MTIzLiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMTIzKTsKKyAgICBj
aGVja1NpbmdsZUxpdGVyYWwoIi40NTYiLCBXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExp
dGVyYWwsIDAuNDU2KTsKKyAgICBjaGVja1NpbmdsZVRva2VuKCIuIiwgV0dTTDo6VG9rZW5UeXBl
OjpQZXJpb2QpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJmIiwgV0dTTDo6VG9rZW5UeXBl
OjpEZWNpbWFsRmxvYXRMaXRlcmFsLCA0Mik7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCI0MmUw
ZiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgNDIpOworICAgIGNoZWNr
U2luZ2xlTGl0ZXJhbCgiMDQyZTBmIiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRl
cmFsLCA0Mik7CisgICAgY2hlY2tTaW5nbGVUb2tlbigiMDQyZiIsIFdHU0w6OlRva2VuVHlwZTo6
SW52YWxpZCk7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCI0MmUtMyIsIFdHU0w6OlRva2VuVHlw
ZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgNDJlLTMpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgi
NDJlLWEiLCBXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCA0Mik7Cit9CisKKy0gKHZv
aWQpIHRlc3RMZXhlck9uQ29tcHV0ZVNoYWRlciB7CisgICAgV0dTTDo6TGV4ZXI8TENoYXI+IGxl
eGVyKCJAYmxvY2sgc3RydWN0IEIge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIGE6IGkzMjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQGdyb3VwKDApIEBiaW5kaW5nKDApXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4geDogQjtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQHN0YWdlKGNvbXB1
dGUpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbiBtYWluKCkge1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguYSA9IDQyO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAifSIpOworCisgICAgdW5zaWduZWQgbGluZU51bWJlciA9IDA7Cisg
ICAgYXV0byBjaGVja05leHRUb2tlbiA9IFsmXSAoV0dTTDo6VG9rZW5UeXBlIHR5cGUpIHsKKyAg
ICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gbGV4ZXIubGV4KCk7CisgICAgICAgIFhDVEFzc2Vy
dEVxdWFsKHJlc3VsdC5tX3R5cGUsIHR5cGUpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1
bHQubV9zcGFuLm1fbGluZSwgbGluZU51bWJlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfTsKKyAgICBhdXRvIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyID0gWyZdIChjb25zdCBj
aGFyKiBpZGVudCkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OklkZW50aWZpZXIpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChy
ZXN1bHQubV9pZGVudCwgaWRlbnQpOworICAgIH07CisgICAgYXV0byBjaGVja05leHRUb2tlbklz
TGl0ZXJhbCA9IFsmXSAoV0dTTDo6VG9rZW5UeXBlIHR5cGUsIGRvdWJsZSBsaXRlcmFsVmFsdWUp
IHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tOZXh0VG9rZW4odHlwZSk7Cisg
ICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX2xpdGVyYWxWYWx1ZSwgbGl0ZXJhbFZhbHVl
KTsKKyAgICB9OworCisgICAgLy8gQGJsb2NrIHN0cnVjdCBCIHsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50
aWZpZXIoImJsb2NrIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3
b3JkU3RydWN0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiQiIpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VMZWZ0KTsKKworICAgIC8vIGE6IGkz
MjsKKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImEi
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbG9uKTsKKyAgICBjaGVj
a05leHRUb2tlbklzSWRlbnRpZmllcigiaTMyIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpTZW1pY29sb24pOworCisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlUmlnaHQpOworCisgICAgLy8g
QGdyb3VwKDApIEBiaW5kaW5nKDApCisgICAgbGluZU51bWJlciArPSAyOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0cmlidXRlKTsKKyAgICBjaGVja05leHRUb2tlbklz
SWRlbnRpZmllcigiZ3JvdXAiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBl
OjpJbnRlZ2VyTGl0ZXJhbCwgMCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBl
OjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJp
YnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImJpbmRpbmciKTsKKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0
VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgMCk7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKworICAgIC8vIHZh
cjxzdG9yYWdlLCByZWFkX3dyaXRlPiB4OiBCOworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVj
a05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRWYXIpOworICAgIGNoZWNrTmV4dFRv
a2VuKFdHU0w6OlRva2VuVHlwZTo6TFQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2Vu
VHlwZTo6S2V5d29yZFN0b3JhZ2UpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6Q29tbWEpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZFJl
YWRXcml0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpHVCk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIngiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OkNvbG9uKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiQiIp
OworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6U2VtaWNvbG9uKTsKKworICAg
IC8vIEBzdGFnZShjb21wdXRlKQorICAgIGxpbmVOdW1iZXIgKz0gMjsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lk
ZW50aWZpZXIoInN0YWdlIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQ
YXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJjb21wdXRlIik7Cisg
ICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKworICAgIC8v
IGZuIG1haW4oKSB7CisgICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6S2V5d29yZEZuKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigi
bWFpbiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VMZWZ0KTsKKworICAgIC8vIHguYSA9
IDQyOworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigi
eCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGVyaW9kKTsKKyAgICBj
aGVja05leHRUb2tlbklzSWRlbnRpZmllcigiYSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6RXF1YWwpOworICAgIGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRv
a2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDQyKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyB9CisgICAgKytsaW5lTnVtYmVyOworICAg
IGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VSaWdodCk7CisgICAgY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpFbmRPZkZpbGUpOworfQorCistICh2b2lkKSB0ZXN0
TGV4ZXJPbkdyYXBoaWNzU2hhZGVyIHsKKyAgICBXR1NMOjpMZXhlcjxMQ2hhcj4gbGV4ZXIoIkBz
dGFnZSh2ZXJ0ZXgpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbiB2ZXJ0ZXhT
aGFkZXIoQGxvY2F0aW9uKDApIHg6IHZlYzQ8ZjMyPikgLT4gQGJ1aWx0aW4ocG9zaXRpb24pIHZl
YzQ8ZjMyPiB7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHg7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkBzdGFnZShm
cmFnbWVudClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZuIGZyYWdtZW50U2hh
ZGVyKCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHZlYzQ8ZjMyPigwLjQsIDAuNCwgMC44LCAxLjApO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgICAgdW5zaWduZWQgbGluZU51
bWJlciA9IDA7CisgICAgYXV0byBjaGVja05leHRUb2tlbiA9IFsmXSAoV0dTTDo6VG9rZW5UeXBl
IHR5cGUpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gbGV4ZXIubGV4KCk7CisgICAg
ICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX3R5cGUsIHR5cGUpOworICAgICAgICBYQ1RBc3Nl
cnRFcXVhbChyZXN1bHQubV9zcGFuLm1fbGluZSwgbGluZU51bWJlcik7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKyAgICBhdXRvIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyID0g
WyZdIChjb25zdCBjaGFyKiBpZGVudCkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OklkZW50aWZpZXIpOworICAgICAgICBYQ1RB
c3NlcnRFcXVhbChyZXN1bHQubV9pZGVudCwgaWRlbnQpOworICAgIH07CisgICAgYXV0byBjaGVj
a05leHRUb2tlbklzTGl0ZXJhbCA9IFsmXSAoV0dTTDo6VG9rZW5UeXBlIHR5cGUsIGRvdWJsZSBs
aXRlcmFsVmFsdWUpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tOZXh0VG9r
ZW4odHlwZSk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX2xpdGVyYWxWYWx1ZSwg
bGl0ZXJhbFZhbHVlKTsKKyAgICB9OworCisgICAgLy8gW1tzdGFnZSh2ZXJ0ZXgpXV0KKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0
VG9rZW5Jc0lkZW50aWZpZXIoInN0YWdlIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZXJ0
ZXgiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOwor
CisgICAgKytsaW5lTnVtYmVyOworICAgIC8vIGZuIHZlcnRleFNoYWRlcihAbG9jYXRpb24oMCkg
eDogdmVjNDxmMzI+KSAtPiBAYnVpbHRpbihwb3NpdGlvbikgdmVjNDxmMzI+IHsKKyAgICBjaGVj
a05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgY2hlY2tOZXh0VG9r
ZW5Jc0lkZW50aWZpZXIoInZlcnRleFNoYWRlciIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5
cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImxvY2F0aW9u
Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAg
IGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWws
IDApOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7Cisg
ICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIngiKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkNvbG9uKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigi
dmVjNCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6TFQpOworICAgIGNo
ZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJmMzIiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OkdUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBh
cmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXJyb3cpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0cmlidXRlKTsKKyAgICBjaGVj
a05leHRUb2tlbklzSWRlbnRpZmllcigiYnVpbHRpbiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdH
U0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmll
cigicG9zaXRpb24iKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVu
UmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lk
ZW50aWZpZXIoImYzMiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1Qp
OworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VMZWZ0KTsKKworICAg
IC8vIHJldHVybiB4OworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OktleXdvcmRSZXR1cm4pOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlm
aWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpTZW1pY29sb24p
OworCisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OkJyYWNlUmlnaHQpOworCisgICAgLy8gQHN0YWdlKGZyYWdtZW50KQorICAg
IGxpbmVOdW1iZXIgKz0gMjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0
dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInN0YWdlIik7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4
dFRva2VuSXNJZGVudGlmaWVyKCJmcmFnbWVudCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyBmbiBmcmFnbWVudFNoYWRlcigpIC0+
IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4geworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgY2hlY2tOZXh0VG9rZW5J
c0lkZW50aWZpZXIoImZyYWdtZW50U2hhZGVyIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBcnJv
dyk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAg
IGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJsb2NhdGlvbiIpOworICAgIGNoZWNrTmV4dFRv
a2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0
ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJ
ZGVudGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpM
VCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImYzMiIpOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6QnJhY2VMZWZ0KTsKKworICAgIC8vIHJldHVybiB2ZWM0PGYzMj4oMC40LCAwLjQs
IDAuOCwgMS4wKTsKKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpLZXl3b3JkUmV0dXJuKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmll
cigidmVjNCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6TFQpOworICAg
IGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJmMzIiKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkdUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBl
OjpEZWNpbWFsRmxvYXRMaXRlcmFsLCAwLjQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6Q29tbWEpOworICAgIGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRva2Vu
VHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC40KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OkNvbW1hKTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpU
b2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDAuOCk7CisgICAgY2hlY2tOZXh0VG9rZW4o
V0dTTDo6VG9rZW5UeXBlOjpDb21tYSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dT
TDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCAxLjApOworICAgIGNoZWNrTmV4dFRv
a2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dT
TDo6VG9rZW5UeXBlOjpTZW1pY29sb24pOworCisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlUmlnaHQpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKK30KKworQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xVbml0VGVzdHMubW0gYi9T
b3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmYwNTRhY2JlMDY3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xVbml0VGVzdHMubW0KKysrIC9kZXYvbnVsbApAQCAt
MSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXR1NMLmgiCi0KLSNpbXBvcnQgPFhDVGVz
dC9YQ1Rlc3QuaD4KLSNpbXBvcnQgPHZlY3Rvcj4KLSNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+Ci0j
aW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLUBpbnRlcmZhY2UgV0dTTFVuaXRUZXN0cyA6IFhDVGVz
dENhc2UKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0dTTFVuaXRUZXN0cwotCi0tICh2b2lk
KXRlc3RFeGFtcGxlIHsKLSAgICBkYXRhTG9nKCJhc2RmXG4iKTsKLSAgICBWZWN0b3I8aW50PiB4
IHsgMiwgMywgfTsKLSAgICBWZWN0b3I8aW50PiB5OwotICAgIHkuYXBwZW5kKDIpOwotICAgIHku
YXBwZW5kKDMpOwotICAgIFhDVEFzc2VydEVxdWFsKHgsIHkpOwotICAgIFdHU0w6OnN0YXRpY0No
ZWNrKCIiLCBzdGQ6Om51bGxvcHQpOwotfQotCi1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkOTllNTNjZmMxZTcuLjNmNDBjNjM4
YmU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC03LDcgKzcsNyBAQAogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0JCTFDMDIzRDNGMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMVW5pdFRlc3Rz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwMjNE
M0UyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMubW0gKi87IH07CisJCTFDMDIzRDNG
Mjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDIzRDNFMjc0NDkwNzAwMDFEQjczNCAvKiBX
R1NMTGV4ZXJUZXN0cy5tbSAqLzsgfTsKIAkJMUMwMjNENDAyNzQ0OTA3MDAwMURCNzM0IC8qIGxp
Yndnc2wuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDRUJEN0YyMjcxNkIyQ0MwMEE1MjU0RCAvKiBsaWJ3Z3NsLmEgKi87IH07CiAJCTFDMDIzRDRC
Mjc0NDk1QjkwMDFEQjczNCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAyM0Q0QTI3NDQ5NUI5MDAx
REI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQkxQzJDRURFRTI3MUU4
QTczMDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyQ0VERUQyNzFFOEE3MzAwRURDMTZGIC8qIE1ldGFs
LmZyYW1ld29yayAqLzsgfTsKQEAgLTQxLDYgKzQxLDExIEBACiAJCTFDRUJEN0Y4MjcxNkIzNDQw
MEE1MjU0RCAvKiBXR1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQ0VCRDdGNzI3MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMUNFQkQ4MDMyNzE2QkY4MjAwQTUy
NTREIC8qIFdHU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwICovOyB9OwogCQkxQ0VC
RDgyNjI3MTZDQUNDMDBBNTI1NEQgLyogbGlid2dzbC5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ3RjIyNzE2QjJDQzAwQTUyNTREIC8qIGxp
Yndnc2wuYSAqLzsgfTsKKwkJMzM4QkIyQ0UyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJDRDI3QjZC
NjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLzsgfTsKKwkJMzM4QkIyRDAyN0I2QjYxQjAwRTA2NkFC
IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOEJCMkNGMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgKi87IH07CisJCTMzOEJC
MkQyMjdCNkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJEMTI3QjZCNjNGMDBFMDY2QUIgLyogU291
cmNlU3Bhbi5oICovOyB9OworCQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQzMjdC
NkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oICovOyB9OworCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2
QUIgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLzsgfTsKIC8qIEVu
ZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJv
eHkgc2VjdGlvbiAqLwpAQCAtNjIsNyArNjcsNyBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KIAkJMUMwMjNEM0MyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVz
dHMueGN0ZXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSB3cmFwcGVyLmNmYnVuZGxlOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXR1NMVW5pdFRl
c3RzLnhjdGVzdDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUMwMjNE
M0UyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXR1NMVW5pdFRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzAy
M0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXR1NMTGV4ZXJUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUMwMjNENDcyNzQ0OTE2RDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gV0dTTFVuaXRUZXN0cy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUMwMjNENEEyNzQ0OTVCOTAwMURCNzM0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQzJDRURFRDI3MUU4QTczMDBFREMxNkYgLyog
TWV0YWwuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBNZXRhbC5mcmFtZXdvcms7IHBhdGgg
PSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL01ldGFsLmZyYW1ld29yazsgc291cmNlVHJlZSA9
IFNES1JPT1Q7IH07CkBAIC0xMzUsNiArMTQwLDExIEBACiAJCTFDRUJEODJCMjcxNkNBRkIwMEE1
MjU0RCAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENvcmVG
b3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29y
ZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMUNFQkQ4
MkQyNzE2Q0IxNjAwQTUyNTREIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5h
bWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkxQ0VC
RDgzMDI3MTZDQjM4MDBBNTI1NEQgLyogbGliaWN1Y29yZS50YmQgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAic291cmNlY29kZS50ZXh0LWJhc2VkLWR5
bGliLWRlZmluaXRpb24iOyBuYW1lID0gbGliaWN1Y29yZS50YmQ7IHBhdGggPSB1c3IvbGliL2xp
YmljdWNvcmUudGJkOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMzM4QkIyQ0QyN0I2QjYw
MjAwRTA2NkFCIC8qIFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMzOEJCMkNGMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMzOEJCMkQxMjdCNkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNvdXJjZVNwYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4QkIyRDMy
N0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTE3MCw3ICsxODAsNyBAQAogCQkx
QzAyM0QzRDI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0
IC8qIFdHU0xVbml0VGVzdHMubW0gKi8sCisJCQkJMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0IC8q
IFdHU0xMZXhlclRlc3RzLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBXR1NMVW5pdFRlc3RzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MSw4ICsyNzEsMTMgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTFDRUJEODA3MjcxNkMyQzAwMEE1MjU0RCAvKiBBU1QuaCAqLywKIAkJCQkx
Q0VCRDgwNDI3MTZCRkFCMDBBNTI1NEQgLyogY29uZmlnLmggKi8sCi0JCQkJMUNFQkQ4MDIyNzE2
QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwICovLAorCQkJCTMzOEJCMkQzMjdCNkI2NkMwMEUwNjZB
QiAvKiBMZXhlci5oICovLAorCQkJCTMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5j
cHAgKi8sCisJCQkJMzM4QkIyRDEyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLywK
KwkJCQkzMzhCQjJDRDI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLywKKwkJCQkzMzhCQjJD
RjI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4uY3BwICovLAogCQkJCTFDRUJEN0Y3MjcxNkIzNDQw
MEE1MjU0RCAvKiBXR1NMLmggKi8sCisJCQkJMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdH
U0wuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBXR1NMOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTMxMiw2ICszMjcsOSBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7
CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMzM4
QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMzOEJCMkQ0MjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzM4QkIyQ0UyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
Q0VCRDdGODI3MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zODEsNyArMzk5
LDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewogCQkJCUJ1aWxk
SW5kZXBlbmRlbnRUYXJnZXRzSW5QYXJhbGxlbCA9IE5POwotCQkJCURlZmF1bHRCdWlsZFN5c3Rl
bVR5cGVGb3JXb3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTMz
MDsKIAkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewogCQkJCQkxQzAyM0QzQjI3NDQ5MDcwMDAxREI3
MzQgPSB7CkBAIC00NTksNyArNDc2LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTFD
MDIzRDNGMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMVW5pdFRlc3RzLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMwMjNEM0YyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC00OTcsNyArNTE0LDkgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTMzOEJCMkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMzhCQjJEMDI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451909</attachid>
            <date>2022-02-14 08:53:49 -0800</date>
            <delta_ts>2022-02-14 11:09:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchLexer</filename>
            <type>text/plain</type>
            <size>59295</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggOGI1NzZmNmFlNWE4Li5kNjJmNzg5MmNmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNzIgQEAKKzIwMjItMDItMTQgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNv
bT4KKworICAgICAgICBbV0dTTF0gSW1wbGVtZW50IGVub3VnaCBvZiB0aGUgbGV4ZXIgZm9yIHRo
ZSBzaW1wbGVzdCBzaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzMyNzYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NzMyNjc1PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGlzIGp1
c3QgZW5vdWdoIG9mIHRoZSBsZXhlciBpbiB0aGlzIHBhdGNoIHRvIHBhc3MgdGhlIHVuaXQgdGVz
dHMgKGFsc28gYWRkZWQgYnkgdGhlIHBhdGNoKS4KKyAgICAgICAgVGhlIGxleGVyIGlzIHRlbXBs
YXRlZCBieSB0aGUgY2hhcmFjdGVyIHNpemUsIGZvbGxvd2luZyB0aGUgY29kZSBmcm9tIEpTQydz
IGxleGVyLgorCisgICAgICAgIFRoZSBsZXhpbmcgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMg
aXMgYSBiaXQgaGFja3ksIGFuZCBwcm9iYWJseSBoYXMgc29tZSBwcmVjaXNpb24gaXNzdWVzIGlu
IGNvcm5lciBjYXNlcywgYnV0IGl0IHBhc3NlZCBhbGwgc2ltcGxlIHVuaXQgdGVzdHMsCisgICAg
ICAgIHNvIGZvciBub3cgSSBqdXN0IGxlZnQgaXQgYXMgaXMgd2l0aCBhIEZJWE1FLCB0byBiZSBm
aXhlZCBvbmNlIHdlIGNhbiBydW4gdGhlIGZ1bGwgQ1RTLgorCisgICAgICAgIFRoZSBUb2tlblR5
cGUgaW5jbHVkZXMgYW4gYEludmFsaWRgIHZhbHVlLiBJIGNvdWxkIGluc3RlYWQgaGF2ZSB1c2Vk
IHN0ZDo6b3B0aW9uYWw8VG9rZW4+IGV2ZXJ5d2hlcmUuCisgICAgICAgIEkgbWFkZSB0aGlzIGNo
b2ljZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIC0gc3BhY2UgZWZmaWNpZW5jeTogd2UgZG9u
J3QgdXNlIGFuIGV4dHJhIHdvcmQgb2YgbWVtb3J5IGZvciB0aGUgdmFyaWFudCdzIHRhZworICAg
ICAgICAtIGVhc2Ugb2YgdXNlOiBldmVyeXdoZXJlIHRoYXQgd2UgY2hlY2sgZm9yIGEgZ2l2ZW4g
VG9rZW5UeXBlLCB3ZSB3b3VsZCBoYXZlIHRvIGZpcnN0IGNoZWNrIHRoYXQgdGhlIFRva2VuIGlz
IG5vdCBudWxsb3B0LCBhbmQgdGhlbiBjaGVjayB0aGUgVG9rZW5UeXBlLgorCisgICAgICAgICog
Q29uZmlndXJhdGlvbnMvV0dTTFVuaXRUZXN0cy54Y2NvbmZpZzoKKyAgICAgICAgKiBXR1NML0xl
eGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6bGV4KToKKyAgICAgICAg
KFdHU0w6OkxleGVyPFQ+OjpzaGlmdCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6cGVlayk6
CisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6c2tpcFdoaXRlc3BhY2UpOgorICAgICAgICAoV0dT
TDo6TGV4ZXI8VD46OmlzQXRFbmRPZkZpbGUgY29uc3QpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8
VD46OnBhcnNlRGVjaW1hbEludGVnZXIpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBhcnNl
RGVjaW1hbEZsb2F0RXhwb25lbnQpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBhcnNlSW50
ZWdlckxpdGVyYWxTdWZmaXgpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc1doaXRl
U3BhY2UpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJTdGFydCk6
CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVy
KToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6aXNEZWNpbWFsKToKKyAgICAgICAgKFdH
U0w6OkxleGVyPExDaGFyPjo6aXNIZXhhZGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxM
Q2hhcj46OnJlYWREZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6cmVhZEhl
eGFkZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNXaGl0ZVNwYWNlKToK
KyAgICAgICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNJZGVudGlmaWVyU3RhcnQpOgorICAgICAg
ICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJhY3Rlcik6CisgICAg
ICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OmlzRGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhl
cjxVQ2hhcj46OmlzSGV4YWRlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojpy
ZWFkRGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OnJlYWRIZXhhZGVjaW1h
bCk6CisgICAgICAgICogV0dTTC9MZXhlci5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkxleGVy
OjpMZXhlcik6CisgICAgICAgIChXR1NMOjpMZXhlcjo6Y3VycmVudFBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdHU0w6OkxleGVyOjpjdXJyZW50T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdH
U0w6OkxleGVyOjpjdXJyZW50VG9rZW5MZW5ndGggY29uc3QpOgorICAgICAgICAoV0dTTDo6TGV4
ZXI6Om1ha2VUb2tlbik6CisgICAgICAgIChXR1NMOjpMZXhlcjo6bWFrZUxpdGVyYWxUb2tlbik6
CisgICAgICAgIChXR1NMOjpMZXhlcjo6bWFrZUlkZW50aWZpZXJUb2tlbik6CisgICAgICAgICog
V0dTTC9Tb3VyY2VTcGFuLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6U291cmNlU3Bhbjo6U291
cmNlU3Bhbik6CisgICAgICAgICogV0dTTC9Ub2tlbi5jcHA6IEFkZGVkLgorICAgICAgICAoV0dT
TDo6dG9TdHJpbmcpOgorICAgICAgICAqIFdHU0wvVG9rZW4uaDogQWRkZWQuCisgICAgICAgIChX
R1NMOjpUb2tlbjo6VG9rZW4pOgorICAgICAgICAoV0dTTDo6VG9rZW46Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXR1NMOjpUb2tlbjo6flRva2VuKToKKyAgICAgICAgKiBXR1NML1dHU0wuY3BwOgor
ICAgICAgICAoV0dTTDo6c3RhdGljQ2hlY2spOgorICAgICAgICAqIFdHU0xVbml0VGVzdHMvV0dT
TExleGVyVGVzdHMubW06IEFkZGVkLgorICAgICAgICAoLVtXR1NMTGV4ZXJUZXN0cyB0ZXN0TGV4
ZXJPblNpbmdsZVRva2Vuc10pOgorICAgICAgICAoLVtXR1NMTGV4ZXJUZXN0cyB0ZXN0TGV4ZXJP
bkNvbXB1dGVTaGFkZXJdKToKKyAgICAgICAgKC1bV0dTTExleGVyVGVzdHMgdGVzdExleGVyT25H
cmFwaGljc1NoYWRlcl0pOgorICAgICAgICAqIFdHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKC1bV0dTTFVuaXRUZXN0cyB0ZXN0RXhhbXBsZV0pOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDIy
LTAxLTI2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dlYkdQVV0gTWFrZSBzdXJlIFdHU0xVbml0VGVzdHMgY2FuIGNhbGwgaW50byBXR1NMCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0NvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNj
b25maWcgYi9Tb3VyY2UvV2ViR1BVL0NvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNjb25m
aWcKaW5kZXggMDE1MDQ1MDI0Mjc0Li44NDYxMjU5YTQ4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvQ29uZmlndXJhdGlvbnMvV0dTTFVuaXRUZXN0cy54Y2NvbmZpZworKysgYi9Tb3VyY2Uv
V2ViR1BVL0NvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNjb25maWcKQEAgLTIxLDYgKzIx
LDcgQEAKIC8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7CiBIRUFERVJfU0VBUkNIX1BBVEhTID0gIiQoQlVJTFRfUFJPRFVDVFNfRElSKS91
c3IvbG9jYWwvaW5jbHVkZSIgJChpbmhlcml0ZWQpOwogUFJPRFVDVF9OQU1FID0gV0dTTFVuaXRU
ZXN0czsKIEVOQUJMRV9URVNUQUJJTElUWSA9IFlFUzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV0dTTC9MZXhlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2IzODdkMjNmNjk5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNwcApAQCAtMCwwICsxLDQ3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorCitu
YW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorVG9rZW4gTGV4ZXI8VD46
OmxleCgpCit7CisgICAgc2tpcFdoaXRlc3BhY2UoKTsKKworICAgIG1fdG9rZW5TdGFydGluZ1Bv
c2l0aW9uID0gbV9jdXJyZW50UG9zaXRpb247CisKKyAgICBpZiAoaXNBdEVuZE9mRmlsZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKKworICAgIHN3
aXRjaCAobV9jdXJyZW50KSB7CisgICAgY2FzZSAnKCc6CisgICAgICAgIHNoaWZ0KCk7CisgICAg
ICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNhc2UgJykn
OgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6
UGFyZW5SaWdodCk7CisgICAgY2FzZSAneyc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJl
dHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFjZUxlZnQpOworICAgIGNhc2UgJ30nOgorICAg
ICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QnJhY2VS
aWdodCk7CisgICAgY2FzZSAnWyc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBt
YWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFja2V0TGVmdCk7CisgICAgY2FzZSAnXSc6CisgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFja2V0Umln
aHQpOworICAgIGNhc2UgJzonOgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFr
ZVRva2VuKFRva2VuVHlwZTo6Q29sb24pOworICAgIGNhc2UgJywnOgorICAgICAgICBzaGlmdCgp
OworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6Q29tbWEpOworICAgIGNhc2Ug
JzsnOgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6U2VtaWNvbG9uKTsKKyAgICBjYXNlICc9JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkVxdWFsKTsKKyAgICBjYXNlICc+JzoKKyAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkdUKTsKKyAg
ICBjYXNlICc8JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihU
b2tlblR5cGU6OkxUKTsKKyAgICBjYXNlICdAJzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2FzZSAnLic6IHsK
KyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gY3VycmVudE9mZnNl
dCgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3N0UGVyaW9kID0gcGFyc2VE
ZWNpbWFsSW50ZWdlcigpOworICAgICAgICBpZiAoIXBvc3RQZXJpb2QpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGxpdGVy
YWxWYWx1ZSA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgLy8gRklYTUU6IHZlcmlmeSB0
aGF0IHRoZXJlIGlzIG5vIHVubmFjZXB0YWJsZSBwcmVjaXNpb24gbG9zcworICAgICAgICAvLyBJ
dCBzaG91bGQgYmUgdGVzdGVkIGluIHRoZSBDVFMsIGZvciBub3cgbGV0J3MgZ2V0IHNvbWV0aGlu
ZyB0aGF0IHdvcmtzCisgICAgICAgIC8vIEFsc28gdGhlIHNhbWUgY29kZSBhcHBlYXJzIGluIGEg
ZmV3IHBsYWNlcyBiZWxvdy4KKyAgICAgICAgbGl0ZXJhbFZhbHVlIC89IHBvdygxMCwgY3VycmVu
dE9mZnNldCgpIC0gb2Zmc2V0KTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBleHBv
bmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKTsKKyAgICAgICAgaWYgKGV4cG9uZW50
KQorICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICo9IHBvdygxMCwgZXhwb25lbnQudmFsdWUoKSk7
CisgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9CisgICAgY2FzZSAnLSc6CisgICAgICAgIHNo
aWZ0KCk7CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJz4nKSB7CisgICAgICAgICAgICBzaGlm
dCgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkFycm93KTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlICcwJzogeworICAgICAgICBzaGlmdCgp
OworICAgICAgICBkb3VibGUgbGl0ZXJhbFZhbHVlID0gMDsKKyAgICAgICAgaWYgKG1fY3VycmVu
dCA9PSAneCcpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgaGV4YWRl
Y2ltYWwgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAg
ICAgICAgICBib29sIGhleE51bWJlcklzRW1wdHkgPSB0cnVlOworICAgICAgICAgICAgd2hpbGUg
KGlzSGV4YWRlY2ltYWwobV9jdXJyZW50KSkgeworICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1
ZSAqPSAxNjsKKyAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUgKz0gcmVhZEhleGFkZWNpbWFs
KG1fY3VycmVudCk7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICBo
ZXhOdW1iZXJJc0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aGV4TnVtYmVySXNFbXB0eSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZUludGVnZXJMaXRlcmFsU3VmZml4KGxpdGVyYWxWYWx1ZSk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzRmxvYXRpbmdQb2ludCA9IGZhbHNlOworICAgICAgICBpZiAoaXNE
ZWNpbWFsKG1fY3VycmVudCkgfHwgbV9jdXJyZW50ID09ICcuJyB8fCBtX2N1cnJlbnQgPT0gJ2Un
IHx8IG1fY3VycmVudCA9PSAnRScpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IGludGVnZXJQYXJ0ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgICAgICAgICAgaWYg
KGludGVnZXJQYXJ0KQorICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSA9IGludGVnZXJQYXJ0
LnZhbHVlKCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgeworICAgICAgICAg
ICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hhcmUgdGhpcyBjb2RlIHdpdGggdGhlIFsxLTld
IGNhc2UKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7
CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBlcmlvZCA9IHBh
cnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zdFBlcmlvZCkgewor
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgZnJhY3Rpb25hbFBhcnQgPSBwb3N0UGVyaW9kLnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxQYXJ0IC89IHBvdygxMCwgY3Vy
cmVudE9mZnNldCgpIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVl
ICs9IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAobV9jdXJyZW50ID09ICdmJykgeworICAgICAgICAgICAgICAgICAgICBzaGlmdCgpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2lt
YWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4gZXhwb25lbnQg
PSBwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCkpIHsKKyAgICAgICAgICAgICAgICBsaXRlcmFs
VmFsdWUgKj0gcG93KDEwLCBleHBvbmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVy
YWxWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBEZWNpbWFsIGludGVnZXJz
IGFyZSBub3QgYWxsb3dlZCB0byBzdGFydCB3aXRoIDAuCisgICAgICAgICAgICBpZiAoIWlzRmxv
YXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6
SW52YWxpZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnZicpIHsKKyAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihU
b2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzRmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlTGl0
ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZWdlckxpdGVyYWxTdWZmaXgobGl0ZXJhbFZhbHVlKTsK
KyAgICB9CisgICAgY2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAgY2FzZSAnMyc6CisgICAg
Y2FzZSAnNCc6CisgICAgY2FzZSAnNSc6CisgICAgY2FzZSAnNic6CisgICAgY2FzZSAnNyc6Cisg
ICAgY2FzZSAnOCc6CisgICAgY2FzZSAnOSc6IHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gdmFsdWUgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6SW52YWxpZCk7CisgICAg
ICAgIGRvdWJsZSBsaXRlcmFsVmFsdWUgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICBib29sIGlz
RmxvYXRpbmdQb2ludCA9IGZhbHNlOworICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgewor
ICAgICAgICAgICAgaXNGbG9hdGluZ1BvaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIHNoaWZ0KCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3N0UGVyaW9kID0gcGFyc2VEZWNpbWFsSW50
ZWdlcigpOworICAgICAgICAgICAgaWYgKHBvc3RQZXJpb2QpIHsKKyAgICAgICAgICAgICAgICBk
b3VibGUgZnJhY3Rpb25hbFBhcnQgPSBwb3N0UGVyaW9kLnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgZnJhY3Rpb25hbFBhcnQgLz0gcG93KDEwLCBjdXJyZW50T2Zmc2V0KCkgLSBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSArPSBmcmFjdGlvbmFsUGFydDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBleHBv
bmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKSkgeworICAgICAgICAgICAgbGl0ZXJh
bFZhbHVlICo9IHBvdygxMCwgZXhwb25lbnQudmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxW
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnZicpIHsKKyAgICAg
ICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tl
blR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFpc0Zsb2F0aW5nUG9pbnQpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnRl
Z2VyTGl0ZXJhbFN1ZmZpeChsaXRlcmFsVmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZUxpdGVy
YWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7Cisg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChtX2N1cnJl
bnQpKSB7CisgICAgICAgICAgICBjb25zdCBUKiBzdGFydE9mVG9rZW4gPSBtX2NvZGU7CisgICAg
ICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgd2hpbGUgKGlzVmFsaWRJZGVudGlmaWVyQ2hh
cmFjdGVyKG1fY3VycmVudCkpCisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBhIHRyaWUgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgaGVyZSwgbG9vayBhdCBK
YXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5IGZvciBhbiBleGFtcGxlIG9m
IGNvZGUgYXV0b2dlbmVyYXRpb24gdGhhdCBwcm9kdWNlcyBzdWNoIGEgdHJpZS4KKyAgICAgICAg
ICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0YXJ0T2ZUb2tlbiwgY3VycmVudFRva2VuTGVuZ3RoKCkg
fTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoYXQgdHJ1ZS9mYWxzZS9m
MzIvdTMyL2kzMi9ib29sIG5lZWQgdG8gYmUgdGhlaXIgb3duIHRva2VucywgdGhleSBjb3VsZCBq
dXN0IGJlIHJlZ3VsYXIgaWRlbnRpZmllcnMuCisgICAgICAgICAgICBpZiAodmlldyA9PSAidHJ1
ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkxpdGVyYWxU
cnVlKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJmYWxzZSIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkxpdGVyYWxGYWxzZSk7CisgICAgICAgICAgICBp
ZiAodmlldyA9PSAiYm9vbCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tl
blR5cGU6OktleXdvcmRCb29sKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJpMzIiKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkSTMyKTsKKyAg
ICAgICAgICAgIGlmICh2aWV3ID09ICJ1MzIiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkVTMyKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJm
MzIiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3Jk
RjMyKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJmbiIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgICAgICAgICBpZiAodmll
dyA9PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5U
eXBlOjpLZXl3b3JkRnVuY3Rpb24pOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInByaXZhdGUi
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkUHJp
dmF0ZSk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAicmVhZCIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRSZWFkKTsKKyAgICAgICAgICAgIGlm
ICh2aWV3ID09ICJyZWFkX3dyaXRlIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2Vu
KFRva2VuVHlwZTo6S2V5d29yZFJlYWRXcml0ZSk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAi
cmV0dXJuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5
d29yZFJldHVybik7CisgICAgICAgICAgICBpZiAodmlldyA9PSAic3RvcmFnZSIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRTdG9yYWdlKTsKKyAg
ICAgICAgICAgIGlmICh2aWV3ID09ICJzdHJ1Y3QiKQorICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkU3RydWN0KTsKKyAgICAgICAgICAgIGlmICh2aWV3
ID09ICJ1bmlmb3JtIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6S2V5d29yZFVuaWZvcm0pOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInZhciIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRWYXIpOworICAg
ICAgICAgICAgaWYgKHZpZXcgPT0gIndvcmtncm91cCIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRXb3JrZ3JvdXApOworICAgICAgICAgICAgaWYg
KHZpZXcgPT0gIndyaXRlIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2Vu
VHlwZTo6S2V5d29yZFdyaXRlKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJhc20iIHx8IHZp
ZXcgPT0gImJmMTYiIHx8IHZpZXcgPT0gImNvbnN0IiB8fCB2aWV3ID09ICJkbyIgfHwgdmlldyA9
PSAiZW51bSIKKyAgICAgICAgICAgICAgICB8fCB2aWV3ID09ICJmMTYiIHx8IHZpZXcgPT0gImY2
NCIgfHwgdmlldyA9PSAiaGFuZGxlIiB8fCB2aWV3ID09ICJpOCIgfHwgdmlldyA9PSAiaTE2Igor
ICAgICAgICAgICAgICAgIHx8IHZpZXcgPT0gImk2NCIgfHwgdmlldyA9PSAibWF0IiB8fCB2aWV3
ID09ICJwcmVtZXJnZSIgfHwgdmlldyA9PSAicmVnYXJkbGVzcyIKKyAgICAgICAgICAgICAgICB8
fCB2aWV3ID09ICJ0eXBlZGVmIiB8fCB2aWV3ID09ICJ1OCIgfHwgdmlldyA9PSAidTE2IiB8fCB2
aWV3ID09ICJ1NjQiIHx8IHZpZXcgPT0gInVubGVzcyIKKyAgICAgICAgICAgICAgICB8fCB2aWV3
ID09ICJ1c2luZyIgfHwgdmlldyA9PSAidmVjIiB8fCB2aWV3ID09ICJ2b2lkIiB8fCB2aWV3ID09
ICJ3aGlsZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OlJl
c2VydmVkV29yZCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUlkZW50aWZpZXJUb2tlbih2aWV3
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG1ha2VUb2tl
bihUb2tlblR5cGU6OkludmFsaWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQg
TGV4ZXI8VD46OnNoaWZ0KCkKK3sKKyAgICAvLyBBdCBvbmUgcG9pbnQgdGltaW5nIHNob3dlZCB0
aGF0IHNldHRpbmcgbV9jdXJyZW50IHRvIDAgdW5jb25kaXRpb25hbGx5IHdhcyBmYXN0ZXIgdGhh
biBhbiBpZi1lbHNlIHNlcXVlbmNlLgorICAgIG1fY3VycmVudCA9IDA7CisgICAgKyttX2NvZGU7
CisgICAgKyttX2N1cnJlbnRQb3NpdGlvbi5tX29mZnNldDsKKyAgICArK21fY3VycmVudFBvc2l0
aW9uLm1fbGluZU9mZnNldDsKKyAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCisg
ICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
VCBMZXhlcjxUPjo6cGVlayh1bnNpZ25lZCBpKQoreworICAgIGlmIChVTkxJS0VMWShtX2NvZGUg
KyBpID49IG1fY29kZUVuZCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAqKG1fY29k
ZSArIGkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnNraXBX
aGl0ZXNwYWNlKCkKK3sKKyAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKG1fY3VycmVudCkpIHsKKyAg
ICAgICAgaWYgKG1fY3VycmVudCA9PSAnXG4nKSB7CisgICAgICAgICAgICBzaGlmdCgpOworICAg
ICAgICAgICAgKyttX2N1cnJlbnRQb3NpdGlvbi5tX2xpbmU7CisgICAgICAgICAgICBtX2N1cnJl
bnRQb3NpdGlvbi5tX2xpbmVPZmZzZXQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgTGV4ZXI8
VD46OmlzQXRFbmRPZkZpbGUoKSBjb25zdAoreworICAgIGlmIChtX2NvZGUgPT0gbV9jb2RlRW5k
KSB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIEFTU0VSVChtX2NvZGUgPCBtX2NvZGVFbmQpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBMZXhl
cjxUPjo6cGFyc2VEZWNpbWFsSW50ZWdlcigpCit7CisgICAgaWYgKCFpc0RlY2ltYWwobV9jdXJy
ZW50KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIENoZWNrZWRVaW50NjQg
dmFsdWUgPSAwOworICAgIHdoaWxlIChpc0RlY2ltYWwobV9jdXJyZW50KSkgeworICAgICAgICB2
YWx1ZSAqPSAxMHVsbDsKKyAgICAgICAgdmFsdWUgKz0gcmVhZERlY2ltYWwobV9jdXJyZW50KTsK
KyAgICAgICAgc2hpZnQoKTsKKyAgICB9CisgICAgaWYgKHZhbHVlLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB2YWx1ZS52YWx1ZSgp
IH07Cit9CisKKy8vIFBhcnNlIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rZj8gaWYgaXQgaXMg
cHJlc2VudCwgYW5kIHJldHVybiB0aGUgZXhwb25lbnQKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RkOjpvcHRpb25hbDxpbnQ2NF90PiBMZXhlcjxUPjo6cGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVu
dCgpCit7CisgICAgVCBjaGFyMSA9IHBlZWsoMSk7CisgICAgVCBjaGFyMiA9IHBlZWsoMik7Cisg
ICAgLy8gQ2hlY2sgZm9yIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rCisgICAgaWYgKG1fY3Vy
cmVudCAhPSAnZScgJiYgbV9jdXJyZW50ICE9ICdFJykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoY2hhcjEgPT0gJysnIHx8IGNoYXIxID09ICctJykgeworICAgICAgICBp
ZiAoIWlzRGVjaW1hbChjaGFyMikpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0gZWxzZSBpZiAoIWlzRGVjaW1hbChjaGFyMSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgc2hpZnQoKTsKKworICAgIGJvb2wgbmVnYXRlRXhwb25lbnQgPSBmYWxzZTsK
KyAgICBpZiAobV9jdXJyZW50ID09ICctJykgeworICAgICAgICBuZWdhdGVFeHBvbmVudCA9IHRy
dWU7CisgICAgICAgIHNoaWZ0KCk7CisgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJysnKQor
ICAgICAgICBzaGlmdCgpOworCisgICAgc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBleHBvbmVudCA9
IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICBpZiAoIWV4cG9uZW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIENoZWNrZWRJbnQ2NCBleHBvbmVudFZhbHVlID0gZXhwb25l
bnQudmFsdWUoKTsKKyAgICBpZiAobmVnYXRlRXhwb25lbnQpCisgICAgICAgIGV4cG9uZW50VmFs
dWUgPSAtIGV4cG9uZW50VmFsdWU7CisgICAgaWYgKGV4cG9uZW50VmFsdWUuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB7IGV4cG9uZW50
VmFsdWUudmFsdWUoKSB9OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUb2tlbiBMZXhl
cjxUPjo6cGFyc2VJbnRlZ2VyTGl0ZXJhbFN1ZmZpeChkb3VibGUgbGl0ZXJhbFZhbHVlKQorewor
ICAgIGlmIChtX2N1cnJlbnQgPT0gJ2knKSB7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJl
dHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxTaWduZWQsIGxp
dGVyYWxWYWx1ZSk7CisgICAgfQorICAgIGlmIChtX2N1cnJlbnQgPT0gJ3UnKSB7CisgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6SW50
ZWdlckxpdGVyYWxVbnNpZ25lZCwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIG1h
a2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsK
K307CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8TENoYXI+Ojppc1do
aXRlU3BhY2UoTENoYXIgY2gpCit7CisgICAgc3dpdGNoIChjaCkgeworICAgIGNhc2UgJyAnOgor
ICAgIGNhc2UgJ1x0JzoKKyAgICBjYXNlICdcbic6CisgICAgY2FzZSAnXHYnOgorICAgIGNhc2Ug
J1xmJzoKKyAgICBjYXNlICdccic6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNf
SU5MSU5FIGJvb2wgTGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJTdGFydChMQ2hhciBjaCkKK3sK
KyAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYgY2gg
PD0gJ1onKTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxMQ2hh
cj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKExDaGFyIGNoKQoreworICAgIHJldHVybiAo
Y2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fCBjaCA9PSAnXyc7Cit9CisKK3RlbXBsYXRlIDw+CitB
TFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8TENoYXI+Ojppc0RlY2ltYWwoTENoYXIgY2gpCit7Cisg
ICAgcmV0dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKK30KKwordGVtcGxhdGUgPD4KK0FM
V0FZU19JTkxJTkUgYm9vbCBMZXhlcjxMQ2hhcj46OmlzSGV4YWRlY2ltYWwoTENoYXIgY2gpCit7
CisgICAgcmV0dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fCAoY2ggPj0gJ2EnICYmIGNo
IDw9ICdmJykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpOworfQorCit0ZW1wbGF0ZSA8Pgor
QUxXQVlTX0lOTElORSB1aW50NjRfdCBMZXhlcjxMQ2hhcj46OnJlYWREZWNpbWFsKExDaGFyIGNo
KQoreworICAgIEFTU0VSVChpc0RlY2ltYWwoY2gpKTsKKyAgICByZXR1cm4gY2ggLSAnMCc7Cit9
CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IExleGVyPExDaGFyPjo6cmVh
ZEhleGFkZWNpbWFsKExDaGFyIGNoKQoreworICAgIEFTU0VSVChpc0hleGFkZWNpbWFsKGNoKSk7
CisgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpCisgICAgICAgIHJldHVybiBjaCAtICcw
JzsKKyAgICBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykKKyAgICAgICAgcmV0dXJuIGNoIC0g
J2EnOworICAgIEFTU0VSVChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKTsKKyAgICByZXR1cm4gY2gg
LSAnQSc7Cit9CisKKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxVQ2hh
cj46OmlzV2hpdGVTcGFjZShVQ2hhciBjaCkKK3sKKyAgICAvLyBXR1NMIGRvZXMgbm90IGN1cnJl
bnRseSBzdXBwb3J0IGFueSBub24tQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCisgICAgcmV0
dXJuIExleGVyPExDaGFyPjo6aXNXaGl0ZVNwYWNlKHN0YXRpY19jYXN0PExDaGFyPihjaCkpOwor
fQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFVDaGFyPjo6aXNJZGVu
dGlmaWVyU3RhcnQoVUNoYXIgY2gpCit7CisgICAgLy8gV0dTTCBkb2VzIG5vdCBjdXJyZW50bHkg
c3VwcG9ydCBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gaWRlbnRpZmllcnMKKyAgICByZXR1
cm4gTGV4ZXI8TENoYXI+Ojppc0lkZW50aWZpZXJTdGFydChzdGF0aWNfY2FzdDxMQ2hhcj4oY2gp
KTsKK30KKwordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxVQ2hhcj46Omlz
VmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKFVDaGFyIGNoKQoreworICAgIC8vIFdHU0wgZG9lcyBu
b3QgY3VycmVudGx5IHN1cHBvcnQgYW55IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGlkZW50aWZp
ZXJzCisgICAgcmV0dXJuIExleGVyPExDaGFyPjo6aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIo
c3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5F
IGJvb2wgTGV4ZXI8VUNoYXI+Ojppc0RlY2ltYWwoVUNoYXIgY2gpCit7CisgICAgcmV0dXJuIExl
eGVyPExDaGFyPjo6aXNEZWNpbWFsKHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQorCit0ZW1w
bGF0ZSA8PgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFVDaGFyPjo6aXNIZXhhZGVjaW1hbChV
Q2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+Ojppc0hleGFkZWNpbWFsKHN0YXRp
Y19jYXN0PExDaGFyPihjaCkpOworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSB1aW50
NjRfdCBMZXhlcjxVQ2hhcj46OnJlYWREZWNpbWFsKFVDaGFyIGNoKQoreworICAgIHJldHVybiBM
ZXhlcjxMQ2hhcj46OnJlYWREZWNpbWFsKHN0YXRpY19jYXN0PExDaGFyPihjaCkpOworfQorCit0
ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSB1aW50NjRfdCBMZXhlcjxVQ2hhcj46OnJlYWRIZXhh
ZGVjaW1hbChVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gTGV4ZXI8TENoYXI+OjpyZWFkSGV4YWRl
Y2ltYWwoc3RhdGljX2Nhc3Q8TENoYXI+KGNoKSk7Cit9CisKK3RlbXBsYXRlIGNsYXNzIExleGVy
PExDaGFyPjsKK3RlbXBsYXRlIGNsYXNzIExleGVyPFVDaGFyPjsKKworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9MZXhlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTA0ZjM1NTkwNDA0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmgKQEAgLTAsMCArMSwx
MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRva2VuLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBMZXhlciB7CitwdWJsaWM6CisgICAgTGV4ZXIoY29uc3QgU3RyaW5nJiB3Z3NsKQorICAgIHsK
KyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8VCwgTENoYXI+Ojp2YWx1ZSkgewor
ICAgICAgICAgICAgbV9jb2RlID0gd2dzbC5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgbV9j
b2RlRW5kID0gbV9jb2RlICsgd2dzbC5zaXplSW5CeXRlcygpOworICAgICAgICB9IGVsc2UgaWYg
Y29uc3RleHByIChzdGQ6OmlzX3NhbWU8VCwgVUNoYXI+Ojp2YWx1ZSkgeworICAgICAgICAgICAg
bV9jb2RlID0gd2dzbC5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgIEFTU0VSVCghKHdnc2wu
c2l6ZUluQnl0ZXMoKSAlIDIpKTsKKyAgICAgICAgICAgIG1fY29kZUVuZCA9IG1fY29kZSArIHdn
c2wuc2l6ZUluQnl0ZXMoKSAvIDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBtX2N1cnJlbnQgPSAobV9jb2RlICE9
IG1fY29kZUVuZCkgPyAqbV9jb2RlIDogMDsKKyAgICB9CisKKyAgICBUb2tlbiBsZXgoKTsKKyAg
ICBib29sIGlzQXRFbmRPZkZpbGUoKSBjb25zdDsKKyAgICBTb3VyY2VQb3NpdGlvbiBjdXJyZW50
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRQb3NpdGlvbjsgfQorCisgICAgLy8g
T25seSBwdWJsaWMgc28gdGhhdCB0aGUgVUNoYXIgdmVyc2lvbiBvZiB0aGUgTGV4ZXIgY2FuIGRl
ZmVyIHRvIHRoZSBMQ2hhciB2ZXJzaW9uCisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZVNwYWNlKFQg
Y2hhcmFjdGVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc0lkZW50aWZpZXJTdGFydChUIGNoYXJhY3Rl
cik7CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoVCBjaGFyYWN0
ZXIpOworICAgIHN0YXRpYyBib29sIGlzRGVjaW1hbChUIGNoYXJhY3Rlcik7CisgICAgc3RhdGlj
IGJvb2wgaXNIZXhhZGVjaW1hbChUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIHVpbnQ2NF90IHJl
YWREZWNpbWFsKFQgY2hhcmFjdGVyKTsKKyAgICBzdGF0aWMgdWludDY0X3QgcmVhZEhleGFkZWNp
bWFsKFQgY2hhcmFjdGVyKTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBjdXJyZW50T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zaXRpb24ubV9vZmZzZXQ7IH0KKyAgICB1bnNp
Z25lZCBjdXJyZW50VG9rZW5MZW5ndGgoKSBjb25zdCB7IHJldHVybiBjdXJyZW50T2Zmc2V0KCkg
LSBtX3Rva2VuU3RhcnRpbmdQb3NpdGlvbi5tX29mZnNldDsgfQorCisgICAgVG9rZW4gbWFrZVRv
a2VuKFRva2VuVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgdHlwZSwgbV90b2tl
blN0YXJ0aW5nUG9zaXRpb24sIGN1cnJlbnRUb2tlbkxlbmd0aCgpIH07CisgICAgfQorICAgIFRv
a2VuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGRvdWJsZSBsaXRlcmFsVmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4geyB0eXBlLCBtX3Rva2VuU3RhcnRpbmdQb3NpdGlvbiwg
Y3VycmVudFRva2VuTGVuZ3RoKCksIGxpdGVyYWxWYWx1ZSB9OworICAgIH0KKyAgICBUb2tlbiBt
YWtlSWRlbnRpZmllclRva2VuKFN0cmluZ1ZpZXcgdmlldykKKyAgICB7CisgICAgICAgIHJldHVy
biB7IFdHU0w6OlRva2VuVHlwZTo6SWRlbnRpZmllciwgbV90b2tlblN0YXJ0aW5nUG9zaXRpb24s
IGN1cnJlbnRUb2tlbkxlbmd0aCgpLCB2aWV3IH07CisgICAgfQorCisgICAgdm9pZCBzaGlmdCgp
OworICAgIFQgcGVlayh1bnNpZ25lZCk7CisgICAgdm9pZCBza2lwV2hpdGVzcGFjZSgpOworCisg
ICAgLy8gUmVhZHMgWzAtOV0rCisgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFyc2VEZWNp
bWFsSW50ZWdlcigpOworICAgIC8vIFBhcnNlIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rZj8g
aWYgaXQgaXMgcHJlc2VudCwgYW5kIHJldHVybiB0aGUgZXhwb25lbnQKKyAgICBzdGQ6Om9wdGlv
bmFsPGludDY0X3Q+IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKTsKKyAgICAvLyBDaGVja3Mg
d2hldGhlciB0aGVyZSBpcyBhbiAiaSIgb3IgInUiIGNvbWluZywgYW5kIHJldHVybiB0aGUgcmln
aHQga2luZCBvZiBsaXRlcmFsIHRva2VuCisgICAgVG9rZW4gcGFyc2VJbnRlZ2VyTGl0ZXJhbFN1
ZmZpeChkb3VibGUgbGl0ZXJhbFZhbHVlKTsKKworICAgIFQgbV9jdXJyZW50OworICAgIGNvbnN0
IFQqIG1fY29kZTsKKyAgICBjb25zdCBUKiBtX2NvZGVFbmQ7CisgICAgU291cmNlUG9zaXRpb24g
bV9jdXJyZW50UG9zaXRpb24geyAwLCAwLCAwIH07CisgICAgU291cmNlUG9zaXRpb24gbV90b2tl
blN0YXJ0aW5nUG9zaXRpb24geyAwLCAwLCAwIH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViR1BVL1dHU0wvU291cmNlU3Bhbi5oIGIvU291cmNlL1dlYkdQVS9XR1NML1NvdXJjZVNw
YW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ1MDg5ZGYyN2Q5
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Tb3VyY2VTcGFuLmgKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV0dT
TCB7CisKK3N0cnVjdCBTb3VyY2VQb3NpdGlvbiB7CisgICAgdW5zaWduZWQgbV9saW5lOworICAg
IHVuc2lnbmVkIG1fbGluZU9mZnNldDsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK3N0
cnVjdCBTb3VyY2VTcGFuIHsKKyAgICB1bnNpZ25lZCBtX2xpbmU7CisgICAgdW5zaWduZWQgbV9s
aW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OworCisgICAgU291cmNlU3Bhbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBsaW5lT2Zmc2V0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX2xpbmUobGluZSkK
KyAgICAgICAgLCBtX2xpbmVPZmZzZXQobGluZU9mZnNldCkKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgU291cmNlU3BhbihTb3VyY2VQb3NpdGlvbiBzdGFydCwgU291cmNlUG9zaXRpb24gZW5kKQor
ICAgICAgICA6IG1fbGluZShzdGFydC5tX2xpbmUpCisgICAgICAgICwgbV9saW5lT2Zmc2V0KHN0
YXJ0Lm1fbGluZU9mZnNldCkKKyAgICAgICAgLCBtX29mZnNldChzdGFydC5tX29mZnNldCkKKyAg
ICAgICAgLCBtX2xlbmd0aChlbmQubV9vZmZzZXQgLSBzdGFydC5tX29mZnNldCkKKyAgICB7Cisg
ICAgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1Rva2VuLmNwcCBi
L1NvdXJjZS9XZWJHUFUvV0dTTC9Ub2tlbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5kYjNjMGE0M2UxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvVG9rZW4uY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBXR1NMIHsKKwor
U3RyaW5nIHRvU3RyaW5nKFRva2VuVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgVG9rZW5UeXBlOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gIkludmFsaWQiOwor
ICAgIGNhc2UgVG9rZW5UeXBlOjpFbmRPZkZpbGU6CisgICAgICAgIHJldHVybiAiRU9GIjsKKyAg
ICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWw6CisgICAgICAgIHJldHVybiAiSW50ZWdl
ckxpdGVyYWwiOworICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZDoKKyAg
ICAgICAgcmV0dXJuICJJbnRlZ2VyTGl0ZXJhbFNpZ25lZCI7CisgICAgY2FzZSBUb2tlblR5cGU6
OkludGVnZXJMaXRlcmFsVW5zaWduZWQ6CisgICAgICAgIHJldHVybiAiSW50ZWdlckxpdGVyYWxV
bnNpZ25lZCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWw6CisgICAg
ICAgIHJldHVybiAiRGVjaW1hbEZsb2F0TGl0ZXJhbCI7CisgICAgY2FzZSBUb2tlblR5cGU6Okhl
eEZsb2F0TGl0ZXJhbDoKKyAgICAgICAgcmV0dXJuICJIZXhGbG9hdExpdGVyYWwiOworICAgIGNh
c2UgVG9rZW5UeXBlOjpJZGVudGlmaWVyOgorICAgICAgICByZXR1cm4gIklkZW50aWZpZXIiOwor
ICAgIGNhc2UgVG9rZW5UeXBlOjpSZXNlcnZlZFdvcmQ6CisgICAgICAgIHJldHVybiAiUmVzZXJ2
ZWRXb3JkIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFN0cnVjdDoKKyAgICAgICAgcmV0
dXJuICJzdHJ1Y3QiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkRm46CisgICAgICAgIHJl
dHVybiAiZm4iOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkRnVuY3Rpb246CisgICAgICAg
IHJldHVybiAiZnVuY3Rpb24iOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkUHJpdmF0ZToK
KyAgICAgICAgcmV0dXJuICJwcml2YXRlIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFJl
YWQ6CisgICAgICAgIHJldHVybiAicmVhZCI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRS
ZWFkV3JpdGU6CisgICAgICAgIHJldHVybiAicmVhZF93cml0ZSI7CisgICAgY2FzZSBUb2tlblR5
cGU6OktleXdvcmRSZXR1cm46CisgICAgICAgIHJldHVybiAicmV0dXJuIjsKKyAgICBjYXNlIFRv
a2VuVHlwZTo6S2V5d29yZFN0b3JhZ2U6CisgICAgICAgIHJldHVybiAic3RvcmFnZSI7CisgICAg
Y2FzZSBUb2tlblR5cGU6OktleXdvcmRVbmlmb3JtOgorICAgICAgICByZXR1cm4gInVuaWZvcm0i
OworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkVmFyOgorICAgICAgICByZXR1cm4gInZhciI7
CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRXb3JrZ3JvdXA6CisgICAgICAgIHJldHVybiAi
d29ya2dyb3VwIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFdyaXRlOgorICAgICAgICBy
ZXR1cm4gIndyaXRlIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZEkzMjoKKyAgICAgICAg
cmV0dXJuICJpMzIiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkVTMyOgorICAgICAgICBy
ZXR1cm4gInUzMiI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRGMzI6CisgICAgICAgIHJl
dHVybiAiZjMyIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZEJvb2w6CisgICAgICAgIHJl
dHVybiAiYm9vbCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkxpdGVyYWxUcnVlOgorICAgICAgICBy
ZXR1cm4gInRydWUiOworICAgIGNhc2UgVG9rZW5UeXBlOjpMaXRlcmFsRmFsc2U6CisgICAgICAg
IHJldHVybiAiZmFsc2UiOworICAgIGNhc2UgVG9rZW5UeXBlOjpBcnJvdzoKKyAgICAgICAgcmV0
dXJuICItPiI7CisgICAgY2FzZSBUb2tlblR5cGU6OkF0dHJpYnV0ZToKKyAgICAgICAgcmV0dXJu
ICJAIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6QnJhY2tldExlZnQ6CisgICAgICAgIHJldHVybiAi
WyI7CisgICAgY2FzZSBUb2tlblR5cGU6OkJyYWNrZXRSaWdodDoKKyAgICAgICAgcmV0dXJuICJd
IjsKKyAgICBjYXNlIFRva2VuVHlwZTo6QnJhY2VMZWZ0OgorICAgICAgICByZXR1cm4gInsiOwor
ICAgIGNhc2UgVG9rZW5UeXBlOjpCcmFjZVJpZ2h0OgorICAgICAgICByZXR1cm4gIn0iOworICAg
IGNhc2UgVG9rZW5UeXBlOjpDb2xvbjoKKyAgICAgICAgcmV0dXJuICI6IjsKKyAgICBjYXNlIFRv
a2VuVHlwZTo6Q29tbWE6CisgICAgICAgIHJldHVybiAiLCI7CisgICAgY2FzZSBUb2tlblR5cGU6
OkVxdWFsOgorICAgICAgICByZXR1cm4gIj0iOworICAgIGNhc2UgVG9rZW5UeXBlOjpHVDoKKyAg
ICAgICAgcmV0dXJuICI+IjsKKyAgICBjYXNlIFRva2VuVHlwZTo6TFQ6CisgICAgICAgIHJldHVy
biAiPCI7CisgICAgY2FzZSBUb2tlblR5cGU6OlBlcmlvZDoKKyAgICAgICAgcmV0dXJuICIuIjsK
KyAgICBjYXNlIFRva2VuVHlwZTo6UGFyZW5MZWZ0OgorICAgICAgICByZXR1cm4gIigiOworICAg
IGNhc2UgVG9rZW5UeXBlOjpQYXJlblJpZ2h0OgorICAgICAgICByZXR1cm4gIikiOworICAgIGNh
c2UgVG9rZW5UeXBlOjpTZW1pY29sb246CisgICAgICAgIHJldHVybiAiOyI7CisgICAgfQorfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvVG9rZW4uaCBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
MzcxNDJmOTdkYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1Rva2Vu
LmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlNvdXJjZVNwYW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKworZW51bSBj
bGFzcyBUb2tlblR5cGU6IHVpbnQzMl90IHsKKyAgICAvLyBJbnN0ZWFkIG9mIGhhdmluZyB0aGlz
IHR5cGUsIHdlIGNvdWxkIGhhdmUgYSBzdGQ6Om9wdGlvbmFsPFRva2VuPiBldmVyeXdoZXJlIHRo
YXQgd2UgY3VycmVudGx5IGhhdmUgYSBUb2tlbi4KKyAgICAvLyBJIG1hZGUgdGhpcyBjaG9pY2Ug
Zm9yIHR3byByZWFzb25zOgorICAgIC8vIC0gc3BhY2UgZWZmaWNpZW5jeTogd2UgZG9uJ3QgdXNl
IGFuIGV4dHJhIHdvcmQgb2YgbWVtb3J5IGZvciB0aGUgdmFyaWFudCdzIHRhZworICAgIC8vIC0g
ZWFzZSBvZiB1c2U6IGV2ZXJ5d2hlcmUgdGhhdCB3ZSBjaGVjayBmb3IgYSBnaXZlbiBUb2tlblR5
cGUsIHdlIHdvdWxkIGhhdmUgdG8gZmlyc3QgY2hlY2sgdGhhdCB0aGUgVG9rZW4gaXMgbm90IG51
bGxvcHQsIGFuZCB0aGVuIGNoZWNrIHRoZSBUb2tlblR5cGUuCisgICAgSW52YWxpZCwKKworICAg
IEVuZE9mRmlsZSwKKworICAgIEludGVnZXJMaXRlcmFsLAorICAgIEludGVnZXJMaXRlcmFsU2ln
bmVkLAorICAgIEludGVnZXJMaXRlcmFsVW5zaWduZWQsCisgICAgRGVjaW1hbEZsb2F0TGl0ZXJh
bCwKKyAgICBIZXhGbG9hdExpdGVyYWwsCisKKyAgICBJZGVudGlmaWVyLAorCisgICAgUmVzZXJ2
ZWRXb3JkLAorICAgIEtleXdvcmRGbiwKKyAgICBLZXl3b3JkRnVuY3Rpb24sCisgICAgS2V5d29y
ZFByaXZhdGUsCisgICAgS2V5d29yZFJlYWQsCisgICAgS2V5d29yZFJlYWRXcml0ZSwKKyAgICBL
ZXl3b3JkUmV0dXJuLAorICAgIEtleXdvcmRTdG9yYWdlLAorICAgIEtleXdvcmRTdHJ1Y3QsCisg
ICAgS2V5d29yZFVuaWZvcm0sCisgICAgS2V5d29yZFZhciwKKyAgICBLZXl3b3JkV29ya2dyb3Vw
LAorICAgIEtleXdvcmRXcml0ZSwKKyAgICBLZXl3b3JkSTMyLAorICAgIEtleXdvcmRVMzIsCisg
ICAgS2V5d29yZEYzMiwKKyAgICBLZXl3b3JkQm9vbCwKKyAgICBMaXRlcmFsVHJ1ZSwKKyAgICBM
aXRlcmFsRmFsc2UsCisgICAgLy8gRklYTUU6IGFkZCBhbGwgdGhlIG90aGVyIGtleXdvcmRzOiBz
ZWUgI2tleXdvcmQtc3VtbWFyeSBpbiB0aGUgV0dTTCBzcGVjCisKKyAgICBBcnJvdywKKyAgICBB
dHRyaWJ1dGUsCisgICAgQnJhY2VMZWZ0LAorICAgIEJyYWNlUmlnaHQsCisgICAgQnJhY2tldExl
ZnQsCisgICAgQnJhY2tldFJpZ2h0LAorICAgIENvbG9uLAorICAgIENvbW1hLAorICAgIEVxdWFs
LAorICAgIEdULAorICAgIExULAorICAgIFBlcmlvZCwKKyAgICBQYXJlbkxlZnQsCisgICAgUGFy
ZW5SaWdodCwKKyAgICBTZW1pY29sb24sCisgICAgLy8gRklYTUU6IGFkZCBhbGwgdGhlIG90aGVy
IHNwZWNpYWwgdG9rZW5zCit9OworCitTdHJpbmcgdG9TdHJpbmcoVG9rZW5UeXBlKTsKKworc3Ry
dWN0IFRva2VuIHsKKyAgICBUb2tlblR5cGUgbV90eXBlOworICAgIFNvdXJjZVNwYW4gbV9zcGFu
OworICAgIHVuaW9uIHsKKyAgICAgICAgZG91YmxlIG1fbGl0ZXJhbFZhbHVlOworICAgICAgICBT
dHJpbmdWaWV3IG1faWRlbnQ7CisgICAgfTsKKworICAgIFRva2VuKFRva2VuVHlwZSB0eXBlLCBT
b3VyY2VQb3NpdGlvbiBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IG1fdHlw
ZSh0eXBlKQorICAgICAgICAsIG1fc3Bhbihwb3NpdGlvbi5tX2xpbmUsIHBvc2l0aW9uLm1fbGlu
ZU9mZnNldCwgcG9zaXRpb24ubV9vZmZzZXQsIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCh0eXBlICE9IFRva2VuVHlwZTo6SWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVCh0eXBlICE9
IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwpOworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tl
blR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gVG9r
ZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0g
VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0g
VG9rZW5UeXBlOjpIZXhGbG9hdExpdGVyYWwpOworICAgIH0KKworICAgIFRva2VuKFRva2VuVHlw
ZSB0eXBlLCBTb3VyY2VQb3NpdGlvbiBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBkb3VibGUg
bGl0ZXJhbFZhbHVlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc3Bhbihw
b3NpdGlvbi5tX2xpbmUsIHBvc2l0aW9uLm1fbGluZU9mZnNldCwgcG9zaXRpb24ubV9vZmZzZXQs
IGxlbmd0aCkKKyAgICAgICAgLCBtX2xpdGVyYWxWYWx1ZShsaXRlcmFsVmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQodHlwZSA9PSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsCisgICAgICAg
ICAgICB8fCB0eXBlID09IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxTaWduZWQKKyAgICAgICAg
ICAgIHx8IHR5cGUgPT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkCisgICAgICAg
ICAgICB8fCB0eXBlID09IFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbAorICAgICAgICAg
ICAgfHwgdHlwZSA9PSBUb2tlblR5cGU6OkhleEZsb2F0TGl0ZXJhbCk7CisgICAgfQorCisgICAg
VG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJjZVBvc2l0aW9uIHBvc2l0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgsIFN0cmluZ1ZpZXcgaWRlbnQpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9zcGFuKHBvc2l0aW9uLm1fbGluZSwgcG9zaXRpb24ubV9saW5lT2Zmc2V0LCBwb3NpdGlv
bi5tX29mZnNldCwgbGVuZ3RoKQorICAgICAgICAsIG1faWRlbnQoaWRlbnQpCisgICAgeworICAg
ICAgICBBU1NFUlQodHlwZSA9PSBUb2tlblR5cGU6OklkZW50aWZpZXIpOworICAgIH0KKworICAg
IFRva2VuJiBvcGVyYXRvcj0oVG9rZW4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChtX3R5
cGUgPT0gVG9rZW5UeXBlOjpJZGVudGlmaWVyKQorICAgICAgICAgICAgbV9pZGVudC5+U3RyaW5n
VmlldygpOworCisgICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKKyAgICAgICAgbV9zcGFu
ID0gb3RoZXIubV9zcGFuOworCisgICAgICAgIHN3aXRjaCAob3RoZXIubV90eXBlKSB7CisgICAg
ICAgIGNhc2UgVG9rZW5UeXBlOjpJZGVudGlmaWVyOgorICAgICAgICAgICAgbmV3IChOb3ROdWxs
LCAmbV9pZGVudCkgU3RyaW5nVmlldygpOworICAgICAgICAgICAgbV9pZGVudCA9IG90aGVyLm1f
aWRlbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkludGVn
ZXJMaXRlcmFsOgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxTaWduZWQ6
CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkOgorICAgICAg
ICBjYXNlIFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tl
blR5cGU6OkhleEZsb2F0TGl0ZXJhbDoKKyAgICAgICAgICAgIG1fbGl0ZXJhbFZhbHVlID0gb3Ro
ZXIubV9saXRlcmFsVmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIFRva2VuKGNvbnN0IFRva2VuJiBvdGhlcikKKyAgICAgICAgOiBtX3R5cGUo
b3RoZXIubV90eXBlKQorICAgICAgICAsIG1fc3BhbihvdGhlci5tX3NwYW4pCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fdHlwZSkgeworICAgICAgICBjYXNlIFRva2VuVHlwZTo6SWRl
bnRpZmllcjoKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faWRlbnQpIFN0cmluZ1ZpZXco
KTsKKyAgICAgICAgICAgIG1faWRlbnQgPSBvdGhlci5tX2lkZW50OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbDoKKyAgICAgICAgY2Fz
ZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkOgorICAgICAgICBjYXNlIFRva2VuVHlw
ZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkRlY2lt
YWxGbG9hdExpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpIZXhGbG9hdExpdGVyYWw6
CisgICAgICAgICAgICBtX2xpdGVyYWxWYWx1ZSA9IG90aGVyLm1fbGl0ZXJhbFZhbHVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIH5Ub2tlbigpCisgICAgeworICAgICAgICBpZiAobV90eXBl
ID09IFRva2VuVHlwZTo6SWRlbnRpZmllcikKKyAgICAgICAgICAgICgmbV9pZGVudCktPn5TdHJp
bmdWaWV3KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwIGIvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3Bw
CmluZGV4IDI1YTY4NWUxNzE1MC4uOTRmZTM5YWJkNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dHU0wvV0dTTC5jcHAKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCkBAIC0y
NywxMSArMjcsMTUgQEAKICNpbmNsdWRlICJXR1NMLmgiCiAKICNpbmNsdWRlICJBU1QuaCIKKyNp
bmNsdWRlICJMZXhlci5oIgogCiBuYW1lc3BhY2UgV0dTTCB7CiAKLXN0ZDo6dmFyaWFudDxTdWNj
ZXNzZnVsQ2hlY2ssIEZhaWxlZENoZWNrPiBzdGF0aWNDaGVjayhjb25zdCBTdHJpbmcmLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPFNvdXJjZU1hcD4mKQorc3RkOjp2YXJpYW50PFN1Y2Nlc3NmdWxDaGVj
aywgRmFpbGVkQ2hlY2s+IHN0YXRpY0NoZWNrKGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPFNvdXJjZU1hcD4mKQogeworICAgIC8vIE1ha2luZyBzdXJlIHRoYXQgdGhlIGxl
eGVyIGJ1aWxkcyBjb3JyZWN0bHksIHdpbGwgYmUgcmVtb3ZlZCBpbiBsYXRlciBwYXRjaGVzCisg
ICAgTGV4ZXI8TENoYXI+IGxleGVyKHN0cik7CisgICAgbGV4ZXIubGV4KCk7CiAgICAgcmV0dXJu
IEZhaWxlZENoZWNrIHsgeyB9LCB7IH0gfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1tIGIvU291cmNlL1dlYkdQVS9XR1NMVW5p
dFRlc3RzL1dHU0xMZXhlclRlc3RzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uOGM0ODZkMWQ4MTk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9X
R1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1tCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJMZXhlci5oIgorCisjaW1wb3J0IDxYQ1Rlc3QvWENUZXN0Lmg+CisKK0BpbnRl
cmZhY2UgV0dTTExleGVyVGVzdHMgOiBYQ1Rlc3RDYXNlCisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdHU0xMZXhlclRlc3RzCisKKy0gKHZvaWQpdGVzdExleGVyT25TaW5nbGVUb2tlbnMgewor
ICAgIGF1dG8gY2hlY2tTaW5nbGVUb2tlbiA9IFtdIChjb25zdCBjaGFyKiBzdHJpbmcsIFdHU0w6
OlRva2VuVHlwZSB0eXBlKSB7CisgICAgICAgIFdHU0w6OkxleGVyPExDaGFyPiBsZXhlcihzdHJp
bmcpOworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBsZXhlci5sZXgoKTsKKyAgICAgICAg
WENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fdHlwZSwgdHlwZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKyAgICBhdXRvIGNoZWNrU2luZ2xlTGl0ZXJhbCA9IFsmXSAoY29uc3QgY2hh
ciogc3RyaW5nLCBXR1NMOjpUb2tlblR5cGUgdHlwZSwgZG91YmxlIGxpdGVyYWxWYWx1ZSkgewor
ICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBjaGVja1NpbmdsZVRva2VuKHN0cmluZywgdHlw
ZSk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX2xpdGVyYWxWYWx1ZSwgbGl0ZXJh
bFZhbHVlKTsKKyAgICB9OworCisgICAgY2hlY2tTaW5nbGVUb2tlbigiIiwgV0dTTDo6VG9rZW5U
eXBlOjpFbmRPZkZpbGUpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMSIsIFdHU0w6OlRva2Vu
VHlwZTo6SW50ZWdlckxpdGVyYWwsIDEpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMCIsIFdH
U0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDApOworICAgIGNoZWNrU2luZ2xlTGl0ZXJh
bCgiMTQyIiwgV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgMTQyKTsKKyAgICBjaGVj
a1NpbmdsZUxpdGVyYWwoIjEuMSIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJh
bCwgMS4xKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjAuNCIsIFdHU0w6OlRva2VuVHlwZTo6
RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC40KTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjAxMjMu
NDU2IiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCAwMTIzLjQ1Nik7Cisg
ICAgY2hlY2tTaW5nbGVUb2tlbigiMDEyMyIsIFdHU0w6OlRva2VuVHlwZTo6SW52YWxpZCk7Cisg
ICAgY2hlY2tTaW5nbGVMaXRlcmFsKCIwMTIzLiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZs
b2F0TGl0ZXJhbCwgMTIzKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIi40NTYiLCBXR1NMOjpU
b2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDAuNDU2KTsKKyAgICBjaGVja1NpbmdsZVRv
a2VuKCIuIiwgV0dTTDo6VG9rZW5UeXBlOjpQZXJpb2QpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJh
bCgiNDJmIiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCA0Mik7CisgICAg
Y2hlY2tTaW5nbGVMaXRlcmFsKCI0MmUwZiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgNDIpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMDQyZTBmIiwgV0dTTDo6VG9r
ZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCA0Mik7CisgICAgY2hlY2tTaW5nbGVUb2tlbigi
MDQyZiIsIFdHU0w6OlRva2VuVHlwZTo6SW52YWxpZCk7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFs
KCI0MmUtMyIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgNDJlLTMpOwor
ICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJlLWEiLCBXR1NMOjpUb2tlblR5cGU6OkludGVnZXJM
aXRlcmFsLCA0Mik7Cit9CisKKy0gKHZvaWQpIHRlc3RMZXhlck9uQ29tcHV0ZVNoYWRlciB7Cisg
ICAgV0dTTDo6TGV4ZXI8TENoYXI+IGxleGVyKCJAYmxvY2sgc3RydWN0IEIge1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGE6IGkzMjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiQGdyb3VwKDApIEBiaW5kaW5nKDApXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4geDogQjtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQHN0YWdlKGNvbXB1dGUpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmbiBtYWluKCkge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHgu
YSA9IDQyO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworCisgICAgdW5z
aWduZWQgbGluZU51bWJlciA9IDA7CisgICAgYXV0byBjaGVja05leHRUb2tlbiA9IFsmXSAoV0dT
TDo6VG9rZW5UeXBlIHR5cGUpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gbGV4ZXIu
bGV4KCk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX3R5cGUsIHR5cGUpOworICAg
ICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV9zcGFuLm1fbGluZSwgbGluZU51bWJlcik7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBhdXRvIGNoZWNrTmV4dFRva2VuSXNJ
ZGVudGlmaWVyID0gWyZdIChjb25zdCBjaGFyKiBpZGVudCkgeworICAgICAgICBXR1NMOjpUb2tl
biByZXN1bHQgPSBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OklkZW50aWZpZXIpOwor
ICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV9pZGVudCwgaWRlbnQpOworICAgIH07Cisg
ICAgYXV0byBjaGVja05leHRUb2tlbklzTGl0ZXJhbCA9IFsmXSAoV0dTTDo6VG9rZW5UeXBlIHR5
cGUsIGRvdWJsZSBsaXRlcmFsVmFsdWUpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0g
Y2hlY2tOZXh0VG9rZW4odHlwZSk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX2xp
dGVyYWxWYWx1ZSwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9OworCisgICAgLy8gQGJsb2NrIHN0cnVj
dCBCIHsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJpYnV0ZSk7Cisg
ICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImJsb2NrIik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkU3RydWN0KTsKKyAgICBjaGVja05leHRUb2tlbklz
SWRlbnRpZmllcigiQiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJh
Y2VMZWZ0KTsKKworICAgIC8vIGE6IGkzMjsKKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tO
ZXh0VG9rZW5Jc0lkZW50aWZpZXIoImEiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OkNvbG9uKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdv
cmRJMzIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6U2VtaWNvbG9uKTsK
KworICAgIC8vIH0KKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpCcmFjZVJpZ2h0KTsKKworICAgIC8vIEBncm91cCgwKSBAYmluZGluZygwKQor
ICAgIGxpbmVOdW1iZXIgKz0gMjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImdyb3VwIik7Cisg
ICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNr
TmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDApOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRv
a2VuSXNJZGVudGlmaWVyKCJiaW5kaW5nIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRv
a2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDApOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4g
eDogQjsKKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpLZXl3b3JkVmFyKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkxU
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRTdG9yYWdlKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbW1hKTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRSZWFkV3JpdGUpOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlm
aWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb2xvbik7Cisg
ICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIkIiKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyBAc3RhZ2UoY29tcHV0ZSkKKyAg
ICBsaW5lTnVtYmVyICs9IDI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpB
dHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJzdGFnZSIpOworICAg
IGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05l
eHRUb2tlbklzSWRlbnRpZmllcigiY29tcHV0ZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyBmbiBtYWluKCkgeworICAgICsrbGlu
ZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGbik7
CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIm1haW4iKTsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dT
TDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OkJyYWNlTGVmdCk7CisKKyAgICAvLyB4LmEgPSA0MjsKKyAgICArK2xpbmVOdW1iZXI7
CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIngiKTsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OlBlcmlvZCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZp
ZXIoImEiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkVxdWFsKTsKKyAg
ICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFs
LCA0Mik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpTZW1pY29sb24pOwor
CisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OkJyYWNlUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6RW5kT2ZGaWxlKTsKK30KKworLSAodm9pZCkgdGVzdExleGVyT25HcmFwaGljc1NoYWRlciB7
CisgICAgV0dTTDo6TGV4ZXI8TENoYXI+IGxleGVyKCJAc3RhZ2UodmVydGV4KVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZm4gdmVydGV4U2hhZGVyKEBsb2NhdGlvbigwKSB4OiB2
ZWM0PGYzMj4pIC0+IEBidWlsdGluKHBvc2l0aW9uKSB2ZWM0PGYzMj4ge1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB4O1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJAc3RhZ2UoZnJhZ21lbnQpXG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmbiBmcmFnbWVudFNoYWRlcigpIC0+IEBsb2NhdGlvbigwKSB2
ZWM0PGYzMj4ge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB2
ZWM0PGYzMj4oMC40LCAwLjQsIDAuOCwgMS4wKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIn0iKTsKKworICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSAwOworICAgIGF1dG8gY2hl
Y2tOZXh0VG9rZW4gPSBbJl0gKFdHU0w6OlRva2VuVHlwZSB0eXBlKSB7CisgICAgICAgIFdHU0w6
OlRva2VuIHJlc3VsdCA9IGxleGVyLmxleCgpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1
bHQubV90eXBlLCB0eXBlKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fc3Bhbi5t
X2xpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAg
YXV0byBjaGVja05leHRUb2tlbklzSWRlbnRpZmllciA9IFsmXSAoY29uc3QgY2hhciogaWRlbnQp
IHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpJZGVudGlmaWVyKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1faWRl
bnQsIGlkZW50KTsKKyAgICB9OworICAgIGF1dG8gY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwgPSBb
Jl0gKFdHU0w6OlRva2VuVHlwZSB0eXBlLCBkb3VibGUgbGl0ZXJhbFZhbHVlKSB7CisgICAgICAg
IFdHU0w6OlRva2VuIHJlc3VsdCA9IGNoZWNrTmV4dFRva2VuKHR5cGUpOworICAgICAgICBYQ1RB
c3NlcnRFcXVhbChyZXN1bHQubV9saXRlcmFsVmFsdWUsIGxpdGVyYWxWYWx1ZSk7CisgICAgfTsK
KworICAgIC8vIFtbc3RhZ2UodmVydGV4KV1dCisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJzdGFn
ZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAg
ICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigidmVydGV4Iik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKworICAgICsrbGluZU51bWJlcjsKKyAg
ICAvLyBmbiB2ZXJ0ZXhTaGFkZXIoQGxvY2F0aW9uKDApIHg6IHZlYzQ8ZjMyPikgLT4gQGJ1aWx0
aW4ocG9zaXRpb24pIHZlYzQ8ZjMyPiB7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpLZXl3b3JkRm4pOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZXJ0ZXhT
aGFkZXIiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNo
ZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJsb2NhdGlvbiIpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJh
bChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVu
dGlmaWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb2xvbik7
CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlYzQiKTsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OktleXdvcmRGMzIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6
R1QpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7Cisg
ICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBcnJvdyk7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJ
ZGVudGlmaWVyKCJidWlsdGluIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBl
OjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJwb3NpdGlvbiIp
OworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlYzQiKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OktleXdvcmRGMzIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VMZWZ0KTsKKworICAgIC8v
IHJldHVybiB4OworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OktleXdvcmRSZXR1cm4pOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVy
KCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpTZW1pY29sb24pOwor
CisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OkJyYWNlUmlnaHQpOworCisgICAgLy8gQHN0YWdlKGZyYWdtZW50KQorICAgIGxp
bmVOdW1iZXIgKz0gMjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkF0dHJp
YnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInN0YWdlIik7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRv
a2VuSXNJZGVudGlmaWVyKCJmcmFnbWVudCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyBmbiBmcmFnbWVudFNoYWRlcigpIC0+IEBs
b2NhdGlvbigwKSB2ZWM0PGYzMj4geworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lk
ZW50aWZpZXIoImZyYWdtZW50U2hhZGVyIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6
UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBcnJvdyk7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNo
ZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJsb2NhdGlvbiIpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJh
bChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVu
dGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkRjMyKTsKKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkdUKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkJyYWNlTGVmdCk7CisKKyAgICAvLyByZXR1cm4gdmVjNDxmMzI+KDAu
NCwgMC40LCAwLjgsIDEuMCk7CisgICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZFJldHVybik7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lk
ZW50aWZpZXIoInZlYzQiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkxU
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGMzIpOworICAg
IGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJh
bChXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDAuNCk7CisgICAgY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb21tYSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xp
dGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCAwLjQpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6Q29tbWEpOworICAgIGNoZWNrTmV4dFRva2Vu
SXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC44KTsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbW1hKTsKKyAgICBjaGVja05leHRU
b2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDEuMCk7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyB9Cisg
ICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJh
Y2VSaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpFbmRPZkZpbGUp
OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dT
TFVuaXRUZXN0cy5tbSBiL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMVW5pdFRlc3Rz
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjA1NGFjYmUwNjcuLjAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldHU0wuaCIK
LQotI2ltcG9ydCA8WENUZXN0L1hDVGVzdC5oPgotI2ltcG9ydCA8dmVjdG9yPgotI2ltcG9ydCA8
d3RmL0RhdGFMb2cuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotQGludGVyZmFjZSBXR1NM
VW5pdFRlc3RzIDogWENUZXN0Q2FzZQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXR1NMVW5p
dFRlc3RzCi0KLS0gKHZvaWQpdGVzdEV4YW1wbGUgewotICAgIGRhdGFMb2coImFzZGZcbiIpOwot
ICAgIFZlY3RvcjxpbnQ+IHggeyAyLCAzLCB9OwotICAgIFZlY3RvcjxpbnQ+IHk7Ci0gICAgeS5h
cHBlbmQoMik7Ci0gICAgeS5hcHBlbmQoMyk7Ci0gICAgWENUQXNzZXJ0RXF1YWwoeCwgeSk7Ci0g
ICAgV0dTTDo6c3RhdGljQ2hlY2soIiIsIHN0ZDo6bnVsbG9wdCk7Ci19Ci0KLUBlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ5OWU1
M2NmYzFlNy4uM2Y0MGM2MzhiZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcsNyArNyw3IEBACiAJb2JqZWN0cyA9IHsKIAogLyog
QmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMUMwMjNEM0YyNzQ0OTA3MDAwMURCNzM0
IC8qIFdHU0xVbml0VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy5tbSAq
LzsgfTsKKwkJMUMwMjNEM0YyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwMjNEM0UyNzQ0
OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1tICovOyB9OwogCQkxQzAyM0Q0MDI3NDQ5
MDcwMDAxREI3MzQgLyogbGlid2dzbC5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ3RjIyNzE2QjJDQzAwQTUyNTREIC8qIGxpYndnc2wuYSAq
LzsgfTsKIAkJMUMwMjNENEIyNzQ0OTVCOTAwMURCNzM0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
MDIzRDRBMjc0NDk1QjkwMDFEQjczNCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07
CiAJCTFDMkNFREVFMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRhbC5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzJDRURFRDI3MUU4QTcz
MDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrICovOyB9OwpAQCAtNDEsNiArNDEsMTEgQEAKIAkJ
MUNFQkQ3RjgyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEN0Y3MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NM
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQkxQ0VC
RDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5j
cHAgKi87IH07CiAJCTFDRUJEODI2MjcxNkNBQ0MwMEE1MjU0RCAvKiBsaWJ3Z3NsLmEgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdGMjI3MTZC
MkNDMDBBNTI1NEQgLyogbGlid2dzbC5hICovOyB9OworCQkzMzhCQjJDRTI3QjZCNjAyMDBFMDY2
QUIgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOEJCMkNEMjdCNkI2MDIwMEUwNjZBQiAvKiBUb2tlbi5oICovOyB9OworCQkzMzhCQjJE
MDI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyQ0YyN0I2QjYxQjAwRTA2NkFCIC8qIFRva2VuLmNw
cCAqLzsgfTsKKwkJMzM4QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQxMjdCNkI2
M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi87IH07CisJCTMzOEJCMkQ0MjdCNkI2NkMwMEUw
NjZBQiAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi87IH07CisJCTMzOEJC
MkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJENTI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIu
Y3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC02Miw3ICs2Nyw3IEBACiAKIC8qIEJl
Z2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkxQzAyM0QzQzI3NDQ5MDcwMDAxREI3
MzQgLyogV0dTTFVuaXRUZXN0cy54Y3Rlc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IFdHU0xVbml0VGVzdHMueGN0ZXN0OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwotCQkxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xVbml0VGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMDIzRDNFMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xMZXhlclRlc3RzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzAyM0Q0NzI3NDQ5MTZEMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0
cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXR1NMVW5pdFRlc3RzLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0QTI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFDMkNFREVEMjcx
RThBNzMwMEVEQzE2RiAvKiBNZXRhbC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IE1ldGFs
LmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTWV0YWwuZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKQEAgLTEzNSw2ICsxNDAsMTEgQEAKIAkJMUNF
QkQ4MkIyNzE2Q0FGQjAwQTUyNTREIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBuYW1lID0gQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtS
T09UOyB9OwogCQkxQ0VCRDgyRDI3MTZDQjE2MDBBNTI1NEQgLyogRm91bmRhdGlvbi5mcmFtZXdv
cmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFw
cGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNE
S1JPT1Q7IH07CiAJCTFDRUJEODMwMjcxNkNCMzgwMEE1MjU0RCAvKiBsaWJpY3Vjb3JlLnRiZCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJzb3VyY2Vj
b2RlLnRleHQtYmFzZWQtZHlsaWItZGVmaW5pdGlvbiI7IG5hbWUgPSBsaWJpY3Vjb3JlLnRiZDsg
cGF0aCA9IHVzci9saWIvbGliaWN1Y29yZS50YmQ7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9Owor
CQkzMzhCQjJDRDI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9r
ZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4QkIyQ0YyN0I2QjYxQjAwRTA2
NkFCIC8qIFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4QkIyRDEyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNw
YW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlU3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4QkIyRDUyN0I2QjY4
NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24g
Ki8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTcw
LDcgKzE4MCw3IEBACiAJCTFDMDIzRDNEMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMVW5pdFRlc3Rz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxQzAyM0Qz
RTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy5tbSAqLywKKwkJCQkxQzAyM0QzRTI3
NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IFdHU0xVbml0VGVzdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjYxLDggKzI3
MSwxMyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUNFQkQ4MDcyNzE2QzJDMDAwQTUyNTREIC8q
IEFTVC5oICovLAogCQkJCTFDRUJEODA0MjcxNkJGQUIwMEE1MjU0RCAvKiBjb25maWcuaCAqLywK
LQkJCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8sCisJCQkJMzM4QkIy
RDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi8sCisJCQkJMzM4QkIyRDUyN0I2QjY4NzAw
RTA2NkFCIC8qIExleGVyLmNwcCAqLywKKwkJCQkzMzhCQjJEMTI3QjZCNjNGMDBFMDY2QUIgLyog
U291cmNlU3Bhbi5oICovLAorCQkJCTMzOEJCMkNEMjdCNkI2MDIwMEUwNjZBQiAvKiBUb2tlbi5o
ICovLAorCQkJCTMzOEJCMkNGMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgKi8sCiAJCQkJ
MUNFQkQ3RjcyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCAqLywKKwkJCQkxQ0VCRDgwMjI3MTZC
RjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdHU0w7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzEyLDYgKzMyNyw5IEBACiAJCQlpc2EgPSBQQlhI
ZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQkzMzhCQjJEMjI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzM4QkIyRDQyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzhCQjJDRTI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDRUJEN0Y4MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKQEAgLTM4MSw3ICszOTksNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0
ZXMgPSB7CiAJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gTk87Ci0JCQkJ
RGVmYXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RV
cGdyYWRlQ2hlY2sgPSAxMzMwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CiAJCQkJCTFDMDIz
RDNCMjc0NDkwNzAwMDFEQjczNCA9IHsKQEAgLTQ1OSw3ICs0NzYsNyBAQAogCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJ
ZmlsZXMgPSAoCi0JCQkJMUMwMjNEM0YyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMu
bW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzAyM0QzRjI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExl
eGVyVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ5Nyw3ICs1MTQsOSBAQAogCQkJaXNhID0g
UEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCisJCQkJMzM4QkIyRDYyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDRUJEODAzMjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMzOEJCMkQwMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsK
</data>
<flag name="review"
          id="478787"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451926</attachid>
            <date>2022-02-14 11:09:15 -0800</date>
            <delta_ts>2022-02-14 12:40:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchLexer</filename>
            <type>text/plain</type>
            <size>58063</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggOGI1NzZmNmFlNWE4Li43ZjVmYmQ2ZmJiODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNzMgQEAKKzIwMjItMDItMTQgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNv
bT4KKworICAgICAgICBbV0dTTF0gSW1wbGVtZW50IGVub3VnaCBvZiB0aGUgbGV4ZXIgZm9yIHRo
ZSBzaW1wbGVzdCBzaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzMyNzYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NzMyNjc1PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGlzIGp1
c3QgZW5vdWdoIG9mIHRoZSBsZXhlciBpbiB0aGlzIHBhdGNoIHRvIHBhc3MgdGhlIHVuaXQgdGVz
dHMgKGFsc28gYWRkZWQgYnkgdGhlIHBhdGNoKS4KKyAgICAgICAgVGhlIGxleGVyIGlzIHRlbXBs
YXRlZCBieSB0aGUgY2hhcmFjdGVyIHNpemUsIGZvbGxvd2luZyB0aGUgY29kZSBmcm9tIEpTQydz
IGxleGVyLgorCisgICAgICAgIFRoZSBsZXhpbmcgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMg
aXMgYSBiaXQgaGFja3ksIGFuZCBwcm9iYWJseSBoYXMgc29tZSBwcmVjaXNpb24gaXNzdWVzIGlu
IGNvcm5lciBjYXNlcywgYnV0IGl0IHBhc3NlZCBhbGwgc2ltcGxlIHVuaXQgdGVzdHMsCisgICAg
ICAgIHNvIGZvciBub3cgSSBqdXN0IGxlZnQgaXQgYXMgaXMgd2l0aCBhIEZJWE1FLCB0byBiZSBm
aXhlZCBvbmNlIHdlIGNhbiBydW4gdGhlIGZ1bGwgQ1RTLgorCisgICAgICAgIFRoZSBUb2tlblR5
cGUgaW5jbHVkZXMgYW4gYEludmFsaWRgIHZhbHVlLiBJIGNvdWxkIGluc3RlYWQgaGF2ZSB1c2Vk
IHN0ZDo6b3B0aW9uYWw8VG9rZW4+IGV2ZXJ5d2hlcmUuCisgICAgICAgIEkgbWFkZSB0aGlzIGNo
b2ljZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIC0gc3BhY2UgZWZmaWNpZW5jeTogd2UgZG9u
J3QgdXNlIGFuIGV4dHJhIHdvcmQgb2YgbWVtb3J5IGZvciB0aGUgdmFyaWFudCdzIHRhZworICAg
ICAgICAtICAoYWx0aG91Z2ggdGhpcyBwYXJ0IGNvdWxkIGJlIHNvbHZlZCBieSB1c2luZyBodHRw
czovL2dpdGh1Yi5jb20vYWtyemVtaTEvbWFya2FibGUpCisgICAgICAgIC0gZWFzZSBvZiB1c2Ug
YW5kIHRpbWUgZWZmaWNpZW5jeTogZXZlcnl3aGVyZSB0aGF0IHdlIGNoZWNrIGZvciBhIGdpdmVu
IFRva2VuVHlwZSwgd2Ugd291bGQgaGF2ZSB0byBmaXJzdCBjaGVjayB0aGF0IHRoZSBUb2tlbiBp
cyBub3QgbnVsbG9wdCwgYW5kIHRoZW4gY2hlY2sgdGhlIFRva2VuVHlwZS4KKworICAgICAgICAq
IENvbmZpZ3VyYXRpb25zL1dHU0xVbml0VGVzdHMueGNjb25maWc6CisgICAgICAgICogV0dTTC9M
ZXhlci5jcHA6IEFkZGVkLgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OmxleCk6CisgICAgICAg
IChXR1NMOjpMZXhlcjxUPjo6c2hpZnQpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnBlZWsp
OgorICAgICAgICAoV0dTTDo6TGV4ZXI8VD46OnNraXBXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdH
U0w6OkxleGVyPFQ+Ojppc0F0RW5kT2ZGaWxlIGNvbnN0KToKKyAgICAgICAgKFdHU0w6OkxleGVy
PFQ+OjpwYXJzZURlY2ltYWxJbnRlZ2VyKToKKyAgICAgICAgKFdHU0w6OkxleGVyPFQ+OjpwYXJz
ZURlY2ltYWxGbG9hdEV4cG9uZW50KToKKyAgICAgICAgKFdHU0w6OkxleGVyPFQ+OjpwYXJzZUlu
dGVnZXJMaXRlcmFsU3VmZml4KToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6aXNXaGl0
ZVNwYWNlKToKKyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6aXNJZGVudGlmaWVyU3RhcnQp
OgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc1ZhbGlkSWRlbnRpZmllckNoYXJhY3Rl
cik6CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OmlzRGVjaW1hbCk6CisgICAgICAgIChX
R1NMOjpMZXhlcjxMQ2hhcj46OmlzSGV4YWRlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8
TENoYXI+OjpyZWFkRGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OnJlYWRI
ZXhhZGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OmlzV2hpdGVTcGFjZSk6
CisgICAgICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OmlzSWRlbnRpZmllclN0YXJ0KToKKyAgICAg
ICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIpOgorICAg
ICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojppc0RlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4
ZXI8VUNoYXI+Ojppc0hleGFkZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6
cmVhZERlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+OjpyZWFkSGV4YWRlY2lt
YWwpOgorICAgICAgICAqIFdHU0wvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChXR1NMOjpMZXhl
cjo6TGV4ZXIpOgorICAgICAgICAoV0dTTDo6TGV4ZXI6OmN1cnJlbnRQb3NpdGlvbiBjb25zdCk6
CisgICAgICAgIChXR1NMOjpMZXhlcjo6Y3VycmVudE9mZnNldCBjb25zdCk6CisgICAgICAgIChX
R1NMOjpMZXhlcjo6Y3VycmVudFRva2VuTGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdHU0w6Okxl
eGVyOjptYWtlVG9rZW4pOgorICAgICAgICAoV0dTTDo6TGV4ZXI6Om1ha2VMaXRlcmFsVG9rZW4p
OgorICAgICAgICAoV0dTTDo6TGV4ZXI6Om1ha2VJZGVudGlmaWVyVG9rZW4pOgorICAgICAgICAq
IFdHU0wvU291cmNlU3Bhbi5oOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OlNvdXJjZVNwYW46OlNv
dXJjZVNwYW4pOgorICAgICAgICAqIFdHU0wvVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdH
U0w6OnRvU3RyaW5nKToKKyAgICAgICAgKiBXR1NML1Rva2VuLmg6IEFkZGVkLgorICAgICAgICAo
V0dTTDo6VG9rZW46OlRva2VuKToKKyAgICAgICAgKFdHU0w6OlRva2VuOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV0dTTDo6VG9rZW46On5Ub2tlbik6CisgICAgICAgICogV0dTTC9XR1NMLmNwcDoK
KyAgICAgICAgKFdHU0w6OnN0YXRpY0NoZWNrKToKKyAgICAgICAgKiBXR1NMVW5pdFRlc3RzL1dH
U0xMZXhlclRlc3RzLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0dTTExleGVyVGVzdHMgdGVzdExl
eGVyT25TaW5nbGVUb2tlbnNdKToKKyAgICAgICAgKC1bV0dTTExleGVyVGVzdHMgdGVzdExleGVy
T25Db21wdXRlU2hhZGVyXSk6CisgICAgICAgICgtW1dHU0xMZXhlclRlc3RzIHRlc3RMZXhlck9u
R3JhcGhpY3NTaGFkZXJdKToKKyAgICAgICAgKiBXR1NMVW5pdFRlc3RzL1dHU0xVbml0VGVzdHMu
bW06IFJlbW92ZWQuCisgICAgICAgICgtW1dHU0xVbml0VGVzdHMgdGVzdEV4YW1wbGVdKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAy
Mi0wMS0yNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtXZWJHUFVdIE1ha2Ugc3VyZSBXR1NMVW5pdFRlc3RzIGNhbiBjYWxsIGludG8gV0dTTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNwcCBiL1NvdXJjZS9XZWJHUFUv
V0dTTC9MZXhlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4y
MzRmNGQzZGNjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIu
Y3BwCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxleGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1l
cy5oPgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorVG9rZW4g
TGV4ZXI8VD46OmxleCgpCit7CisgICAgc2tpcFdoaXRlc3BhY2UoKTsKKworICAgIG1fdG9rZW5T
dGFydGluZ1Bvc2l0aW9uID0gbV9jdXJyZW50UG9zaXRpb247CisKKyAgICBpZiAoaXNBdEVuZE9m
RmlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6RW5kT2ZGaWxlKTsK
KworICAgIHN3aXRjaCAobV9jdXJyZW50KSB7CisgICAgY2FzZSAnKCc6CisgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAg
IGNhc2UgJyknOgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRv
a2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2FzZSAneyc6CisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFjZUxlZnQpOworICAgIGNhc2Ug
J30nOgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlw
ZTo6QnJhY2VSaWdodCk7CisgICAgY2FzZSAnWyc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
IHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpCcmFja2V0TGVmdCk7CisgICAgY2FzZSAnXSc6
CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpC
cmFja2V0UmlnaHQpOworICAgIGNhc2UgJzonOgorICAgICAgICBzaGlmdCgpOworICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6Q29sb24pOworICAgIGNhc2UgJywnOgorICAgICAg
ICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6Q29tbWEpOwor
ICAgIGNhc2UgJzsnOgorICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2Vu
KFRva2VuVHlwZTo6U2VtaWNvbG9uKTsKKyAgICBjYXNlICc9JzoKKyAgICAgICAgc2hpZnQoKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkVxdWFsKTsKKyAgICBjYXNlICc+
JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6
OkdUKTsKKyAgICBjYXNlICc8JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VUb2tlbihUb2tlblR5cGU6OkxUKTsKKyAgICBjYXNlICdAJzoKKyAgICAgICAgc2hpZnQoKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2Fz
ZSAnLic6IHsKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gY3Vy
cmVudE9mZnNldCgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3N0UGVyaW9k
ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgICAgICBpZiAoIXBvc3RQZXJpb2QpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGVyaW9kKTsKKyAgICAgICAgZG91
YmxlIGxpdGVyYWxWYWx1ZSA9IHBvc3RQZXJpb2QudmFsdWUoKTsKKyAgICAgICAgLy8gRklYTUU6
IHZlcmlmeSB0aGF0IHRoZXJlIGlzIG5vIHVubmFjZXB0YWJsZSBwcmVjaXNpb24gbG9zcworICAg
ICAgICAvLyBJdCBzaG91bGQgYmUgdGVzdGVkIGluIHRoZSBDVFMsIGZvciBub3cgbGV0J3MgZ2V0
IHNvbWV0aGluZyB0aGF0IHdvcmtzCisgICAgICAgIC8vIEFsc28gdGhlIHNhbWUgY29kZSBhcHBl
YXJzIGluIGEgZmV3IHBsYWNlcyBiZWxvdy4KKyAgICAgICAgbGl0ZXJhbFZhbHVlIC89IHBvdygx
MCwgY3VycmVudE9mZnNldCgpIC0gb2Zmc2V0KTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxpbnQ2
NF90PiBleHBvbmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKTsKKyAgICAgICAgaWYg
KGV4cG9uZW50KQorICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICo9IHBvdygxMCwgZXhwb25lbnQu
dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVj
aW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9CisgICAgY2FzZSAnLSc6Cisg
ICAgICAgIHNoaWZ0KCk7CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJz4nKSB7CisgICAgICAg
ICAgICBzaGlmdCgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkFy
cm93KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlICcwJzogeworICAgICAg
ICBzaGlmdCgpOworICAgICAgICBkb3VibGUgbGl0ZXJhbFZhbHVlID0gMDsKKyAgICAgICAgaWYg
KG1fY3VycmVudCA9PSAneCcpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMKKyAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICBib29sIGhleE51bWJlcklzRW1wdHkgPSB0cnVlOworICAgICAgICAg
ICAgd2hpbGUgKGlzSGV4YWRlY2ltYWwobV9jdXJyZW50KSkgeworICAgICAgICAgICAgICAgIGxp
dGVyYWxWYWx1ZSAqPSAxNjsKKyAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUgKz0gcmVhZEhl
eGFkZWNpbWFsKG1fY3VycmVudCk7CisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAg
ICAgICAgICBoZXhOdW1iZXJJc0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoaGV4TnVtYmVySXNFbXB0eSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHJldHVybiBwYXJzZUludGVnZXJMaXRlcmFsU3VmZml4KGxpdGVyYWxWYWx1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIGlzRmxvYXRpbmdQb2ludCA9IGZhbHNlOworICAgICAg
ICBpZiAoaXNEZWNpbWFsKG1fY3VycmVudCkgfHwgbV9jdXJyZW50ID09ICcuJyB8fCBtX2N1cnJl
bnQgPT0gJ2UnIHx8IG1fY3VycmVudCA9PSAnRScpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGludGVnZXJQYXJ0ID0gcGFyc2VEZWNpbWFsSW50ZWdlcigpOworICAgICAg
ICAgICAgaWYgKGludGVnZXJQYXJ0KQorICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSA9IGlu
dGVnZXJQYXJ0LnZhbHVlKCk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykgewor
ICAgICAgICAgICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hhcmUgdGhpcyBjb2RlIHdpdGgg
dGhlIFsxLTldIGNhc2UKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBjdXJyZW50
T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBl
cmlvZCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zdFBl
cmlvZCkgeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgZnJhY3Rpb25hbFBhcnQgPSBwb3N0
UGVyaW9kLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxQYXJ0IC89IHBv
dygxMCwgY3VycmVudE9mZnNldCgpIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbGl0
ZXJhbFZhbHVlICs9IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50ID09ICdmJykgeworICAgICAgICAgICAgICAgICAgICBzaGlm
dCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5
cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4g
ZXhwb25lbnQgPSBwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBsaXRlcmFsVmFsdWUgKj0gcG93KDEwLCBleHBvbmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVy
YWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBEZWNpbWFs
IGludGVnZXJzIGFyZSBub3QgYWxsb3dlZCB0byBzdGFydCB3aXRoIDAuCisgICAgICAgICAgICBp
ZiAoIWlzRmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRv
a2VuVHlwZTo6SW52YWxpZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAn
ZicpIHsKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVy
YWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzRmxvYXRpbmdQb2ludCkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJh
bFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZWdlckxpdGVyYWxTdWZmaXgobGl0ZXJh
bFZhbHVlKTsKKyAgICB9CisgICAgY2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAgY2FzZSAn
Myc6CisgICAgY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6CisgICAgY2FzZSAnNic6CisgICAgY2Fz
ZSAnNyc6CisgICAgY2FzZSAnOCc6CisgICAgY2FzZSAnOSc6IHsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gdmFsdWUgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6SW52YWxp
ZCk7CisgICAgICAgIGRvdWJsZSBsaXRlcmFsVmFsdWUgPSB2YWx1ZS52YWx1ZSgpOworICAgICAg
ICBib29sIGlzRmxvYXRpbmdQb2ludCA9IGZhbHNlOworICAgICAgICBpZiAobV9jdXJyZW50ID09
ICcuJykgeworICAgICAgICAgICAgaXNGbG9hdGluZ1BvaW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
IHNoaWZ0KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7
CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3N0UGVyaW9kID0gcGFyc2VE
ZWNpbWFsSW50ZWdlcigpOworICAgICAgICAgICAgaWYgKHBvc3RQZXJpb2QpIHsKKyAgICAgICAg
ICAgICAgICBkb3VibGUgZnJhY3Rpb25hbFBhcnQgPSBwb3N0UGVyaW9kLnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgZnJhY3Rpb25hbFBhcnQgLz0gcG93KDEwLCBjdXJyZW50T2Zmc2V0KCkgLSBv
ZmZzZXQpOworICAgICAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSArPSBmcmFjdGlvbmFsUGFydDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxpbnQ2
NF90PiBleHBvbmVudCA9IHBhcnNlRGVjaW1hbEZsb2F0RXhwb25lbnQoKSkgeworICAgICAgICAg
ICAgbGl0ZXJhbFZhbHVlICo9IHBvdygxMCwgZXhwb25lbnQudmFsdWUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWws
IGxpdGVyYWxWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnZicp
IHsKKyAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxU
b2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFpc0Zsb2F0aW5nUG9pbnQpCisgICAgICAgICAgICByZXR1cm4g
cGFyc2VJbnRlZ2VyTGl0ZXJhbFN1ZmZpeChsaXRlcmFsVmFsdWUpOworICAgICAgICByZXR1cm4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxW
YWx1ZSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFy
dChtX2N1cnJlbnQpKSB7CisgICAgICAgICAgICBjb25zdCBUKiBzdGFydE9mVG9rZW4gPSBtX2Nv
ZGU7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgd2hpbGUgKGlzVmFsaWRJZGVu
dGlmaWVyQ2hhcmFjdGVyKG1fY3VycmVudCkpCisgICAgICAgICAgICAgICAgc2hpZnQoKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBhIHRyaWUgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgaGVyZSwg
bG9vayBhdCBKYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5IGZvciBhbiBl
eGFtcGxlIG9mIGNvZGUgYXV0b2dlbmVyYXRpb24gdGhhdCBwcm9kdWNlcyBzdWNoIGEgdHJpZS4K
KyAgICAgICAgICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0YXJ0T2ZUb2tlbiwgY3VycmVudFRva2Vu
TGVuZ3RoKCkgfTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoYXQgdHJ1
ZS9mYWxzZS9mMzIvdTMyL2kzMi9ib29sIG5lZWQgdG8gYmUgdGhlaXIgb3duIHRva2VucywgdGhl
eSBjb3VsZCBqdXN0IGJlIHJlZ3VsYXIgaWRlbnRpZmllcnMuCisgICAgICAgICAgICBpZiAodmll
dyA9PSAidHJ1ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6
OkxpdGVyYWxUcnVlKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJmYWxzZSIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkxpdGVyYWxGYWxzZSk7CisgICAg
ICAgICAgICBpZiAodmlldyA9PSAiYm9vbCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VU
b2tlbihUb2tlblR5cGU6OktleXdvcmRCb29sKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJp
MzIiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3Jk
STMyKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJ1MzIiKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkVTMyKTsKKyAgICAgICAgICAgIGlmICh2
aWV3ID09ICJmMzIiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBl
OjpLZXl3b3JkRjMyKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJmbiIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAgICAgICAg
ICBpZiAodmlldyA9PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW4oVG9rZW5UeXBlOjpLZXl3b3JkRnVuY3Rpb24pOworICAgICAgICAgICAgaWYgKHZpZXcgPT0g
InByaXZhdGUiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpL
ZXl3b3JkUHJpdmF0ZSk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAicmVhZCIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRSZWFkKTsKKyAgICAg
ICAgICAgIGlmICh2aWV3ID09ICJyZWFkX3dyaXRlIikKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFJlYWRXcml0ZSk7CisgICAgICAgICAgICBpZiAo
dmlldyA9PSAicmV0dXJuIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2Vu
VHlwZTo6S2V5d29yZFJldHVybik7CisgICAgICAgICAgICBpZiAodmlldyA9PSAic3RvcmFnZSIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRTdG9y
YWdlKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJzdHJ1Y3QiKQorICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkU3RydWN0KTsKKyAgICAgICAgICAg
IGlmICh2aWV3ID09ICJ1bmlmb3JtIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2Vu
KFRva2VuVHlwZTo6S2V5d29yZFVuaWZvcm0pOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInZh
ciIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRW
YXIpOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gIndvcmtncm91cCIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRXb3JrZ3JvdXApOworICAgICAg
ICAgICAgaWYgKHZpZXcgPT0gIndyaXRlIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRv
a2VuKFRva2VuVHlwZTo6S2V5d29yZFdyaXRlKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJh
c20iIHx8IHZpZXcgPT0gImJmMTYiIHx8IHZpZXcgPT0gImNvbnN0IiB8fCB2aWV3ID09ICJkbyIg
fHwgdmlldyA9PSAiZW51bSIKKyAgICAgICAgICAgICAgICB8fCB2aWV3ID09ICJmMTYiIHx8IHZp
ZXcgPT0gImY2NCIgfHwgdmlldyA9PSAiaGFuZGxlIiB8fCB2aWV3ID09ICJpOCIgfHwgdmlldyA9
PSAiaTE2IgorICAgICAgICAgICAgICAgIHx8IHZpZXcgPT0gImk2NCIgfHwgdmlldyA9PSAibWF0
IiB8fCB2aWV3ID09ICJwcmVtZXJnZSIgfHwgdmlldyA9PSAicmVnYXJkbGVzcyIKKyAgICAgICAg
ICAgICAgICB8fCB2aWV3ID09ICJ0eXBlZGVmIiB8fCB2aWV3ID09ICJ1OCIgfHwgdmlldyA9PSAi
dTE2IiB8fCB2aWV3ID09ICJ1NjQiIHx8IHZpZXcgPT0gInVubGVzcyIKKyAgICAgICAgICAgICAg
ICB8fCB2aWV3ID09ICJ1c2luZyIgfHwgdmlldyA9PSAidmVjIiB8fCB2aWV3ID09ICJ2b2lkIiB8
fCB2aWV3ID09ICJ3aGlsZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tl
blR5cGU6OlJlc2VydmVkV29yZCk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUlkZW50aWZpZXJU
b2tlbih2aWV3KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OkludmFsaWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3ZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKK3sKKyAgICAvLyBBdCBvbmUgcG9pbnQgdGltaW5n
IHNob3dlZCB0aGF0IHNldHRpbmcgbV9jdXJyZW50IHRvIDAgdW5jb25kaXRpb25hbGx5IHdhcyBm
YXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNlLgorICAgIG1fY3VycmVudCA9IDA7CisgICAg
KyttX2NvZGU7CisgICAgKyttX2N1cnJlbnRQb3NpdGlvbi5tX29mZnNldDsKKyAgICArK21fY3Vy
cmVudFBvc2l0aW9uLm1fbGluZU9mZnNldDsKKyAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29k
ZUVuZCkpCisgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorVCBMZXhlcjxUPjo6cGVlayh1bnNpZ25lZCBpKQoreworICAgIGlmIChVTkxJS0VM
WShtX2NvZGUgKyBpID49IG1fY29kZUVuZCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biAqKG1fY29kZSArIGkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8
VD46OnNraXBXaGl0ZXNwYWNlKCkKK3sKKyAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKG1fY3VycmVu
dCkpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnXG4nKSB7CisgICAgICAgICAgICBzaGlm
dCgpOworICAgICAgICAgICAgKyttX2N1cnJlbnRQb3NpdGlvbi5tX2xpbmU7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQb3NpdGlvbi5tX2xpbmVPZmZzZXQgPSAwOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNoaWZ0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jv
b2wgTGV4ZXI8VD46OmlzQXRFbmRPZkZpbGUoKSBjb25zdAoreworICAgIGlmIChtX2NvZGUgPT0g
bV9jb2RlRW5kKSB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIEFTU0VSVChtX2NvZGUgPCBtX2NvZGVFbmQpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6Om9wdGlvbmFsPHVpbnQ2
NF90PiBMZXhlcjxUPjo6cGFyc2VEZWNpbWFsSW50ZWdlcigpCit7CisgICAgaWYgKCFpc0RlY2lt
YWwobV9jdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIENoZWNr
ZWRVaW50NjQgdmFsdWUgPSAwOworICAgIHdoaWxlIChpc0RlY2ltYWwobV9jdXJyZW50KSkgewor
ICAgICAgICB2YWx1ZSAqPSAxMHVsbDsKKyAgICAgICAgdmFsdWUgKz0gcmVhZERlY2ltYWwobV9j
dXJyZW50KTsKKyAgICAgICAgc2hpZnQoKTsKKyAgICB9CisgICAgaWYgKHZhbHVlLmhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB2YWx1
ZS52YWx1ZSgpIH07Cit9CisKKy8vIFBhcnNlIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rZj8g
aWYgaXQgaXMgcHJlc2VudCwgYW5kIHJldHVybiB0aGUgZXhwb25lbnQKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBMZXhlcjxUPjo6cGFyc2VEZWNpbWFsRmxv
YXRFeHBvbmVudCgpCit7CisgICAgVCBjaGFyMSA9IHBlZWsoMSk7CisgICAgVCBjaGFyMiA9IHBl
ZWsoMik7CisgICAgLy8gQ2hlY2sgZm9yIHBhdHRlcm4gKGV8RSkoXCt8LSk/WzAtOV0rCisgICAg
aWYgKG1fY3VycmVudCAhPSAnZScgJiYgbV9jdXJyZW50ICE9ICdFJykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoY2hhcjEgPT0gJysnIHx8IGNoYXIxID09ICctJykgewor
ICAgICAgICBpZiAoIWlzRGVjaW1hbChjaGFyMikpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0gZWxzZSBpZiAoIWlzRGVjaW1hbChjaGFyMSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgc2hpZnQoKTsKKworICAgIGJvb2wgbmVnYXRlRXhwb25lbnQg
PSBmYWxzZTsKKyAgICBpZiAobV9jdXJyZW50ID09ICctJykgeworICAgICAgICBuZWdhdGVFeHBv
bmVudCA9IHRydWU7CisgICAgICAgIHNoaWZ0KCk7CisgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQg
PT0gJysnKQorICAgICAgICBzaGlmdCgpOworCisgICAgc3RkOjpvcHRpb25hbDxpbnQ2NF90PiBl
eHBvbmVudCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICBpZiAoIWV4cG9uZW50KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIENoZWNrZWRJbnQ2NCBleHBvbmVudFZhbHVl
ID0gZXhwb25lbnQudmFsdWUoKTsKKyAgICBpZiAobmVnYXRlRXhwb25lbnQpCisgICAgICAgIGV4
cG9uZW50VmFsdWUgPSAtIGV4cG9uZW50VmFsdWU7CisgICAgaWYgKGV4cG9uZW50VmFsdWUuaGFz
T3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB7
IGV4cG9uZW50VmFsdWUudmFsdWUoKSB9OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitU
b2tlbiBMZXhlcjxUPjo6cGFyc2VJbnRlZ2VyTGl0ZXJhbFN1ZmZpeChkb3VibGUgbGl0ZXJhbFZh
bHVlKQoreworICAgIGlmIChtX2N1cnJlbnQgPT0gJ2knKSB7CisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxT
aWduZWQsIGxpdGVyYWxWYWx1ZSk7CisgICAgfQorICAgIGlmIChtX2N1cnJlbnQgPT0gJ3UnKSB7
CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2Vu
VHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZCwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9CisgICAg
cmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgbGl0ZXJh
bFZhbHVlKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29s
IExleGVyPFQ+Ojppc1doaXRlU3BhY2UoVCBjaCkKK3sKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OnNwYWNlOgorICAgIGNhc2UgV1RGOjpVbmljb2RlOjp0YWJDaGFy
YWN0ZXI6CisgICAgY2FzZSBXVEY6OlVuaWNvZGU6OmNhcnJpYWdlUmV0dXJuOgorICAgIGNhc2Ug
V1RGOjpVbmljb2RlOjpuZXdsaW5lQ2hhcmFjdGVyOgorICAgIGNhc2UgJ1x2JzoKKyAgICBjYXNl
ICdcZic6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElO
RSBib29sIExleGVyPFQ+Ojppc0lkZW50aWZpZXJTdGFydChUIGNoKQoreworICAgIHJldHVybiAo
Y2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNW
YWxpZElkZW50aWZpZXJDaGFyYWN0ZXIoVCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID49ICdhJyAm
JiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJzAnICYm
IGNoIDw9ICc5JykgfHwgY2ggPT0gJ18nOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FM
V0FZU19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNEZWNpbWFsKFQgY2gpCit7CisgICAgcmV0dXJu
IChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TFdBWVNfSU5MSU5FIGJvb2wgTGV4ZXI8VD46OmlzSGV4YWRlY2ltYWwoVCBjaCkKK3sKKyAgICBy
ZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ2Yn
KSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQUxXQVlTX0lOTElORSB1aW50NjRfdCBMZXhlcjxUPjo6cmVhZERlY2ltYWwoVCBjaCkKK3sK
KyAgICBBU1NFUlQoaXNEZWNpbWFsKGNoKSk7CisgICAgcmV0dXJuIGNoIC0gJzAnOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdWludDY0X3QgTGV4ZXI8VD46OnJl
YWRIZXhhZGVjaW1hbChUIGNoKQoreworICAgIEFTU0VSVChpc0hleGFkZWNpbWFsKGNoKSk7Cisg
ICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpCisgICAgICAgIHJldHVybiBjaCAtICcwJzsK
KyAgICBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykKKyAgICAgICAgcmV0dXJuIGNoIC0gJ2En
OworICAgIEFTU0VSVChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKTsKKyAgICByZXR1cm4gY2ggLSAn
QSc7Cit9CisKK3RlbXBsYXRlIGNsYXNzIExleGVyPExDaGFyPjsKK3RlbXBsYXRlIGNsYXNzIExl
eGVyPFVDaGFyPjsKKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvTGV4ZXIu
aCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uZjNlNmZmODk3YWUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkdQVS9XR1NML0xleGVyLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmll
dy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV0dTTCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBMZXhlciB7CitwdWJsaWM6CisgICAgTGV4
ZXIoY29uc3QgU3RyaW5nJiB3Z3NsKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWU8VCwgTENoYXI+Ojp2YWx1ZSkgeworICAgICAgICAgICAgbV9jb2RlID0gd2dzbC5j
aGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgbV9jb2RlRW5kID0gbV9jb2RlICsgd2dzbC5zaXpl
SW5CeXRlcygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8VCwgVUNoYXI+Ojp2YWx1ZSwgIlRoZSBsZXhlciBleHBlY3RzIGl0cyB0ZW1w
bGF0ZSBwYXJhbWV0ZXIgdG8gYmUgZWl0aGVyIExDaGFyIG9yIFVDaGFyIik7CisgICAgICAgICAg
ICBtX2NvZGUgPSB3Z3NsLmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgQVNTRVJUKCEod2dz
bC5zaXplSW5CeXRlcygpICUgMikpOworICAgICAgICAgICAgbV9jb2RlRW5kID0gbV9jb2RlICsg
d2dzbC5zaXplSW5CeXRlcygpIC8gMjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY3VycmVudCA9
IChtX2NvZGUgIT0gbV9jb2RlRW5kKSA/ICptX2NvZGUgOiAwOworICAgIH0KKworICAgIFRva2Vu
IGxleCgpOworICAgIGJvb2wgaXNBdEVuZE9mRmlsZSgpIGNvbnN0OworICAgIFNvdXJjZVBvc2l0
aW9uIGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvc2l0aW9uOyB9
CisKKyAgICAvLyBPbmx5IHB1YmxpYyBzbyB0aGF0IHRoZSBVQ2hhciB2ZXJzaW9uIG9mIHRoZSBM
ZXhlciBjYW4gZGVmZXIgdG8gdGhlIExDaGFyIHZlcnNpb24KKyAgICBzdGF0aWMgYm9vbCBpc1do
aXRlU3BhY2UoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyBib29sIGlzSWRlbnRpZmllclN0YXJ0
KFQgY2hhcmFjdGVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkSWRlbnRpZmllckNoYXJhY3Rl
cihUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIGJvb2wgaXNEZWNpbWFsKFQgY2hhcmFjdGVyKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0hleGFkZWNpbWFsKFQgY2hhcmFjdGVyKTsKKyAgICBzdGF0aWMg
dWludDY0X3QgcmVhZERlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyB1aW50NjRfdCBy
ZWFkSGV4YWRlY2ltYWwoVCBjaGFyYWN0ZXIpOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIGN1
cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRQb3NpdGlvbi5tX29mZnNldDsg
fQorICAgIHVuc2lnbmVkIGN1cnJlbnRUb2tlbkxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl
bnRPZmZzZXQoKSAtIG1fdG9rZW5TdGFydGluZ1Bvc2l0aW9uLm1fb2Zmc2V0OyB9CisKKyAgICBU
b2tlbiBtYWtlVG9rZW4oVG9rZW5UeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4geyB0
eXBlLCBtX3Rva2VuU3RhcnRpbmdQb3NpdGlvbiwgY3VycmVudFRva2VuTGVuZ3RoKCkgfTsKKyAg
ICB9CisgICAgVG9rZW4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGUgdHlwZSwgZG91YmxlIGxp
dGVyYWxWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB7IHR5cGUsIG1fdG9rZW5TdGFydGlu
Z1Bvc2l0aW9uLCBjdXJyZW50VG9rZW5MZW5ndGgoKSwgbGl0ZXJhbFZhbHVlIH07CisgICAgfQor
ICAgIFRva2VuIG1ha2VJZGVudGlmaWVyVG9rZW4oU3RyaW5nVmlldyB2aWV3KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHsgV0dTTDo6VG9rZW5UeXBlOjpJZGVudGlmaWVyLCBtX3Rva2VuU3RhcnRp
bmdQb3NpdGlvbiwgY3VycmVudFRva2VuTGVuZ3RoKCksIHZpZXcgfTsKKyAgICB9CisKKyAgICB2
b2lkIHNoaWZ0KCk7CisgICAgVCBwZWVrKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNraXBXaGl0ZXNw
YWNlKCk7CisKKyAgICAvLyBSZWFkcyBbMC05XSsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgLy8gUGFyc2UgcGF0dGVybiAoZXxFKShcK3wt
KT9bMC05XStmPyBpZiBpdCBpcyBwcmVzZW50LCBhbmQgcmV0dXJuIHRoZSBleHBvbmVudAorICAg
IHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4gcGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVudCgpOworICAg
IC8vIENoZWNrcyB3aGV0aGVyIHRoZXJlIGlzIGFuICJpIiBvciAidSIgY29taW5nLCBhbmQgcmV0
dXJuIHRoZSByaWdodCBraW5kIG9mIGxpdGVyYWwgdG9rZW4KKyAgICBUb2tlbiBwYXJzZUludGVn
ZXJMaXRlcmFsU3VmZml4KGRvdWJsZSBsaXRlcmFsVmFsdWUpOworCisgICAgVCBtX2N1cnJlbnQ7
CisgICAgY29uc3QgVCogbV9jb2RlOworICAgIGNvbnN0IFQqIG1fY29kZUVuZDsKKyAgICBTb3Vy
Y2VQb3NpdGlvbiBtX2N1cnJlbnRQb3NpdGlvbiB7IDAsIDAsIDAgfTsKKyAgICBTb3VyY2VQb3Np
dGlvbiBtX3Rva2VuU3RhcnRpbmdQb3NpdGlvbiB7IDAsIDAsIDAgfTsKK307CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9Tb3VyY2VTcGFuLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvU291cmNlU3Bhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
NDViMThjNDU1OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1NvdXJj
ZVNwYW4uaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25h
bWVzcGFjZSBXR1NMIHsKKworc3RydWN0IFNvdXJjZVBvc2l0aW9uIHsKKyAgICB1bnNpZ25lZCBt
X2xpbmU7CisgICAgdW5zaWduZWQgbV9saW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0
OworfTsKKworc3RydWN0IFNvdXJjZVNwYW4geworICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBwb3Nz
aWJseSBza2lwIG1fbGluZU9mZnNldCBhbmQgcmVjb21wdXRlIGl0IG9ubHkgd2hlbiB0cnlpbmcg
dG8gc2hvdyBhbiBlcnJvcgorICAgIC8vIFRoaXMgd291bGQgc2hyaW5rIHRoZSBBU1Qgc2l6ZSBi
eSAzMiBiaXRzIHBlciBBU1Qgbm9kZSwgYXQgdGhlIGNvc3Qgb2YgYSBiaXQgb2YgY29kZSBjb21w
bGV4aXR5IGluIHRoZSBlcnJvciB0b1N0cmluZyBmdW5jdGlvbi4KKyAgICB1bnNpZ25lZCBtX2xp
bmU7CisgICAgdW5zaWduZWQgbV9saW5lT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0Owor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworCisgICAgU291cmNlU3Bhbih1bnNpZ25lZCBsaW5lLCB1
bnNpZ25lZCBsaW5lT2Zmc2V0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAg
ICAgICAgOiBtX2xpbmUobGluZSkKKyAgICAgICAgLCBtX2xpbmVPZmZzZXQobGluZU9mZnNldCkK
KyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgU291cmNlU3BhbihTb3VyY2VQb3NpdGlvbiBzdGFydCwg
U291cmNlUG9zaXRpb24gZW5kKQorICAgICAgICA6IG1fbGluZShzdGFydC5tX2xpbmUpCisgICAg
ICAgICwgbV9saW5lT2Zmc2V0KHN0YXJ0Lm1fbGluZU9mZnNldCkKKyAgICAgICAgLCBtX29mZnNl
dChzdGFydC5tX29mZnNldCkKKyAgICAgICAgLCBtX2xlbmd0aChlbmQubV9vZmZzZXQgLSBzdGFy
dC5tX29mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XR1NML1Rva2VuLmNwcCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Ub2tlbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kYjNjMGE0M2UxMDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvVG9rZW4uY3BwCkBAIC0wLDAgKzEsMTIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisK
K25hbWVzcGFjZSBXR1NMIHsKKworU3RyaW5nIHRvU3RyaW5nKFRva2VuVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVG9rZW5UeXBlOjpJbnZhbGlkOgorICAgICAg
ICByZXR1cm4gIkludmFsaWQiOworICAgIGNhc2UgVG9rZW5UeXBlOjpFbmRPZkZpbGU6CisgICAg
ICAgIHJldHVybiAiRU9GIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWw6Cisg
ICAgICAgIHJldHVybiAiSW50ZWdlckxpdGVyYWwiOworICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRl
Z2VyTGl0ZXJhbFNpZ25lZDoKKyAgICAgICAgcmV0dXJuICJJbnRlZ2VyTGl0ZXJhbFNpZ25lZCI7
CisgICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsVW5zaWduZWQ6CisgICAgICAgIHJl
dHVybiAiSW50ZWdlckxpdGVyYWxVbnNpZ25lZCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkRlY2lt
YWxGbG9hdExpdGVyYWw6CisgICAgICAgIHJldHVybiAiRGVjaW1hbEZsb2F0TGl0ZXJhbCI7Cisg
ICAgY2FzZSBUb2tlblR5cGU6OkhleEZsb2F0TGl0ZXJhbDoKKyAgICAgICAgcmV0dXJuICJIZXhG
bG9hdExpdGVyYWwiOworICAgIGNhc2UgVG9rZW5UeXBlOjpJZGVudGlmaWVyOgorICAgICAgICBy
ZXR1cm4gIklkZW50aWZpZXIiOworICAgIGNhc2UgVG9rZW5UeXBlOjpSZXNlcnZlZFdvcmQ6Cisg
ICAgICAgIHJldHVybiAiUmVzZXJ2ZWRXb3JkIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29y
ZFN0cnVjdDoKKyAgICAgICAgcmV0dXJuICJzdHJ1Y3QiOworICAgIGNhc2UgVG9rZW5UeXBlOjpL
ZXl3b3JkRm46CisgICAgICAgIHJldHVybiAiZm4iOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3
b3JkRnVuY3Rpb246CisgICAgICAgIHJldHVybiAiZnVuY3Rpb24iOworICAgIGNhc2UgVG9rZW5U
eXBlOjpLZXl3b3JkUHJpdmF0ZToKKyAgICAgICAgcmV0dXJuICJwcml2YXRlIjsKKyAgICBjYXNl
IFRva2VuVHlwZTo6S2V5d29yZFJlYWQ6CisgICAgICAgIHJldHVybiAicmVhZCI7CisgICAgY2Fz
ZSBUb2tlblR5cGU6OktleXdvcmRSZWFkV3JpdGU6CisgICAgICAgIHJldHVybiAicmVhZF93cml0
ZSI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRSZXR1cm46CisgICAgICAgIHJldHVybiAi
cmV0dXJuIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFN0b3JhZ2U6CisgICAgICAgIHJl
dHVybiAic3RvcmFnZSI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRVbmlmb3JtOgorICAg
ICAgICByZXR1cm4gInVuaWZvcm0iOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkVmFyOgor
ICAgICAgICByZXR1cm4gInZhciI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRXb3JrZ3Jv
dXA6CisgICAgICAgIHJldHVybiAid29ya2dyb3VwIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5
d29yZFdyaXRlOgorICAgICAgICByZXR1cm4gIndyaXRlIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6
S2V5d29yZEkzMjoKKyAgICAgICAgcmV0dXJuICJpMzIiOworICAgIGNhc2UgVG9rZW5UeXBlOjpL
ZXl3b3JkVTMyOgorICAgICAgICByZXR1cm4gInUzMiI7CisgICAgY2FzZSBUb2tlblR5cGU6Oktl
eXdvcmRGMzI6CisgICAgICAgIHJldHVybiAiZjMyIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5
d29yZEJvb2w6CisgICAgICAgIHJldHVybiAiYm9vbCI7CisgICAgY2FzZSBUb2tlblR5cGU6Okxp
dGVyYWxUcnVlOgorICAgICAgICByZXR1cm4gInRydWUiOworICAgIGNhc2UgVG9rZW5UeXBlOjpM
aXRlcmFsRmFsc2U6CisgICAgICAgIHJldHVybiAiZmFsc2UiOworICAgIGNhc2UgVG9rZW5UeXBl
OjpBcnJvdzoKKyAgICAgICAgcmV0dXJuICItPiI7CisgICAgY2FzZSBUb2tlblR5cGU6OkF0dHJp
YnV0ZToKKyAgICAgICAgcmV0dXJuICJAIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6QnJhY2tldExl
ZnQ6CisgICAgICAgIHJldHVybiAiWyI7CisgICAgY2FzZSBUb2tlblR5cGU6OkJyYWNrZXRSaWdo
dDoKKyAgICAgICAgcmV0dXJuICJdIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6QnJhY2VMZWZ0Ogor
ICAgICAgICByZXR1cm4gInsiOworICAgIGNhc2UgVG9rZW5UeXBlOjpCcmFjZVJpZ2h0OgorICAg
ICAgICByZXR1cm4gIn0iOworICAgIGNhc2UgVG9rZW5UeXBlOjpDb2xvbjoKKyAgICAgICAgcmV0
dXJuICI6IjsKKyAgICBjYXNlIFRva2VuVHlwZTo6Q29tbWE6CisgICAgICAgIHJldHVybiAiLCI7
CisgICAgY2FzZSBUb2tlblR5cGU6OkVxdWFsOgorICAgICAgICByZXR1cm4gIj0iOworICAgIGNh
c2UgVG9rZW5UeXBlOjpHVDoKKyAgICAgICAgcmV0dXJuICI+IjsKKyAgICBjYXNlIFRva2VuVHlw
ZTo6TFQ6CisgICAgICAgIHJldHVybiAiPCI7CisgICAgY2FzZSBUb2tlblR5cGU6OlBlcmlvZDoK
KyAgICAgICAgcmV0dXJuICIuIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6UGFyZW5MZWZ0OgorICAg
ICAgICByZXR1cm4gIigiOworICAgIGNhc2UgVG9rZW5UeXBlOjpQYXJlblJpZ2h0OgorICAgICAg
ICByZXR1cm4gIikiOworICAgIGNhc2UgVG9rZW5UeXBlOjpTZW1pY29sb246CisgICAgICAgIHJl
dHVybiAiOyI7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wv
VG9rZW4uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uOWI4N2UxMmRjN2YzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkdQVS9XR1NML1Rva2VuLmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZVNwYW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXR1NMIHsKKworZW51bSBjbGFzcyBUb2tlblR5cGU6IHVpbnQzMl90IHsKKyAgICAvLyBJ
bnN0ZWFkIG9mIGhhdmluZyB0aGlzIHR5cGUsIHdlIGNvdWxkIGhhdmUgYSBzdGQ6Om9wdGlvbmFs
PFRva2VuPiBldmVyeXdoZXJlIHRoYXQgd2UgY3VycmVudGx5IGhhdmUgYSBUb2tlbi4KKyAgICAv
LyBJIG1hZGUgdGhpcyBjaG9pY2UgZm9yIHR3byByZWFzb25zOgorICAgIC8vIC0gc3BhY2UgZWZm
aWNpZW5jeTogd2UgZG9uJ3QgdXNlIGFuIGV4dHJhIHdvcmQgb2YgbWVtb3J5IGZvciB0aGUgdmFy
aWFudCdzIHRhZworICAgIC8vICAgICAoYWx0aG91Z2ggdGhpcyBwYXJ0IGNvdWxkIGJlIHNvbHZl
ZCBieSB1c2luZyBodHRwczovL2dpdGh1Yi5jb20vYWtyemVtaTEvbWFya2FibGUpCisgICAgLy8g
LSBlYXNlIG9mIHVzZSBhbmQgdGltZSBlZmZpY2llbmN5OiBldmVyeXdoZXJlIHRoYXQgd2UgY2hl
Y2sgZm9yIGEgZ2l2ZW4gVG9rZW5UeXBlLCB3ZSB3b3VsZCBoYXZlIHRvIGZpcnN0IGNoZWNrIHRo
YXQgdGhlIFRva2VuIGlzIG5vdCBudWxsb3B0LCBhbmQgdGhlbiBjaGVjayB0aGUgVG9rZW5UeXBl
LgorICAgIEludmFsaWQsCisKKyAgICBFbmRPZkZpbGUsCisKKyAgICBJbnRlZ2VyTGl0ZXJhbCwK
KyAgICBJbnRlZ2VyTGl0ZXJhbFNpZ25lZCwKKyAgICBJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkLAor
ICAgIERlY2ltYWxGbG9hdExpdGVyYWwsCisgICAgSGV4RmxvYXRMaXRlcmFsLAorCisgICAgSWRl
bnRpZmllciwKKworICAgIFJlc2VydmVkV29yZCwKKyAgICBLZXl3b3JkRm4sCisgICAgS2V5d29y
ZEZ1bmN0aW9uLAorICAgIEtleXdvcmRQcml2YXRlLAorICAgIEtleXdvcmRSZWFkLAorICAgIEtl
eXdvcmRSZWFkV3JpdGUsCisgICAgS2V5d29yZFJldHVybiwKKyAgICBLZXl3b3JkU3RvcmFnZSwK
KyAgICBLZXl3b3JkU3RydWN0LAorICAgIEtleXdvcmRVbmlmb3JtLAorICAgIEtleXdvcmRWYXIs
CisgICAgS2V5d29yZFdvcmtncm91cCwKKyAgICBLZXl3b3JkV3JpdGUsCisgICAgS2V5d29yZEkz
MiwKKyAgICBLZXl3b3JkVTMyLAorICAgIEtleXdvcmRGMzIsCisgICAgS2V5d29yZEJvb2wsCisg
ICAgTGl0ZXJhbFRydWUsCisgICAgTGl0ZXJhbEZhbHNlLAorICAgIC8vIEZJWE1FOiBhZGQgYWxs
IHRoZSBvdGhlciBrZXl3b3Jkczogc2VlICNrZXl3b3JkLXN1bW1hcnkgaW4gdGhlIFdHU0wgc3Bl
YworCisgICAgQXJyb3csCisgICAgQXR0cmlidXRlLAorICAgIEJyYWNlTGVmdCwKKyAgICBCcmFj
ZVJpZ2h0LAorICAgIEJyYWNrZXRMZWZ0LAorICAgIEJyYWNrZXRSaWdodCwKKyAgICBDb2xvbiwK
KyAgICBDb21tYSwKKyAgICBFcXVhbCwKKyAgICBHVCwKKyAgICBMVCwKKyAgICBQZXJpb2QsCisg
ICAgUGFyZW5MZWZ0LAorICAgIFBhcmVuUmlnaHQsCisgICAgU2VtaWNvbG9uLAorICAgIC8vIEZJ
WE1FOiBhZGQgYWxsIHRoZSBvdGhlciBzcGVjaWFsIHRva2VucworfTsKKworU3RyaW5nIHRvU3Ry
aW5nKFRva2VuVHlwZSk7CisKK3N0cnVjdCBUb2tlbiB7CisgICAgVG9rZW5UeXBlIG1fdHlwZTsK
KyAgICBTb3VyY2VTcGFuIG1fc3BhbjsKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBtX2xp
dGVyYWxWYWx1ZTsKKyAgICAgICAgU3RyaW5nVmlldyBtX2lkZW50OworICAgIH07CisKKyAgICBU
b2tlbihUb2tlblR5cGUgdHlwZSwgU291cmNlUG9zaXRpb24gcG9zaXRpb24sIHVuc2lnbmVkIGxl
bmd0aCkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3NwYW4ocG9zaXRpb24u
bV9saW5lLCBwb3NpdGlvbi5tX2xpbmVPZmZzZXQsIHBvc2l0aW9uLm1fb2Zmc2V0LCBsZW5ndGgp
CisgICAgeworICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OklkZW50aWZpZXIpOwor
ICAgICAgICBBU1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsKTsKKyAgICAg
ICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZCk7CisgICAg
ICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZCk7Cisg
ICAgICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCk7Cisg
ICAgICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SGV4RmxvYXRMaXRlcmFsKTsKKyAgICB9
CisKKyAgICBUb2tlbihUb2tlblR5cGUgdHlwZSwgU291cmNlUG9zaXRpb24gcG9zaXRpb24sIHVu
c2lnbmVkIGxlbmd0aCwgZG91YmxlIGxpdGVyYWxWYWx1ZSkKKyAgICAgICAgOiBtX3R5cGUodHlw
ZSkKKyAgICAgICAgLCBtX3NwYW4ocG9zaXRpb24ubV9saW5lLCBwb3NpdGlvbi5tX2xpbmVPZmZz
ZXQsIHBvc2l0aW9uLm1fb2Zmc2V0LCBsZW5ndGgpCisgICAgICAgICwgbV9saXRlcmFsVmFsdWUo
bGl0ZXJhbFZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gVG9rZW5UeXBlOjpJ
bnRlZ2VyTGl0ZXJhbAorICAgICAgICAgICAgfHwgdHlwZSA9PSBUb2tlblR5cGU6OkludGVnZXJM
aXRlcmFsU2lnbmVkCisgICAgICAgICAgICB8fCB0eXBlID09IFRva2VuVHlwZTo6SW50ZWdlckxp
dGVyYWxVbnNpZ25lZAorICAgICAgICAgICAgfHwgdHlwZSA9PSBUb2tlblR5cGU6OkRlY2ltYWxG
bG9hdExpdGVyYWwKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gVG9rZW5UeXBlOjpIZXhGbG9hdExp
dGVyYWwpOworICAgIH0KKworICAgIFRva2VuKFRva2VuVHlwZSB0eXBlLCBTb3VyY2VQb3NpdGlv
biBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdWaWV3IGlkZW50KQorICAgICAgICA6
IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc3Bhbihwb3NpdGlvbi5tX2xpbmUsIHBvc2l0aW9u
Lm1fbGluZU9mZnNldCwgcG9zaXRpb24ubV9vZmZzZXQsIGxlbmd0aCkKKyAgICAgICAgLCBtX2lk
ZW50KGlkZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gVG9rZW5UeXBlOjpJZGVu
dGlmaWVyKTsKKyAgICB9CisKKyAgICBUb2tlbiYgb3BlcmF0b3I9KFRva2VuJiYgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAobV90eXBlID09IFRva2VuVHlwZTo6SWRlbnRpZmllcikKKyAgICAg
ICAgICAgIG1faWRlbnQuflN0cmluZ1ZpZXcoKTsKKworICAgICAgICBtX3R5cGUgPSBvdGhlci5t
X3R5cGU7CisgICAgICAgIG1fc3BhbiA9IG90aGVyLm1fc3BhbjsKKworICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fdHlwZSkgeworICAgICAgICBjYXNlIFRva2VuVHlwZTo6SWRlbnRpZmllcjoKKyAg
ICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faWRlbnQpIFN0cmluZ1ZpZXcoKTsKKyAgICAgICAg
ICAgIG1faWRlbnQgPSBvdGhlci5tX2lkZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6
OkludGVnZXJMaXRlcmFsU2lnbmVkOgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxp
dGVyYWxVbnNpZ25lZDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVy
YWw6CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpIZXhGbG9hdExpdGVyYWw6CisgICAgICAgICAg
ICBtX2xpdGVyYWxWYWx1ZSA9IG90aGVyLm1fbGl0ZXJhbFZhbHVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUb2tlbihjb25zdCBUb2tlbiYgb3Ro
ZXIpCisgICAgICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKKyAgICAgICAgLCBtX3NwYW4ob3Ro
ZXIubV9zcGFuKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX3R5cGUpIHsKKyAgICAg
ICAgY2FzZSBUb2tlblR5cGU6OklkZW50aWZpZXI6CisgICAgICAgICAgICBuZXcgKE5vdE51bGws
ICZtX2lkZW50KSBTdHJpbmdWaWV3KCk7CisgICAgICAgICAgICBtX2lkZW50ID0gb3RoZXIubV9p
ZGVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdl
ckxpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFNpZ25lZDoK
KyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsVW5zaWduZWQ6CisgICAgICAg
IGNhc2UgVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsOgorICAgICAgICBjYXNlIFRva2Vu
VHlwZTo6SGV4RmxvYXRMaXRlcmFsOgorICAgICAgICAgICAgbV9saXRlcmFsVmFsdWUgPSBvdGhl
ci5tX2xpdGVyYWxWYWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+VG9rZW4oKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBUb2tlblR5cGU6OklkZW50aWZpZXIpCisgICAgICAg
ICAgICAoJm1faWRlbnQpLT5+U3RyaW5nVmlldygpOworICAgIH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcCBiL1NvdXJj
ZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAppbmRleCAyNWE2ODVlMTcxNTAuLjk0ZmUzOWFiZDczNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwCisrKyBiL1NvdXJjZS9XZWJH
UFUvV0dTTC9XR1NMLmNwcApAQCAtMjcsMTEgKzI3LDE1IEBACiAjaW5jbHVkZSAiV0dTTC5oIgog
CiAjaW5jbHVkZSAiQVNULmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdHU0wg
ewogCi1zdGQ6OnZhcmlhbnQ8U3VjY2Vzc2Z1bENoZWNrLCBGYWlsZWRDaGVjaz4gc3RhdGljQ2hl
Y2soY29uc3QgU3RyaW5nJiwgY29uc3Qgc3RkOjpvcHRpb25hbDxTb3VyY2VNYXA+JikKK3N0ZDo6
dmFyaWFudDxTdWNjZXNzZnVsQ2hlY2ssIEZhaWxlZENoZWNrPiBzdGF0aWNDaGVjayhjb25zdCBT
dHJpbmcmIHN0ciwgY29uc3Qgc3RkOjpvcHRpb25hbDxTb3VyY2VNYXA+JikKIHsKKyAgICAvLyBN
YWtpbmcgc3VyZSB0aGF0IHRoZSBsZXhlciBidWlsZHMgY29ycmVjdGx5LCB3aWxsIGJlIHJlbW92
ZWQgaW4gbGF0ZXIgcGF0Y2hlcworICAgIExleGVyPExDaGFyPiBsZXhlcihzdHIpOworICAgIGxl
eGVyLmxleCgpOwogICAgIHJldHVybiBGYWlsZWRDaGVjayB7IHsgfSwgeyB9IH07CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMTGV4ZXJUZXN0cy5tbSBi
L1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMTGV4ZXJUZXN0cy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhjNDg2ZDFkODE5OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMTGV4ZXJUZXN0cy5tbQpAQCAt
MCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTGV4ZXIuaCIKKworI2ltcG9ydCA8WENU
ZXN0L1hDVGVzdC5oPgorCitAaW50ZXJmYWNlIFdHU0xMZXhlclRlc3RzIDogWENUZXN0Q2FzZQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXR1NMTGV4ZXJUZXN0cworCistICh2b2lkKXRlc3RM
ZXhlck9uU2luZ2xlVG9rZW5zIHsKKyAgICBhdXRvIGNoZWNrU2luZ2xlVG9rZW4gPSBbXSAoY29u
c3QgY2hhciogc3RyaW5nLCBXR1NMOjpUb2tlblR5cGUgdHlwZSkgeworICAgICAgICBXR1NMOjpM
ZXhlcjxMQ2hhcj4gbGV4ZXIoc3RyaW5nKTsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0g
bGV4ZXIubGV4KCk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX3R5cGUsIHR5cGUp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAgYXV0byBjaGVja1NpbmdsZUxp
dGVyYWwgPSBbJl0gKGNvbnN0IGNoYXIqIHN0cmluZywgV0dTTDo6VG9rZW5UeXBlIHR5cGUsIGRv
dWJsZSBsaXRlcmFsVmFsdWUpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tT
aW5nbGVUb2tlbihzdHJpbmcsIHR5cGUpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQu
bV9saXRlcmFsVmFsdWUsIGxpdGVyYWxWYWx1ZSk7CisgICAgfTsKKworICAgIGNoZWNrU2luZ2xl
VG9rZW4oIiIsIFdHU0w6OlRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKKyAgICBjaGVja1NpbmdsZUxp
dGVyYWwoIjEiLCBXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAxKTsKKyAgICBjaGVj
a1NpbmdsZUxpdGVyYWwoIjAiLCBXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsK
KyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjE0MiIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxp
dGVyYWwsIDE0Mik7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCIxLjEiLCBXR1NMOjpUb2tlblR5
cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDEuMSk7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCIw
LjQiLCBXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDAuNCk7CisgICAgY2hl
Y2tTaW5nbGVMaXRlcmFsKCIwMTIzLjQ1NiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgMDEyMy40NTYpOworICAgIGNoZWNrU2luZ2xlVG9rZW4oIjAxMjMiLCBXR1NMOjpU
b2tlblR5cGU6OkludmFsaWQpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiMDEyMy4iLCBXR1NM
OjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDEyMyk7CisgICAgY2hlY2tTaW5nbGVM
aXRlcmFsKCIuNDU2IiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCAwLjQ1
Nik7CisgICAgY2hlY2tTaW5nbGVUb2tlbigiLiIsIFdHU0w6OlRva2VuVHlwZTo6UGVyaW9kKTsK
KyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjQyZiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZs
b2F0TGl0ZXJhbCwgNDIpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJlMGYiLCBXR1NMOjpU
b2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDQyKTsKKyAgICBjaGVja1NpbmdsZUxpdGVy
YWwoIjA0MmUwZiIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgNDIpOwor
ICAgIGNoZWNrU2luZ2xlVG9rZW4oIjA0MmYiLCBXR1NMOjpUb2tlblR5cGU6OkludmFsaWQpOwor
ICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJlLTMiLCBXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxG
bG9hdExpdGVyYWwsIDQyZS0zKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjQyZS1hIiwgV0dT
TDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgNDIpOworfQorCistICh2b2lkKSB0ZXN0TGV4
ZXJPbkNvbXB1dGVTaGFkZXIgeworICAgIFdHU0w6OkxleGVyPExDaGFyPiBsZXhlcigiQGJsb2Nr
IHN0cnVjdCBCIHtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBhOiBpMzI7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkBncm91cCgw
KSBAYmluZGluZygwKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyPHN0b3Jh
Z2UsIHJlYWRfd3JpdGU+IHg6IEI7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkBzdGFnZShjb21wdXRlKVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm4gbWFpbigpIHtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICB4LmEgPSA0MjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIn0iKTsKKworICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSAwOworICAgIGF1dG8gY2hl
Y2tOZXh0VG9rZW4gPSBbJl0gKFdHU0w6OlRva2VuVHlwZSB0eXBlKSB7CisgICAgICAgIFdHU0w6
OlRva2VuIHJlc3VsdCA9IGxleGVyLmxleCgpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1
bHQubV90eXBlLCB0eXBlKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fc3Bhbi5t
X2xpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgICAg
YXV0byBjaGVja05leHRUb2tlbklzSWRlbnRpZmllciA9IFsmXSAoY29uc3QgY2hhciogaWRlbnQp
IHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpJZGVudGlmaWVyKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1faWRl
bnQsIGlkZW50KTsKKyAgICB9OworICAgIGF1dG8gY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwgPSBb
Jl0gKFdHU0w6OlRva2VuVHlwZSB0eXBlLCBkb3VibGUgbGl0ZXJhbFZhbHVlKSB7CisgICAgICAg
IFdHU0w6OlRva2VuIHJlc3VsdCA9IGNoZWNrTmV4dFRva2VuKHR5cGUpOworICAgICAgICBYQ1RB
c3NlcnRFcXVhbChyZXN1bHQubV9saXRlcmFsVmFsdWUsIGxpdGVyYWxWYWx1ZSk7CisgICAgfTsK
KworICAgIC8vIEBibG9jayBzdHJ1Y3QgQiB7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJibG9j
ayIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZFN0cnVjdCk7
CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIkIiKTsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OkJyYWNlTGVmdCk7CisKKyAgICAvLyBhOiBpMzI7CisgICAgKyts
aW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJhIik7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb2xvbik7CisgICAgY2hlY2tOZXh0VG9rZW4o
V0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkSTMyKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpU
b2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyB9CisgICAgKytsaW5lTnVtYmVyOworICAg
IGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJhY2VSaWdodCk7CisKKyAgICAvLyBA
Z3JvdXAoMCkgQGJpbmRpbmcoMCkKKyAgICBsaW5lTnVtYmVyICs9IDI7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJ
ZGVudGlmaWVyKCJncm91cCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6
UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6
OkludGVnZXJMaXRlcmFsLCAwKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0cmli
dXRlKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiYmluZGluZyIpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRU
b2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsKKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworCisgICAgLy8gdmFy
PHN0b3JhZ2UsIHJlYWRfd3JpdGU+IHg6IEI7CisgICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNr
TmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZFZhcik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpLZXl3b3JkU3RvcmFnZSk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBl
OjpDb21tYSk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkUmVh
ZFdyaXRlKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkdUKTsKKyAgICBj
aGVja05leHRUb2tlbklzSWRlbnRpZmllcigieCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6Q29sb24pOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJCIik7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpTZW1pY29sb24pOworCisgICAg
Ly8gQHN0YWdlKGNvbXB1dGUpCisgICAgbGluZU51bWJlciArPSAyOworICAgIGNoZWNrTmV4dFRv
a2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0cmlidXRlKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRl
bnRpZmllcigic3RhZ2UiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBh
cmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImNvbXB1dGUiKTsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworCisgICAgLy8g
Zm4gbWFpbigpIHsKKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpLZXl3b3JkRm4pOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJt
YWluIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZUxlZnQpOworCisgICAgLy8geC5hID0g
NDI7CisgICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ4
Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQZXJpb2QpOworICAgIGNo
ZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJhIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpFcXVhbCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9r
ZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwgNDIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6U2VtaWNvbG9uKTsKKworICAgIC8vIH0KKyAgICArK2xpbmVOdW1iZXI7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZVJpZ2h0KTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkVuZE9mRmlsZSk7Cit9CisKKy0gKHZvaWQpIHRlc3RM
ZXhlck9uR3JhcGhpY3NTaGFkZXIgeworICAgIFdHU0w6OkxleGVyPExDaGFyPiBsZXhlcigiQHN0
YWdlKHZlcnRleClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZuIHZlcnRleFNo
YWRlcihAbG9jYXRpb24oMCkgeDogdmVjNDxmMzI+KSAtPiBAYnVpbHRpbihwb3NpdGlvbikgdmVj
NDxmMzI+IHtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4geDtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQHN0YWdlKGZy
YWdtZW50KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm4gZnJhZ21lbnRTaGFk
ZXIoKSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdmVjNDxmMzI+KDAuNCwgMC40LCAwLjgsIDEuMCk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisKKyAgICB1bnNpZ25lZCBsaW5lTnVt
YmVyID0gMDsKKyAgICBhdXRvIGNoZWNrTmV4dFRva2VuID0gWyZdIChXR1NMOjpUb2tlblR5cGUg
dHlwZSkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBsZXhlci5sZXgoKTsKKyAgICAg
ICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fdHlwZSwgdHlwZSk7CisgICAgICAgIFhDVEFzc2Vy
dEVxdWFsKHJlc3VsdC5tX3NwYW4ubV9saW5lLCBsaW5lTnVtYmVyKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworICAgIGF1dG8gY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIgPSBb
Jl0gKGNvbnN0IGNoYXIqIGlkZW50KSB7CisgICAgICAgIFdHU0w6OlRva2VuIHJlc3VsdCA9IGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6SWRlbnRpZmllcik7CisgICAgICAgIFhDVEFz
c2VydEVxdWFsKHJlc3VsdC5tX2lkZW50LCBpZGVudCk7CisgICAgfTsKKyAgICBhdXRvIGNoZWNr
TmV4dFRva2VuSXNMaXRlcmFsID0gWyZdIChXR1NMOjpUb2tlblR5cGUgdHlwZSwgZG91YmxlIGxp
dGVyYWxWYWx1ZSkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBjaGVja05leHRUb2tl
bih0eXBlKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fbGl0ZXJhbFZhbHVlLCBs
aXRlcmFsVmFsdWUpOworICAgIH07CisKKyAgICAvLyBbW3N0YWdlKHZlcnRleCldXQorICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0cmlidXRlKTsKKyAgICBjaGVja05leHRU
b2tlbklzSWRlbnRpZmllcigic3RhZ2UiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlcnRl
eCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisK
KyAgICArK2xpbmVOdW1iZXI7CisgICAgLy8gZm4gdmVydGV4U2hhZGVyKEBsb2NhdGlvbigwKSB4
OiB2ZWM0PGYzMj4pIC0+IEBidWlsdGluKHBvc2l0aW9uKSB2ZWM0PGYzMj4geworICAgIGNoZWNr
TmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZEZuKTsKKyAgICBjaGVja05leHRUb2tl
bklzSWRlbnRpZmllcigidmVydGV4U2hhZGVyIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6QXR0cmlidXRlKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigibG9jYXRpb24i
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwg
MCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAg
ICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigieCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdH
U0w6OlRva2VuVHlwZTo6Q29sb24pOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2
ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkRjMyKTsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OkdUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6
QXJyb3cpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QXR0cmlidXRlKTsK
KyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiYnVpbHRpbiIpOworICAgIGNoZWNrTmV4
dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklz
SWRlbnRpZmllcigicG9zaXRpb24iKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5
cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZWM0Iik7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkRjMyKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkdUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OkJyYWNlTGVmdCk7CisKKyAgICAvLyByZXR1cm4geDsKKyAgICArK2xpbmVOdW1iZXI7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkUmV0dXJuKTsKKyAgICBjaGVj
a05leHRUb2tlbklzSWRlbnRpZmllcigieCIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRv
a2VuVHlwZTo6U2VtaWNvbG9uKTsKKworICAgIC8vIH0KKyAgICArK2xpbmVOdW1iZXI7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZVJpZ2h0KTsKKworICAgIC8vIEBz
dGFnZShmcmFnbWVudCkKKyAgICBsaW5lTnVtYmVyICs9IDI7CisgICAgY2hlY2tOZXh0VG9rZW4o
V0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlm
aWVyKCJzdGFnZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5M
ZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiZnJhZ21lbnQiKTsKKyAgICBj
aGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworCisgICAgLy8gZm4g
ZnJhZ21lbnRTaGFkZXIoKSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHsKKyAgICArK2xpbmVO
dW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkRm4pOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJmcmFnbWVudFNoYWRlciIpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRU
b2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdH
U0w6OlRva2VuVHlwZTo6QXJyb3cpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6QXR0cmlidXRlKTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigibG9jYXRpb24i
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbCwg
MCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAg
ICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigidmVjNCIpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6TFQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6S2V5d29yZEYzMik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpHVCk7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZUxlZnQpOworCisgICAg
Ly8gcmV0dXJuIHZlYzQ8ZjMyPigwLjQsIDAuNCwgMC44LCAxLjApOworICAgICsrbGluZU51bWJl
cjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRSZXR1cm4pOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpLZXl3b3JkRjMyKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkdU
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRl
cmFsLCAwLjQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6Q29tbWEpOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgMC40KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbW1h
KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxG
bG9hdExpdGVyYWwsIDAuOCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpD
b21tYSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpEZWNp
bWFsRmxvYXRMaXRlcmFsLCAxLjApOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpTZW1p
Y29sb24pOworCisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OkJyYWNlUmlnaHQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xVbml0VGVzdHMubW0gYi9Tb3VyY2UvV2ViR1BVL1dHU0xV
bml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZmYwNTRhY2JlMDY3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRl
c3RzL1dHU0xVbml0VGVzdHMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChjKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJXR1NMLmgiCi0KLSNpbXBvcnQgPFhDVGVzdC9YQ1Rlc3QuaD4KLSNpbXBv
cnQgPHZlY3Rvcj4KLSNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+Ci0jaW1wb3J0IDx3dGYvVmVjdG9y
Lmg+Ci0KLUBpbnRlcmZhY2UgV0dTTFVuaXRUZXN0cyA6IFhDVGVzdENhc2UKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gV0dTTFVuaXRUZXN0cwotCi0tICh2b2lkKXRlc3RFeGFtcGxlIHsKLSAg
ICBkYXRhTG9nKCJhc2RmXG4iKTsKLSAgICBWZWN0b3I8aW50PiB4IHsgMiwgMywgfTsKLSAgICBW
ZWN0b3I8aW50PiB5OwotICAgIHkuYXBwZW5kKDIpOwotICAgIHkuYXBwZW5kKDMpOwotICAgIFhD
VEFzc2VydEVxdWFsKHgsIHkpOwotICAgIFdHU0w6OnN0YXRpY0NoZWNrKCIiLCBzdGQ6Om51bGxv
cHQpOwotfQotCi1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBkOTllNTNjZmMxZTcuLjNmNDBjNjM4YmU4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03LDcgKzcsNyBA
QAogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTFD
MDIzRDNGMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMVW5pdFRlc3RzLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0
IC8qIFdHU0xVbml0VGVzdHMubW0gKi87IH07CisJCTFDMDIzRDNGMjc0NDkwNzAwMDFEQjczNCAv
KiBXR1NMTGV4ZXJUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDMDIzRDNFMjc0NDkwNzAwMDFEQjczNCAvKiBXR1NMTGV4ZXJUZXN0cy5tbSAq
LzsgfTsKIAkJMUMwMjNENDAyNzQ0OTA3MDAwMURCNzM0IC8qIGxpYndnc2wuYSBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEN0YyMjcxNkIyQ0Mw
MEE1MjU0RCAvKiBsaWJ3Z3NsLmEgKi87IH07CiAJCTFDMDIzRDRCMjc0NDk1QjkwMDFEQjczNCAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAyM0Q0QTI3NDQ5NUI5MDAxREI3MzQgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwogCQkxQzJDRURFRTI3MUU4QTczMDBFREMxNkYgLyogTWV0
YWwuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUMyQ0VERUQyNzFFOEE3MzAwRURDMTZGIC8qIE1ldGFsLmZyYW1ld29yayAqLzsgfTsK
QEAgLTQxLDYgKzQxLDExIEBACiAJCTFDRUJEN0Y4MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDdGNzI3
MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1
YmxpYywgKTsgfTsgfTsKIAkJMUNFQkQ4MDMyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ4MDIyNzE2
QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwICovOyB9OwogCQkxQ0VCRDgyNjI3MTZDQUNDMDBBNTI1
NEQgLyogbGlid2dzbC5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUNFQkQ3RjIyNzE2QjJDQzAwQTUyNTREIC8qIGxpYndnc2wuYSAqLzsgfTsKKwkJ
MzM4QkIyQ0UyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJDRDI3QjZCNjAyMDBFMDY2QUIgLyogVG9r
ZW4uaCAqLzsgfTsKKwkJMzM4QkIyRDAyN0I2QjYxQjAwRTA2NkFCIC8qIFRva2VuLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkNGMjdCNkI2
MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgKi87IH07CisJCTMzOEJCMkQyMjdCNkI2M0YwMEUwNjZB
QiAvKiBTb3VyY2VTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMzhCQjJEMTI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oICovOyB9Owor
CQkzMzhCQjJENDI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBM
ZXhlci5oICovOyB9OworCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyRDUyN0I2
QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwpAQCAt
NjIsNyArNjcsNyBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJ
MUMwMjNEM0MyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMueGN0ZXN0ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxl
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXR1NMVW5pdFRlc3RzLnhjdGVzdDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0
IC8qIFdHU0xVbml0VGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXR1NMVW5pdFRlc3Rz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzAyM0QzRTI3NDQ5MDcwMDAxREI3
MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXR1NMTGV4ZXJU
ZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwMjNENDcyNzQ0OTE2RDAw
MURCNzM0IC8qIFdHU0xVbml0VGVzdHMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV0dTTFVuaXRU
ZXN0cy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwMjNENEEyNzQ0
OTVCOTAwMURCNzM0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRo
ID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwogCQkxQzJDRURFRDI3MUU4QTczMDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IG5hbWUgPSBNZXRhbC5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL01ldGFsLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0x
MzUsNiArMTQwLDExIEBACiAJCTFDRUJEODJCMjcxNkNBRkIwMEE1MjU0RCAvKiBDb3JlRm91bmRh
dGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENvcmVGb3VuZGF0aW9uLmZyYW1ld29y
azsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMUNFQkQ4MkQyNzE2Q0IxNjAwQTUyNTRE
IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZy
YW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkxQ0VCRDgzMDI3MTZDQjM4MDBBNTI1
NEQgLyogbGliaWN1Y29yZS50YmQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSAic291cmNlY29kZS50ZXh0LWJhc2VkLWR5bGliLWRlZmluaXRpb24iOyBu
YW1lID0gbGliaWN1Y29yZS50YmQ7IHBhdGggPSB1c3IvbGliL2xpYmljdWNvcmUudGJkOyBzb3Vy
Y2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMzM4QkIyQ0QyN0I2QjYwMjAwRTA2NkFCIC8qIFRva2Vu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMzOEJCMkNGMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOEJCMkQxMjdCNkI2
M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVNwYW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KQEAgLTE3MCw3ICsxODAsNyBAQAogCQkxQzAyM0QzRDI3NDQ5MDcwMDAx
REI3MzQgLyogV0dTTFVuaXRUZXN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMu
bW0gKi8sCisJCQkJMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBXR1NMVW5pdFRlc3RzOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTI2MSw4ICsyNzEsMTMgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFDRUJE
ODA3MjcxNkMyQzAwMEE1MjU0RCAvKiBBU1QuaCAqLywKIAkJCQkxQ0VCRDgwNDI3MTZCRkFCMDBB
NTI1NEQgLyogY29uZmlnLmggKi8sCi0JCQkJMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdH
U0wuY3BwICovLAorCQkJCTMzOEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oICovLAor
CQkJCTMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgKi8sCisJCQkJMzM4QkIy
RDEyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLywKKwkJCQkzMzhCQjJDRDI3QjZC
NjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLywKKwkJCQkzMzhCQjJDRjI3QjZCNjFCMDBFMDY2QUIg
LyogVG9rZW4uY3BwICovLAogCQkJCTFDRUJEN0Y3MjcxNkIzNDQwMEE1MjU0RCAvKiBXR1NMLmgg
Ki8sCisJCQkJMUNFQkQ4MDIyNzE2QkY4MjAwQTUyNTREIC8qIFdHU0wuY3BwICovLAogCQkJKTsK
IAkJCXBhdGggPSBXR1NMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMxMiw2ICsz
MjcsOSBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMzM4QkIyRDIyN0I2QjYzRjAwRTA2
NkFCIC8qIFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMzOEJCMkQ0MjdCNkI2NkMw
MEUwNjZBQiAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM4QkIyQ0UyN0I2QjYwMjAw
RTA2NkFCIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VCRDdGODI3MTZCMzQ0MDBB
NTI1NEQgLyogV0dTTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zODEsNyArMzk5LDYgQEAKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewogCQkJCUJ1aWxkSW5kZXBlbmRlbnRUYXJnZXRz
SW5QYXJhbGxlbCA9IE5POwotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JXb3Jrc3BhY2Ug
PSBPcmlnaW5hbDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTMzMDsKIAkJCQlUYXJnZXRBdHRy
aWJ1dGVzID0gewogCQkJCQkxQzAyM0QzQjI3NDQ5MDcwMDAxREI3MzQgPSB7CkBAIC00NTksNyAr
NDc2LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTFDMDIzRDNGMjc0NDkwNzAwMDFE
QjczNCAvKiBXR1NMVW5pdFRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUMwMjNEM0YyNzQ0
OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00OTcs
NyArNTE0LDkgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMzOEJCMkQ2MjdCNkI2ODcw
MEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0VCRDgwMzI3MTZCRjgy
MDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMzhCQjJEMDI3QjZCNjFC
MDBFMDY2QUIgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451932</attachid>
            <date>2022-02-14 12:40:55 -0800</date>
            <delta_ts>2022-02-15 01:38:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchLexer</filename>
            <type>text/plain</type>
            <size>60795</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYWExNDZlZGRlNmNiLi5iZmRmZmU1YWZhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjItMDItMTQgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAg
ICBbV0dTTF0gSW1wbGVtZW50IGVub3VnaCBvZiB0aGUgbGV4ZXIgZm9yIHRoZSBzaW1wbGVzdCBz
aGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzMyNzYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NzMyNjc1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE15bGVzIE1heGZpZWxkLgorCisgICAgICAgIEFkZCBXVEY6OlVuaWNvZGU6OmZvcm1G
ZWVkIGFuZCBXVEY6OlVuaWNvZGU6OnZlcnRpY2FsVGFidWxhdGlvbi4KKworICAgICAgICAqIHd0
Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg6CisKIDIwMjItMDItMTAgIERhdmlkIEtpbHplciAg
PGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbV1RGXSBGaXggY2xhbmcgdGlkeSBidWdw
cm9uZS1tb3ZlLWZvcndhcmRpbmctcmVmZXJlbmNlIHN0YXRpYyBhbmFseXplciB3YXJuaW5ncyBm
cm9tIFdlYkNvcmUvV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0No
YXJhY3Rlck5hbWVzLmggYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgK
aW5kZXggYjc5NGMyYTBkNmI0Li5jOGZkYmIxZjA5NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2Rl
L0NoYXJhY3Rlck5hbWVzLmgKQEAgLTYyLDYgKzYyLDcgQEAgY29uc3RleHByIFVDaGFyIGhlYnJl
d1B1bmN0dWF0aW9uR2Vyc2hheWltID0gMHgwNUY0OwogY29uc3RleHByIFVDaGFyIGhvcml6b250
YWxFbGxpcHNpcyA9IDB4MjAyNjsKIGNvbnN0ZXhwciBVQ2hhciBoeXBoZW4gPSAweDIwMTA7CiBj
b25zdGV4cHIgVUNoYXIgZW5EYXNoID0gMHgyMDEzOworY29uc3RleHByIFVDaGFyIGZvcm1GZWVk
ID0gMHgwMDBDOwogY29uc3RleHByIFVDaGFyIGh5cGhlbk1pbnVzID0gMHgwMDJEOwogY29uc3Rl
eHByIFVDaGFyIGlkZW9ncmFwaGljQ29tbWEgPSAweDMwMDE7CiBjb25zdGV4cHIgVUNoYXIgaWRl
b2dyYXBoaWNGdWxsU3RvcCA9IDB4MzAwMjsKQEAgLTEwMyw2ICsxMDQsNyBAQCBjb25zdGV4cHIg
VUNoYXIgdGliZXRhbk1hcmtEZWxpbWl0ZXJUc2hlZ0JzdGFyID0gMHgwRjBDOwogY29uc3RleHBy
IFVDaGFyIHRpYmV0YW5NYXJrSW50ZXJzeWxsYWJpY1RzaGVnID0gMHgwRjBCOwogY29uc3RleHBy
IFVDaGFyMzIgdWdhcml0aWNXb3JkRGl2aWRlciA9IDB4MTAzOUY7CiBjb25zdGV4cHIgVUNoYXIg
dXBBcnJvd2hlYWQgPSAweDIzMDM7Citjb25zdGV4cHIgVUNoYXIgdmVydGljYWxUYWJ1bGF0aW9u
ID0gMHgwMDBiOwogY29uc3RleHByIFVDaGFyIHdoaXRlQnVsbGV0ID0gMHgyNUU2OwogY29uc3Rl
eHByIFVDaGFyIHdoaXRlQ2lyY2xlID0gMHgyNUNCOwogY29uc3RleHByIFVDaGFyIHdoaXRlU2Vz
YW1lRG90ID0gMHhGRTQ2OwpAQCAtMTQzLDYgKzE0NSw3IEBAIHVzaW5nIFdURjo6VW5pY29kZTo6
aGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07CiB1c2luZyBXVEY6OlVuaWNvZGU6Omhvcml6b250
YWxFbGxpcHNpczsKIHVzaW5nIFdURjo6VW5pY29kZTo6aHlwaGVuOwogdXNpbmcgV1RGOjpVbmlj
b2RlOjplbkRhc2g7Cit1c2luZyBXVEY6OlVuaWNvZGU6OmZvcm1GZWVkOwogdXNpbmcgV1RGOjpV
bmljb2RlOjpoeXBoZW5NaW51czsKIHVzaW5nIFdURjo6VW5pY29kZTo6aWRlb2dyYXBoaWNDb21t
YTsKIHVzaW5nIFdURjo6VW5pY29kZTo6aWRlb2dyYXBoaWNGdWxsU3RvcDsKQEAgLTE4Miw2ICsx
ODUsNyBAQCB1c2luZyBXVEY6OlVuaWNvZGU6OnRpYmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3Rh
cjsKIHVzaW5nIFdURjo6VW5pY29kZTo6dGliZXRhbk1hcmtJbnRlcnN5bGxhYmljVHNoZWc7CiB1
c2luZyBXVEY6OlVuaWNvZGU6OnVnYXJpdGljV29yZERpdmlkZXI7CiB1c2luZyBXVEY6OlVuaWNv
ZGU6OnVwQXJyb3doZWFkOwordXNpbmcgV1RGOjpVbmljb2RlOjp2ZXJ0aWNhbFRhYnVsYXRpb247
CiB1c2luZyBXVEY6OlVuaWNvZGU6OndoaXRlQnVsbGV0OwogdXNpbmcgV1RGOjpVbmljb2RlOjp3
aGl0ZUNpcmNsZTsKIHVzaW5nIFdURjo6VW5pY29kZTo6d2hpdGVTZXNhbWVEb3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmlu
ZGV4IDhiNTc2ZjZhZTVhOC4uNzMzN2RhZjM1OTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BV
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBA
CisyMDIyLTAyLTE0ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dHU0xdIEltcGxlbWVudCBlbm91Z2ggb2YgdGhlIGxleGVyIGZvciB0aGUgc2ltcGxl
c3Qgc2hhZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzMjc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTczMjY3NT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBNeWxlcyBNYXhmaWVsZC4KKworICAgICAgICBUaGVyZSBpcyBqdXN0IGVub3Vn
aCBvZiB0aGUgbGV4ZXIgaW4gdGhpcyBwYXRjaCB0byBwYXNzIHRoZSB1bml0IHRlc3RzIChhbHNv
IGFkZGVkIGJ5IHRoZSBwYXRjaCkuCisgICAgICAgIFRoZSBsZXhlciBpcyB0ZW1wbGF0ZWQgYnkg
dGhlIGNoYXJhY3RlciBzaXplLCBmb2xsb3dpbmcgdGhlIGNvZGUgZnJvbSBKU0MncyBsZXhlci4K
KyAgICAgICAgSSBkaWQgbm90IHVzZSBhIGxleGVyIGdlbmVyYXRvciBsaWtlIGxleCBmb3IgYSBm
ZXcgcmVhc29uczoKKyAgICAgICAgLSBJdCB3b3VsZCBoYXZlIG1hZGUgdGhlIGJ1aWxkIHN5c3Rl
bShzKSBldmVuIG1vcmUgb2YgYSBuaWdodG1hcmUKKyAgICAgICAgLSBJdCB3b3VsZCBoYXZlIG1h
ZGUgaXQgaGFyZGVyIHRvIGdpdmUgYWNjdXJhdGUgYW5kIGN1c3RvbWl6ZWQgZXJyb3IgbWVzc2Fn
ZXMKKyAgICAgICAgLSBJZiB3ZSBldmVyIGRlY2lkZSB0byBkbyBhbnl0aGluZyBleG90aWMgdG8g
dGhlIGdyYW1tYXIgb2YgdGhlIGxhbmd1YWdlLCBpdCBjb3VsZCBoYXZlIG1hZGUgaXQgbXVjaCBo
YXJkZXIKKworICAgICAgICBUaGUgbGV4aW5nIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlz
IGEgYml0IGhhY2t5LCBhbmQgcHJvYmFibHkgaGFzIHNvbWUgcHJlY2lzaW9uIGlzc3VlcyBpbiBj
b3JuZXIgY2FzZXMsIGJ1dCBpdCBwYXNzZWQgYWxsIHNpbXBsZSB1bml0IHRlc3RzLAorICAgICAg
ICBzbyBmb3Igbm93IEkganVzdCBsZWZ0IGl0IGFzIGlzIHdpdGggYSBGSVhNRSwgdG8gYmUgZml4
ZWQgb25jZSB3ZSBjYW4gcnVuIHRoZSBmdWxsIENUUy4KKworICAgICAgICBUaGUgVG9rZW5UeXBl
IGluY2x1ZGVzIGFuIGBJbnZhbGlkYCB2YWx1ZS4gSSBjb3VsZCBpbnN0ZWFkIGhhdmUgdXNlZCBz
dGQ6Om9wdGlvbmFsPFRva2VuPiBldmVyeXdoZXJlLgorICAgICAgICBJIG1hZGUgdGhpcyBjaG9p
Y2UgZm9yIHR3byByZWFzb25zOgorICAgICAgICAtIHNwYWNlIGVmZmljaWVuY3k6IHdlIGRvbid0
IHVzZSBhbiBleHRyYSB3b3JkIG9mIG1lbW9yeSBmb3IgdGhlIHZhcmlhbnQncyB0YWcKKyAgICAg
ICAgLSAgKGFsdGhvdWdoIHRoaXMgcGFydCBjb3VsZCBiZSBzb2x2ZWQgYnkgdXNpbmcgaHR0cHM6
Ly9naXRodWIuY29tL2FrcnplbWkxL21hcmthYmxlKQorICAgICAgICAtIGVhc2Ugb2YgdXNlIGFu
ZCB0aW1lIGVmZmljaWVuY3k6IGV2ZXJ5d2hlcmUgdGhhdCB3ZSBjaGVjayBmb3IgYSBnaXZlbiBU
b2tlblR5cGUsIHdlIHdvdWxkIGhhdmUgdG8gZmlyc3QgY2hlY2sgdGhhdCB0aGUgVG9rZW4gaXMg
bm90IG51bGxvcHQsIGFuZCB0aGVuIGNoZWNrIHRoZSBUb2tlblR5cGUuCisKKyAgICAgICAgKiBD
b25maWd1cmF0aW9ucy9XR1NMVW5pdFRlc3RzLnhjY29uZmlnOgorICAgICAgICAqIFdHU0wvTGV4
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdHU0w6OkxleGVyPFQ+OjpsZXgpOgorICAgICAgICAo
V0dTTDo6TGV4ZXI8VD46OnNoaWZ0KToKKyAgICAgICAgKFdHU0w6OkxleGVyPFQ+OjpwZWVrKToK
KyAgICAgICAgKFdHU0w6OkxleGVyPFQ+Ojpza2lwV2hpdGVzcGFjZSk6CisgICAgICAgIChXR1NM
OjpMZXhlcjxUPjo6aXNBdEVuZE9mRmlsZSBjb25zdCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxU
Pjo6cGFyc2VEZWNpbWFsSW50ZWdlcik6CisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6cGFyc2VE
ZWNpbWFsRmxvYXRFeHBvbmVudCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxUPjo6cGFyc2VJbnRl
Z2VyTGl0ZXJhbFN1ZmZpeCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OmlzV2hpdGVT
cGFjZSk6CisgICAgICAgIChXR1NMOjpMZXhlcjxMQ2hhcj46OmlzSWRlbnRpZmllclN0YXJ0KToK
KyAgICAgICAgKFdHU0w6OkxleGVyPExDaGFyPjo6aXNWYWxpZElkZW50aWZpZXJDaGFyYWN0ZXIp
OgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+Ojppc0RlY2ltYWwpOgorICAgICAgICAoV0dT
TDo6TGV4ZXI8TENoYXI+Ojppc0hleGFkZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPExD
aGFyPjo6cmVhZERlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8TENoYXI+OjpyZWFkSGV4
YWRlY2ltYWwpOgorICAgICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojppc1doaXRlU3BhY2UpOgor
ICAgICAgICAoV0dTTDo6TGV4ZXI8VUNoYXI+Ojppc0lkZW50aWZpZXJTdGFydCk6CisgICAgICAg
IChXR1NMOjpMZXhlcjxVQ2hhcj46OmlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6aXNEZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVy
PFVDaGFyPjo6aXNIZXhhZGVjaW1hbCk6CisgICAgICAgIChXR1NMOjpMZXhlcjxVQ2hhcj46OnJl
YWREZWNpbWFsKToKKyAgICAgICAgKFdHU0w6OkxleGVyPFVDaGFyPjo6cmVhZEhleGFkZWNpbWFs
KToKKyAgICAgICAgKiBXR1NML0xleGVyLmg6IEFkZGVkLgorICAgICAgICAoV0dTTDo6TGV4ZXI6
OkxleGVyKToKKyAgICAgICAgKFdHU0w6OkxleGVyOjpjdXJyZW50UG9zaXRpb24gY29uc3QpOgor
ICAgICAgICAoV0dTTDo6TGV4ZXI6OmN1cnJlbnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV0dT
TDo6TGV4ZXI6OmN1cnJlbnRUb2tlbkxlbmd0aCBjb25zdCk6CisgICAgICAgIChXR1NMOjpMZXhl
cjo6bWFrZVRva2VuKToKKyAgICAgICAgKFdHU0w6OkxleGVyOjptYWtlTGl0ZXJhbFRva2VuKToK
KyAgICAgICAgKFdHU0w6OkxleGVyOjptYWtlSWRlbnRpZmllclRva2VuKToKKyAgICAgICAgKiBX
R1NML1NvdXJjZVNwYW4uaDogQWRkZWQuCisgICAgICAgIChXR1NMOjpTb3VyY2VTcGFuOjpTb3Vy
Y2VTcGFuKToKKyAgICAgICAgKiBXR1NML1Rva2VuLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NM
Ojp0b1N0cmluZyk6CisgICAgICAgICogV0dTTC9Ub2tlbi5oOiBBZGRlZC4KKyAgICAgICAgKFdH
U0w6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXR1NMOjpUb2tlbjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdHU0w6OlRva2VuOjp+VG9rZW4pOgorICAgICAgICAqIFdHU0wvV0dTTC5jcHA6Cisg
ICAgICAgIChXR1NMOjpzdGF0aWNDaGVjayk6CisgICAgICAgICogV0dTTFVuaXRUZXN0cy9XR1NM
TGV4ZXJUZXN0cy5tbTogQWRkZWQuCisgICAgICAgICgtW1dHU0xMZXhlclRlc3RzIHRlc3RMZXhl
ck9uU2luZ2xlVG9rZW5zXSk6CisgICAgICAgICgtW1dHU0xMZXhlclRlc3RzIHRlc3RMZXhlck9u
Q29tcHV0ZVNoYWRlcl0pOgorICAgICAgICAoLVtXR1NMTGV4ZXJUZXN0cyB0ZXN0TGV4ZXJPbkdy
YXBoaWNzU2hhZGVyXSk6CisgICAgICAgICogV0dTTFVuaXRUZXN0cy9XR1NMVW5pdFRlc3RzLm1t
OiBSZW1vdmVkLgorICAgICAgICAoLVtXR1NMVW5pdFRlc3RzIHRlc3RFeGFtcGxlXSk6IERlbGV0
ZWQuCisgICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjIt
MDEtMjYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbV2ViR1BVXSBNYWtlIHN1cmUgV0dTTFVuaXRUZXN0cyBjYW4gY2FsbCBpbnRvIFdHU0wKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9MZXhlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvTGV4ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWFi
ZTc0NWUwMmExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0xleGVyLmNw
cApAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMZXhlci5oIgorCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMu
aD4KKworbmFtZXNwYWNlIFdHU0wgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Rva2VuIExl
eGVyPFQ+OjpsZXgoKQoreworICAgIHNraXBXaGl0ZXNwYWNlKCk7CisKKyAgICBtX3Rva2VuU3Rh
cnRpbmdQb3NpdGlvbiA9IG1fY3VycmVudFBvc2l0aW9uOworCisgICAgaWYgKGlzQXRFbmRPZkZp
bGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkVuZE9mRmlsZSk7CisK
KyAgICBzd2l0Y2ggKG1fY3VycmVudCkgeworICAgIGNhc2UgJygnOgorICAgICAgICBzaGlmdCgp
OworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBj
YXNlICcpJzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tl
blR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNhc2UgJ3snOgorICAgICAgICBzaGlmdCgpOworICAg
ICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QnJhY2VMZWZ0KTsKKyAgICBjYXNlICd9
JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6
OkJyYWNlUmlnaHQpOworICAgIGNhc2UgJ1snOgorICAgICAgICBzaGlmdCgpOworICAgICAgICBy
ZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QnJhY2tldExlZnQpOworICAgIGNhc2UgJ10nOgor
ICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6QnJh
Y2tldFJpZ2h0KTsKKyAgICBjYXNlICc6JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkNvbG9uKTsKKyAgICBjYXNlICcsJzoKKyAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OkNvbW1hKTsKKyAg
ICBjYXNlICc7JzoKKyAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihU
b2tlblR5cGU6OlNlbWljb2xvbik7CisgICAgY2FzZSAnPSc6CisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpFcXVhbCk7CisgICAgY2FzZSAnPic6
CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpH
VCk7CisgICAgY2FzZSAnPCc6CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHJldHVybiBtYWtl
VG9rZW4oVG9rZW5UeXBlOjpMVCk7CisgICAgY2FzZSAnQCc6CisgICAgICAgIHNoaWZ0KCk7Cisg
ICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNhc2Ug
Jy4nOiB7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGN1cnJl
bnRPZmZzZXQoKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBlcmlvZCA9
IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgaWYgKCFwb3N0UGVyaW9kKQorICAgICAg
ICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OlBlcmlvZCk7CisgICAgICAgIGRvdWJs
ZSBsaXRlcmFsVmFsdWUgPSBwb3N0UGVyaW9kLnZhbHVlKCk7CisgICAgICAgIC8vIEZJWE1FOiB2
ZXJpZnkgdGhhdCB0aGVyZSBpcyBubyB1bm5hY2VwdGFibGUgcHJlY2lzaW9uIGxvc3MKKyAgICAg
ICAgLy8gSXQgc2hvdWxkIGJlIHRlc3RlZCBpbiB0aGUgQ1RTLCBmb3Igbm93IGxldCdzIGdldCBz
b21ldGhpbmcgdGhhdCB3b3JrcworICAgICAgICAvLyBBbHNvIHRoZSBzYW1lIGNvZGUgYXBwZWFy
cyBpbiBhIGZldyBwbGFjZXMgYmVsb3cuCisgICAgICAgIGxpdGVyYWxWYWx1ZSAvPSBwb3coMTAs
IGN1cnJlbnRPZmZzZXQoKSAtIG9mZnNldCk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8aW50NjRf
dD4gZXhwb25lbnQgPSBwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCk7CisgICAgICAgIGlmIChl
eHBvbmVudCkKKyAgICAgICAgICAgIGxpdGVyYWxWYWx1ZSAqPSBwb3coMTAsIGV4cG9uZW50LnZh
bHVlKCkpOworICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2lt
YWxGbG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgfQorICAgIGNhc2UgJy0nOgorICAg
ICAgICBzaGlmdCgpOworICAgICAgICBpZiAobV9jdXJyZW50ID09ICc+JykgeworICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpBcnJv
dyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnMCc6IHsKKyAgICAgICAg
c2hpZnQoKTsKKyAgICAgICAgZG91YmxlIGxpdGVyYWxWYWx1ZSA9IDA7CisgICAgICAgIGlmICht
X2N1cnJlbnQgPT0gJ3gnKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9y
IGhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzCisgICAgICAgICAgICBzaGlmdCgp
OworICAgICAgICAgICAgYm9vbCBoZXhOdW1iZXJJc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgICAg
IHdoaWxlIChpc0hleGFkZWNpbWFsKG1fY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBsaXRl
cmFsVmFsdWUgKj0gMTY7CisgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVlICs9IHJlYWRIZXhh
ZGVjaW1hbChtX2N1cnJlbnQpOworICAgICAgICAgICAgICAgIHNoaWZ0KCk7CisgICAgICAgICAg
ICAgICAgaGV4TnVtYmVySXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGhleE51bWJlcklzRW1wdHkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gcGFyc2VJbnRlZ2VyTGl0ZXJhbFN1ZmZpeChsaXRlcmFsVmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBpc0Zsb2F0aW5nUG9pbnQgPSBmYWxzZTsKKyAgICAgICAg
aWYgKGlzRGVjaW1hbChtX2N1cnJlbnQpIHx8IG1fY3VycmVudCA9PSAnLicgfHwgbV9jdXJyZW50
ID09ICdlJyB8fCBtX2N1cnJlbnQgPT0gJ0UnKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBpbnRlZ2VyUGFydCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAg
ICAgIGlmIChpbnRlZ2VyUGFydCkKKyAgICAgICAgICAgICAgICBsaXRlcmFsVmFsdWUgPSBpbnRl
Z2VyUGFydC52YWx1ZSgpOworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnLicpIHsKKyAg
ICAgICAgICAgICAgICBpc0Zsb2F0aW5nUG9pbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIHNo
aWZ0KCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNoYXJlIHRoaXMgY29kZSB3aXRoIHRo
ZSBbMS05XSBjYXNlCisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gY3VycmVudE9m
ZnNldCgpOworICAgICAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBvc3RQZXJp
b2QgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgaWYgKHBvc3RQZXJp
b2QpIHsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGZyYWN0aW9uYWxQYXJ0ID0gcG9zdFBl
cmlvZC52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsUGFydCAvPSBwb3co
MTAsIGN1cnJlbnRPZmZzZXQoKSAtIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGxpdGVy
YWxWYWx1ZSArPSBmcmFjdGlvbmFsUGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG1fY3VycmVudCA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBl
OjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4
cG9uZW50ID0gcGFyc2VEZWNpbWFsRmxvYXRFeHBvbmVudCgpKSB7CisgICAgICAgICAgICAgICAg
bGl0ZXJhbFZhbHVlICo9IHBvdygxMCwgZXhwb25lbnQudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFs
LCBsaXRlcmFsVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRGVjaW1hbCBp
bnRlZ2VycyBhcmUgbm90IGFsbG93ZWQgdG8gc3RhcnQgd2l0aCAwLgorICAgICAgICAgICAgaWYg
KCFpc0Zsb2F0aW5nUG9pbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbihUb2tl
blR5cGU6OkludmFsaWQpOworICAgICAgICB9CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2Yn
KSB7CisgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VMaXRlcmFs
VG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpc0Zsb2F0aW5nUG9pbnQpCisgICAgICAgICAgICByZXR1cm4g
bWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIGxpdGVyYWxW
YWx1ZSk7CisgICAgICAgIHJldHVybiBwYXJzZUludGVnZXJMaXRlcmFsU3VmZml4KGxpdGVyYWxW
YWx1ZSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChpc0RlY2ltYWwgKG1fY3Vy
cmVudCkpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHZhbHVlID0gcGFy
c2VEZWNpbWFsSW50ZWdlcigpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6SW52YWxpZCk7CisgICAgICAgICAgICBk
b3VibGUgbGl0ZXJhbFZhbHVlID0gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIGJvb2wgaXNG
bG9hdGluZ1BvaW50ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICcuJykg
eworICAgICAgICAgICAgICAgIGlzRmxvYXRpbmdQb2ludCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBjdXJyZW50T2Zm
c2V0KCk7CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zdFBlcmlv
ZCA9IHBhcnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zdFBlcmlv
ZCkgeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgZnJhY3Rpb25hbFBhcnQgPSBwb3N0UGVy
aW9kLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxQYXJ0IC89IHBvdygx
MCwgY3VycmVudE9mZnNldCgpIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJh
bFZhbHVlICs9IGZyYWN0aW9uYWxQYXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGludDY0X3Q+IGV4cG9uZW50ID0gcGFy
c2VEZWNpbWFsRmxvYXRFeHBvbmVudCgpKSB7CisgICAgICAgICAgICAgICAgbGl0ZXJhbFZhbHVl
ICo9IHBvdygxMCwgZXhwb25lbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VMaXRlcmFsVG9rZW4oVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCBsaXRlcmFsVmFs
dWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnZicpIHsK
KyAgICAgICAgICAgICAgICBzaGlmdCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTGl0
ZXJhbFRva2VuKFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgbGl0ZXJhbFZhbHVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNGbG9hdGluZ1BvaW50KQorICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJzZUludGVnZXJMaXRlcmFsU3VmZml4KGxpdGVyYWxWYWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkRlY2ltYWxG
bG9hdExpdGVyYWwsIGxpdGVyYWxWYWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJZGVudGlm
aWVyU3RhcnQobV9jdXJyZW50KSkgeworICAgICAgICAgICAgY29uc3QgVCogc3RhcnRPZlRva2Vu
ID0gbV9jb2RlOworICAgICAgICAgICAgc2hpZnQoKTsKKyAgICAgICAgICAgIHdoaWxlIChpc1Zh
bGlkSWRlbnRpZmllckNoYXJhY3RlcihtX2N1cnJlbnQpKQorICAgICAgICAgICAgICAgIHNoaWZ0
KCk7CisgICAgICAgICAgICAvLyBGSVhNRTogYSB0cmllIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50
IGhlcmUsIGxvb2sgYXQgSmF2YVNjcmlwdENvcmUvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSBm
b3IgYW4gZXhhbXBsZSBvZiBjb2RlIGF1dG9nZW5lcmF0aW9uIHRoYXQgcHJvZHVjZXMgc3VjaCBh
IHRyaWUuCisgICAgICAgICAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdGFydE9mVG9rZW4sIGN1cnJl
bnRUb2tlbkxlbmd0aCgpIH07CisgICAgICAgICAgICAvLyBGSVhNRTogSSBkb24ndCB0aGluayB0
aGF0IHRydWUvZmFsc2UvZjMyL3UzMi9pMzIvYm9vbCBuZWVkIHRvIGJlIHRoZWlyIG93biB0b2tl
bnMsIHRoZXkgY291bGQganVzdCBiZSByZWd1bGFyIGlkZW50aWZpZXJzLgorICAgICAgICAgICAg
aWYgKHZpZXcgPT0gInRydWUiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9r
ZW5UeXBlOjpMaXRlcmFsVHJ1ZSk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAiZmFsc2UiKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpMaXRlcmFsRmFsc2Up
OworICAgICAgICAgICAgaWYgKHZpZXcgPT0gImJvb2wiKQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkQm9vbCk7CisgICAgICAgICAgICBpZiAodmll
dyA9PSAiaTMyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6
S2V5d29yZEkzMik7CisgICAgICAgICAgICBpZiAodmlldyA9PSAidTMyIikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFUzMik7CisgICAgICAgICAg
ICBpZiAodmlldyA9PSAiZjMyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRv
a2VuVHlwZTo6S2V5d29yZEYzMik7CisgICAgICAgICAgICBpZiAodmlldyA9PSAiZm4iKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkRm4pOworICAg
ICAgICAgICAgaWYgKHZpZXcgPT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGlmICh2
aWV3ID09ICJwcml2YXRlIikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2Vu
VHlwZTo6S2V5d29yZFByaXZhdGUpOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInJlYWQiKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkUmVhZCk7
CisgICAgICAgICAgICBpZiAodmlldyA9PSAicmVhZF93cml0ZSIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRSZWFkV3JpdGUpOworICAgICAgICAg
ICAgaWYgKHZpZXcgPT0gInJldHVybiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bihUb2tlblR5cGU6OktleXdvcmRSZXR1cm4pOworICAgICAgICAgICAgaWYgKHZpZXcgPT0gInN0
b3JhZ2UiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3
b3JkU3RvcmFnZSk7CisgICAgICAgICAgICBpZiAodmlldyA9PSAic3RydWN0IikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVRva2VuKFRva2VuVHlwZTo6S2V5d29yZFN0cnVjdCk7CisgICAg
ICAgICAgICBpZiAodmlldyA9PSAidW5pZm9ybSIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRVbmlmb3JtKTsKKyAgICAgICAgICAgIGlmICh2aWV3
ID09ICJ2YXIiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpL
ZXl3b3JkVmFyKTsKKyAgICAgICAgICAgIGlmICh2aWV3ID09ICJ3b3JrZ3JvdXAiKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpLZXl3b3JkV29ya2dyb3VwKTsK
KyAgICAgICAgICAgIGlmICh2aWV3ID09ICJ3cml0ZSIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VUb2tlbihUb2tlblR5cGU6OktleXdvcmRXcml0ZSk7CisgICAgICAgICAgICBpZiAodmll
dyA9PSAiYXNtIiB8fCB2aWV3ID09ICJiZjE2IiB8fCB2aWV3ID09ICJjb25zdCIgfHwgdmlldyA9
PSAiZG8iIHx8IHZpZXcgPT0gImVudW0iCisgICAgICAgICAgICAgICAgfHwgdmlldyA9PSAiZjE2
IiB8fCB2aWV3ID09ICJmNjQiIHx8IHZpZXcgPT0gImhhbmRsZSIgfHwgdmlldyA9PSAiaTgiIHx8
IHZpZXcgPT0gImkxNiIKKyAgICAgICAgICAgICAgICB8fCB2aWV3ID09ICJpNjQiIHx8IHZpZXcg
PT0gIm1hdCIgfHwgdmlldyA9PSAicHJlbWVyZ2UiIHx8IHZpZXcgPT0gInJlZ2FyZGxlc3MiCisg
ICAgICAgICAgICAgICAgfHwgdmlldyA9PSAidHlwZWRlZiIgfHwgdmlldyA9PSAidTgiIHx8IHZp
ZXcgPT0gInUxNiIgfHwgdmlldyA9PSAidTY0IiB8fCB2aWV3ID09ICJ1bmxlc3MiCisgICAgICAg
ICAgICAgICAgfHwgdmlldyA9PSAidXNpbmciIHx8IHZpZXcgPT0gInZlYyIgfHwgdmlldyA9PSAi
dm9pZCIgfHwgdmlldyA9PSAid2hpbGUiKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVG9r
ZW4oVG9rZW5UeXBlOjpSZXNlcnZlZFdvcmQpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VJZGVu
dGlmaWVyVG9rZW4odmlldyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiBtYWtlVG9rZW4oVG9rZW5UeXBlOjpJbnZhbGlkKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit2b2lkIExleGVyPFQ+OjpzaGlmdCgpCit7CisgICAgLy8gQXQgb25lIHBvaW50
IHRpbWluZyBzaG93ZWQgdGhhdCBzZXR0aW5nIG1fY3VycmVudCB0byAwIHVuY29uZGl0aW9uYWxs
eSB3YXMgZmFzdGVyIHRoYW4gYW4gaWYtZWxzZSBzZXF1ZW5jZS4KKyAgICBtX2N1cnJlbnQgPSAw
OworICAgICsrbV9jb2RlOworICAgICsrbV9jdXJyZW50UG9zaXRpb24ubV9vZmZzZXQ7CisgICAg
KyttX2N1cnJlbnRQb3NpdGlvbi5tX2xpbmVPZmZzZXQ7CisgICAgaWYgKExJS0VMWShtX2NvZGUg
PCBtX2NvZGVFbmQpKQorICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2RlOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK1QgTGV4ZXI8VD46OnBlZWsodW5zaWduZWQgaSkKK3sKKyAgICBpZiAo
VU5MSUtFTFkobV9jb2RlICsgaSA+PSBtX2NvZGVFbmQpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gKihtX2NvZGUgKyBpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lk
IExleGVyPFQ+Ojpza2lwV2hpdGVzcGFjZSgpCit7CisgICAgd2hpbGUgKGlzV2hpdGVTcGFjZSht
X2N1cnJlbnQpKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ1xuJykgeworICAgICAgICAg
ICAgc2hpZnQoKTsKKyAgICAgICAgICAgICsrbV9jdXJyZW50UG9zaXRpb24ubV9saW5lOworICAg
ICAgICAgICAgbV9jdXJyZW50UG9zaXRpb24ubV9saW5lT2Zmc2V0ID0gMDsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBzaGlmdCgpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Citib29sIExleGVyPFQ+Ojppc0F0RW5kT2ZGaWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9j
b2RlID09IG1fY29kZUVuZCkgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBBU1NFUlQobV9jb2RlIDwgbV9jb2RlRW5kKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gTGV4ZXI8VD46OnBhcnNlRGVjaW1hbEludGVnZXIoKQoreworICAgIGlmICgh
aXNEZWNpbWFsKG1fY3VycmVudCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBDaGVja2VkVWludDY0IHZhbHVlID0gMDsKKyAgICB3aGlsZSAoaXNEZWNpbWFsKG1fY3VycmVu
dCkpIHsKKyAgICAgICAgdmFsdWUgKj0gMTB1bGw7CisgICAgICAgIHZhbHVlICs9IHJlYWREZWNp
bWFsKG1fY3VycmVudCk7CisgICAgICAgIHNoaWZ0KCk7CisgICAgfQorICAgIGlmICh2YWx1ZS5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHsgdmFsdWUudmFsdWUoKSB9OworfQorCisvLyBQYXJzZSBwYXR0ZXJuIChlfEUpKFwrfC0pP1sw
LTldK2Y/IGlmIGl0IGlzIHByZXNlbnQsIGFuZCByZXR1cm4gdGhlIGV4cG9uZW50Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6b3B0aW9uYWw8aW50NjRfdD4gTGV4ZXI8VD46OnBhcnNlRGVj
aW1hbEZsb2F0RXhwb25lbnQoKQoreworICAgIFQgY2hhcjEgPSBwZWVrKDEpOworICAgIFQgY2hh
cjIgPSBwZWVrKDIpOworICAgIC8vIENoZWNrIGZvciBwYXR0ZXJuIChlfEUpKFwrfC0pP1swLTld
KworICAgIGlmIChtX2N1cnJlbnQgIT0gJ2UnICYmIG1fY3VycmVudCAhPSAnRScpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGNoYXIxID09ICcrJyB8fCBjaGFyMSA9PSAn
LScpIHsKKyAgICAgICAgaWYgKCFpc0RlY2ltYWwoY2hhcjIpKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9IGVsc2UgaWYgKCFpc0RlY2ltYWwoY2hhcjEpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHNoaWZ0KCk7CisKKyAgICBib29sIG5lZ2F0ZUV4
cG9uZW50ID0gZmFsc2U7CisgICAgaWYgKG1fY3VycmVudCA9PSAnLScpIHsKKyAgICAgICAgbmVn
YXRlRXhwb25lbnQgPSB0cnVlOworICAgICAgICBzaGlmdCgpOworICAgIH0gZWxzZSBpZiAobV9j
dXJyZW50ID09ICcrJykKKyAgICAgICAgc2hpZnQoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8aW50
NjRfdD4gZXhwb25lbnQgPSBwYXJzZURlY2ltYWxJbnRlZ2VyKCk7CisgICAgaWYgKCFleHBvbmVu
dCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBDaGVja2VkSW50NjQgZXhwb25l
bnRWYWx1ZSA9IGV4cG9uZW50LnZhbHVlKCk7CisgICAgaWYgKG5lZ2F0ZUV4cG9uZW50KQorICAg
ICAgICBleHBvbmVudFZhbHVlID0gLSBleHBvbmVudFZhbHVlOworICAgIGlmIChleHBvbmVudFZh
bHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBy
ZXR1cm4geyBleHBvbmVudFZhbHVlLnZhbHVlKCkgfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorVG9rZW4gTGV4ZXI8VD46OnBhcnNlSW50ZWdlckxpdGVyYWxTdWZmaXgoZG91YmxlIGxp
dGVyYWxWYWx1ZSkKK3sKKyAgICBpZiAobV9jdXJyZW50ID09ICdpJykgeworICAgICAgICBzaGlm
dCgpOworICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tlbihUb2tlblR5cGU6OkludGVnZXJM
aXRlcmFsU2lnbmVkLCBsaXRlcmFsVmFsdWUpOworICAgIH0KKyAgICBpZiAobV9jdXJyZW50ID09
ICd1JykgeworICAgICAgICBzaGlmdCgpOworICAgICAgICByZXR1cm4gbWFrZUxpdGVyYWxUb2tl
bihUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsVW5zaWduZWQsIGxpdGVyYWxWYWx1ZSk7CisgICAg
fQorICAgIHJldHVybiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWws
IGxpdGVyYWxWYWx1ZSk7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBMZXhlcjxUPjo6aXNXaGl0ZVNwYWNlKFQgY2gpCit7CisgICAgc3dpdGNoIChjaCkg
eworICAgIGNhc2UgV1RGOjpVbmljb2RlOjpzcGFjZToKKyAgICBjYXNlIFdURjo6VW5pY29kZTo6
dGFiQ2hhcmFjdGVyOgorICAgIGNhc2UgV1RGOjpVbmljb2RlOjpjYXJyaWFnZVJldHVybjoKKyAg
ICBjYXNlIFdURjo6VW5pY29kZTo6bmV3bGluZUNoYXJhY3RlcjoKKyAgICBjYXNlIFdURjo6VW5p
Y29kZTo6dmVydGljYWxUYWJ1bGF0aW9uOgorICAgIGNhc2UgV1RGOjpVbmljb2RlOjpmb3JtRmVl
ZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGJv
b2wgTGV4ZXI8VD46OmlzSWRlbnRpZmllclN0YXJ0KFQgY2gpCit7CisgICAgcmV0dXJuIChjaCA+
PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJyk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBib29sIExleGVyPFQ+Ojppc1ZhbGlk
SWRlbnRpZmllckNoYXJhY3RlcihUIGNoKQoreworICAgIHJldHVybiAoY2ggPj0gJ2EnICYmIGNo
IDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IChjaCA+PSAnMCcgJiYgY2gg
PD0gJzknKSB8fCBjaCA9PSAnXyc7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQUxXQVlT
X0lOTElORSBib29sIExleGVyPFQ+Ojppc0RlY2ltYWwoVCBjaCkKK3sKKyAgICByZXR1cm4gKGNo
ID49ICcwJyAmJiBjaCA8PSAnOScpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZ
U19JTkxJTkUgYm9vbCBMZXhlcjxUPjo6aXNIZXhhZGVjaW1hbChUIGNoKQoreworICAgIHJldHVy
biAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHx8
IChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TFdBWVNfSU5MSU5FIHVpbnQ2NF90IExleGVyPFQ+OjpyZWFkRGVjaW1hbChUIGNoKQoreworICAg
IEFTU0VSVChpc0RlY2ltYWwoY2gpKTsKKyAgICByZXR1cm4gY2ggLSAnMCc7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB1aW50NjRfdCBMZXhlcjxUPjo6cmVhZEhl
eGFkZWNpbWFsKFQgY2gpCit7CisgICAgQVNTRVJUKGlzSGV4YWRlY2ltYWwoY2gpKTsKKyAgICBp
ZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykKKyAgICAgICAgcmV0dXJuIGNoIC0gJzAnOworICAg
IGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKQorICAgICAgICByZXR1cm4gY2ggLSAnYSc7Cisg
ICAgQVNTRVJUKGNoID49ICdBJyAmJiBjaCA8PSAnRicpOworICAgIHJldHVybiBjaCAtICdBJzsK
K30KKwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8TENoYXI+OwordGVtcGxhdGUgY2xhc3MgTGV4ZXI8
VUNoYXI+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9MZXhlci5oIGIv
U291cmNlL1dlYkdQVS9XR1NML0xleGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi5mM2U2ZmY4OTdhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BV
L1dHU0wvTGV4ZXIuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXR1NMIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExleGVyIHsKK3B1YmxpYzoKKyAgICBMZXhlcihj
b25zdCBTdHJpbmcmIHdnc2wpCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZTxULCBMQ2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICBtX2NvZGUgPSB3Z3NsLmNoYXJh
Y3RlcnM4KCk7CisgICAgICAgICAgICBtX2NvZGVFbmQgPSBtX2NvZGUgKyB3Z3NsLnNpemVJbkJ5
dGVzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxULCBVQ2hhcj46OnZhbHVlLCAiVGhlIGxleGVyIGV4cGVjdHMgaXRzIHRlbXBsYXRl
IHBhcmFtZXRlciB0byBiZSBlaXRoZXIgTENoYXIgb3IgVUNoYXIiKTsKKyAgICAgICAgICAgIG1f
Y29kZSA9IHdnc2wuY2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBBU1NFUlQoISh3Z3NsLnNp
emVJbkJ5dGVzKCkgJSAyKSk7CisgICAgICAgICAgICBtX2NvZGVFbmQgPSBtX2NvZGUgKyB3Z3Ns
LnNpemVJbkJ5dGVzKCkgLyAyOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJyZW50ID0gKG1f
Y29kZSAhPSBtX2NvZGVFbmQpID8gKm1fY29kZSA6IDA7CisgICAgfQorCisgICAgVG9rZW4gbGV4
KCk7CisgICAgYm9vbCBpc0F0RW5kT2ZGaWxlKCkgY29uc3Q7CisgICAgU291cmNlUG9zaXRpb24g
Y3VycmVudFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zaXRpb247IH0KKwor
ICAgIC8vIE9ubHkgcHVibGljIHNvIHRoYXQgdGhlIFVDaGFyIHZlcnNpb24gb2YgdGhlIExleGVy
IGNhbiBkZWZlciB0byB0aGUgTENoYXIgdmVyc2lvbgorICAgIHN0YXRpYyBib29sIGlzV2hpdGVT
cGFjZShUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoVCBj
aGFyYWN0ZXIpOworICAgIHN0YXRpYyBib29sIGlzVmFsaWRJZGVudGlmaWVyQ2hhcmFjdGVyKFQg
Y2hhcmFjdGVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc0RlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAg
IHN0YXRpYyBib29sIGlzSGV4YWRlY2ltYWwoVCBjaGFyYWN0ZXIpOworICAgIHN0YXRpYyB1aW50
NjRfdCByZWFkRGVjaW1hbChUIGNoYXJhY3Rlcik7CisgICAgc3RhdGljIHVpbnQ2NF90IHJlYWRI
ZXhhZGVjaW1hbChUIGNoYXJhY3Rlcik7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgY3VycmVu
dE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvc2l0aW9uLm1fb2Zmc2V0OyB9Cisg
ICAgdW5zaWduZWQgY3VycmVudFRva2VuTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gY3VycmVudE9m
ZnNldCgpIC0gbV90b2tlblN0YXJ0aW5nUG9zaXRpb24ubV9vZmZzZXQ7IH0KKworICAgIFRva2Vu
IG1ha2VUb2tlbihUb2tlblR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB7IHR5cGUs
IG1fdG9rZW5TdGFydGluZ1Bvc2l0aW9uLCBjdXJyZW50VG9rZW5MZW5ndGgoKSB9OworICAgIH0K
KyAgICBUb2tlbiBtYWtlTGl0ZXJhbFRva2VuKFRva2VuVHlwZSB0eXBlLCBkb3VibGUgbGl0ZXJh
bFZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgdHlwZSwgbV90b2tlblN0YXJ0aW5nUG9z
aXRpb24sIGN1cnJlbnRUb2tlbkxlbmd0aCgpLCBsaXRlcmFsVmFsdWUgfTsKKyAgICB9CisgICAg
VG9rZW4gbWFrZUlkZW50aWZpZXJUb2tlbihTdHJpbmdWaWV3IHZpZXcpCisgICAgeworICAgICAg
ICByZXR1cm4geyBXR1NMOjpUb2tlblR5cGU6OklkZW50aWZpZXIsIG1fdG9rZW5TdGFydGluZ1Bv
c2l0aW9uLCBjdXJyZW50VG9rZW5MZW5ndGgoKSwgdmlldyB9OworICAgIH0KKworICAgIHZvaWQg
c2hpZnQoKTsKKyAgICBUIHBlZWsodW5zaWduZWQpOworICAgIHZvaWQgc2tpcFdoaXRlc3BhY2Uo
KTsKKworICAgIC8vIFJlYWRzIFswLTldKworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBh
cnNlRGVjaW1hbEludGVnZXIoKTsKKyAgICAvLyBQYXJzZSBwYXR0ZXJuIChlfEUpKFwrfC0pP1sw
LTldK2Y/IGlmIGl0IGlzIHByZXNlbnQsIGFuZCByZXR1cm4gdGhlIGV4cG9uZW50CisgICAgc3Rk
OjpvcHRpb25hbDxpbnQ2NF90PiBwYXJzZURlY2ltYWxGbG9hdEV4cG9uZW50KCk7CisgICAgLy8g
Q2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYW4gImkiIG9yICJ1IiBjb21pbmcsIGFuZCByZXR1cm4g
dGhlIHJpZ2h0IGtpbmQgb2YgbGl0ZXJhbCB0b2tlbgorICAgIFRva2VuIHBhcnNlSW50ZWdlckxp
dGVyYWxTdWZmaXgoZG91YmxlIGxpdGVyYWxWYWx1ZSk7CisKKyAgICBUIG1fY3VycmVudDsKKyAg
ICBjb25zdCBUKiBtX2NvZGU7CisgICAgY29uc3QgVCogbV9jb2RlRW5kOworICAgIFNvdXJjZVBv
c2l0aW9uIG1fY3VycmVudFBvc2l0aW9uIHsgMCwgMCwgMCB9OworICAgIFNvdXJjZVBvc2l0aW9u
IG1fdG9rZW5TdGFydGluZ1Bvc2l0aW9uIHsgMCwgMCwgMCB9OworfTsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XR1NML1NvdXJjZVNwYW4uaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9T
b3VyY2VTcGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40NWIx
OGM0NTU5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvU291cmNlU3Bh
bi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIFdHU0wgeworCitzdHJ1Y3QgU291cmNlUG9zaXRpb24geworICAgIHVuc2lnbmVkIG1fbGlu
ZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9
OworCitzdHJ1Y3QgU291cmNlU3BhbiB7CisgICAgLy8gRklYTUU6IHdlIGNvdWxkIHBvc3NpYmx5
IHNraXAgbV9saW5lT2Zmc2V0IGFuZCByZWNvbXB1dGUgaXQgb25seSB3aGVuIHRyeWluZyB0byBz
aG93IGFuIGVycm9yCisgICAgLy8gVGhpcyB3b3VsZCBzaHJpbmsgdGhlIEFTVCBzaXplIGJ5IDMy
IGJpdHMgcGVyIEFTVCBub2RlLCBhdCB0aGUgY29zdCBvZiBhIGJpdCBvZiBjb2RlIGNvbXBsZXhp
dHkgaW4gdGhlIGVycm9yIHRvU3RyaW5nIGZ1bmN0aW9uLgorICAgIHVuc2lnbmVkIG1fbGluZTsK
KyAgICB1bnNpZ25lZCBtX2xpbmVPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAg
dW5zaWduZWQgbV9sZW5ndGg7CisKKyAgICBTb3VyY2VTcGFuKHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGxpbmVPZmZzZXQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAg
ICA6IG1fbGluZShsaW5lKQorICAgICAgICAsIG1fbGluZU9mZnNldChsaW5lT2Zmc2V0KQorICAg
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBTb3VyY2VTcGFuKFNvdXJjZVBvc2l0aW9uIHN0YXJ0LCBTb3Vy
Y2VQb3NpdGlvbiBlbmQpCisgICAgICAgIDogbV9saW5lKHN0YXJ0Lm1fbGluZSkKKyAgICAgICAg
LCBtX2xpbmVPZmZzZXQoc3RhcnQubV9saW5lT2Zmc2V0KQorICAgICAgICAsIG1fb2Zmc2V0KHN0
YXJ0Lm1fb2Zmc2V0KQorICAgICAgICAsIG1fbGVuZ3RoKGVuZC5tX29mZnNldCAtIHN0YXJ0Lm1f
b2Zmc2V0KQorICAgIHsKKyAgICB9Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BV
L1dHU0wvVG9rZW4uY3BwIGIvU291cmNlL1dlYkdQVS9XR1NML1Rva2VuLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRiM2MwYTQzZTEwMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9Ub2tlbi5jcHAKQEAgLTAsMCArMSwxMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFt
ZXNwYWNlIFdHU0wgeworCitTdHJpbmcgdG9TdHJpbmcoVG9rZW5UeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUb2tlblR5cGU6OkludmFsaWQ6CisgICAgICAgIHJl
dHVybiAiSW52YWxpZCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkVuZE9mRmlsZToKKyAgICAgICAg
cmV0dXJuICJFT0YiOworICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbDoKKyAgICAg
ICAgcmV0dXJuICJJbnRlZ2VyTGl0ZXJhbCI7CisgICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJM
aXRlcmFsU2lnbmVkOgorICAgICAgICByZXR1cm4gIkludGVnZXJMaXRlcmFsU2lnbmVkIjsKKyAg
ICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZDoKKyAgICAgICAgcmV0dXJu
ICJJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6RGVjaW1hbEZs
b2F0TGl0ZXJhbDoKKyAgICAgICAgcmV0dXJuICJEZWNpbWFsRmxvYXRMaXRlcmFsIjsKKyAgICBj
YXNlIFRva2VuVHlwZTo6SGV4RmxvYXRMaXRlcmFsOgorICAgICAgICByZXR1cm4gIkhleEZsb2F0
TGl0ZXJhbCI7CisgICAgY2FzZSBUb2tlblR5cGU6OklkZW50aWZpZXI6CisgICAgICAgIHJldHVy
biAiSWRlbnRpZmllciI7CisgICAgY2FzZSBUb2tlblR5cGU6OlJlc2VydmVkV29yZDoKKyAgICAg
ICAgcmV0dXJuICJSZXNlcnZlZFdvcmQiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkU3Ry
dWN0OgorICAgICAgICByZXR1cm4gInN0cnVjdCI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdv
cmRGbjoKKyAgICAgICAgcmV0dXJuICJmbiI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRG
dW5jdGlvbjoKKyAgICAgICAgcmV0dXJuICJmdW5jdGlvbiI7CisgICAgY2FzZSBUb2tlblR5cGU6
OktleXdvcmRQcml2YXRlOgorICAgICAgICByZXR1cm4gInByaXZhdGUiOworICAgIGNhc2UgVG9r
ZW5UeXBlOjpLZXl3b3JkUmVhZDoKKyAgICAgICAgcmV0dXJuICJyZWFkIjsKKyAgICBjYXNlIFRv
a2VuVHlwZTo6S2V5d29yZFJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuICJyZWFkX3dyaXRlIjsK
KyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFJldHVybjoKKyAgICAgICAgcmV0dXJuICJyZXR1
cm4iOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3JkU3RvcmFnZToKKyAgICAgICAgcmV0dXJu
ICJzdG9yYWdlIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFVuaWZvcm06CisgICAgICAg
IHJldHVybiAidW5pZm9ybSI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRWYXI6CisgICAg
ICAgIHJldHVybiAidmFyIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFdvcmtncm91cDoK
KyAgICAgICAgcmV0dXJuICJ3b3JrZ3JvdXAiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3Jk
V3JpdGU6CisgICAgICAgIHJldHVybiAid3JpdGUiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3
b3JkSTMyOgorICAgICAgICByZXR1cm4gImkzMiI7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdv
cmRVMzI6CisgICAgICAgIHJldHVybiAidTMyIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29y
ZEYzMjoKKyAgICAgICAgcmV0dXJuICJmMzIiOworICAgIGNhc2UgVG9rZW5UeXBlOjpLZXl3b3Jk
Qm9vbDoKKyAgICAgICAgcmV0dXJuICJib29sIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6TGl0ZXJh
bFRydWU6CisgICAgICAgIHJldHVybiAidHJ1ZSI7CisgICAgY2FzZSBUb2tlblR5cGU6OkxpdGVy
YWxGYWxzZToKKyAgICAgICAgcmV0dXJuICJmYWxzZSI7CisgICAgY2FzZSBUb2tlblR5cGU6OkFy
cm93OgorICAgICAgICByZXR1cm4gIi0+IjsKKyAgICBjYXNlIFRva2VuVHlwZTo6QXR0cmlidXRl
OgorICAgICAgICByZXR1cm4gIkAiOworICAgIGNhc2UgVG9rZW5UeXBlOjpCcmFja2V0TGVmdDoK
KyAgICAgICAgcmV0dXJuICJbIjsKKyAgICBjYXNlIFRva2VuVHlwZTo6QnJhY2tldFJpZ2h0Ogor
ICAgICAgICByZXR1cm4gIl0iOworICAgIGNhc2UgVG9rZW5UeXBlOjpCcmFjZUxlZnQ6CisgICAg
ICAgIHJldHVybiAieyI7CisgICAgY2FzZSBUb2tlblR5cGU6OkJyYWNlUmlnaHQ6CisgICAgICAg
IHJldHVybiAifSI7CisgICAgY2FzZSBUb2tlblR5cGU6OkNvbG9uOgorICAgICAgICByZXR1cm4g
IjoiOworICAgIGNhc2UgVG9rZW5UeXBlOjpDb21tYToKKyAgICAgICAgcmV0dXJuICIsIjsKKyAg
ICBjYXNlIFRva2VuVHlwZTo6RXF1YWw6CisgICAgICAgIHJldHVybiAiPSI7CisgICAgY2FzZSBU
b2tlblR5cGU6OkdUOgorICAgICAgICByZXR1cm4gIj4iOworICAgIGNhc2UgVG9rZW5UeXBlOjpM
VDoKKyAgICAgICAgcmV0dXJuICI8IjsKKyAgICBjYXNlIFRva2VuVHlwZTo6UGVyaW9kOgorICAg
ICAgICByZXR1cm4gIi4iOworICAgIGNhc2UgVG9rZW5UeXBlOjpQYXJlbkxlZnQ6CisgICAgICAg
IHJldHVybiAiKCI7CisgICAgY2FzZSBUb2tlblR5cGU6OlBhcmVuUmlnaHQ6CisgICAgICAgIHJl
dHVybiAiKSI7CisgICAgY2FzZSBUb2tlblR5cGU6OlNlbWljb2xvbjoKKyAgICAgICAgcmV0dXJu
ICI7IjsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9Ub2tl
bi5oIGIvU291cmNlL1dlYkdQVS9XR1NML1Rva2VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi45Yjg3ZTEyZGM3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvVG9rZW4uaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiU291cmNlU3Bhbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdHU0wgeworCitlbnVtIGNsYXNzIFRva2VuVHlwZTogdWludDMyX3QgeworICAgIC8vIEluc3Rl
YWQgb2YgaGF2aW5nIHRoaXMgdHlwZSwgd2UgY291bGQgaGF2ZSBhIHN0ZDo6b3B0aW9uYWw8VG9r
ZW4+IGV2ZXJ5d2hlcmUgdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZSBhIFRva2VuLgorICAgIC8vIEkg
bWFkZSB0aGlzIGNob2ljZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgLy8gLSBzcGFjZSBlZmZpY2ll
bmN5OiB3ZSBkb24ndCB1c2UgYW4gZXh0cmEgd29yZCBvZiBtZW1vcnkgZm9yIHRoZSB2YXJpYW50
J3MgdGFnCisgICAgLy8gICAgIChhbHRob3VnaCB0aGlzIHBhcnQgY291bGQgYmUgc29sdmVkIGJ5
IHVzaW5nIGh0dHBzOi8vZ2l0aHViLmNvbS9ha3J6ZW1pMS9tYXJrYWJsZSkKKyAgICAvLyAtIGVh
c2Ugb2YgdXNlIGFuZCB0aW1lIGVmZmljaWVuY3k6IGV2ZXJ5d2hlcmUgdGhhdCB3ZSBjaGVjayBm
b3IgYSBnaXZlbiBUb2tlblR5cGUsIHdlIHdvdWxkIGhhdmUgdG8gZmlyc3QgY2hlY2sgdGhhdCB0
aGUgVG9rZW4gaXMgbm90IG51bGxvcHQsIGFuZCB0aGVuIGNoZWNrIHRoZSBUb2tlblR5cGUuCisg
ICAgSW52YWxpZCwKKworICAgIEVuZE9mRmlsZSwKKworICAgIEludGVnZXJMaXRlcmFsLAorICAg
IEludGVnZXJMaXRlcmFsU2lnbmVkLAorICAgIEludGVnZXJMaXRlcmFsVW5zaWduZWQsCisgICAg
RGVjaW1hbEZsb2F0TGl0ZXJhbCwKKyAgICBIZXhGbG9hdExpdGVyYWwsCisKKyAgICBJZGVudGlm
aWVyLAorCisgICAgUmVzZXJ2ZWRXb3JkLAorICAgIEtleXdvcmRGbiwKKyAgICBLZXl3b3JkRnVu
Y3Rpb24sCisgICAgS2V5d29yZFByaXZhdGUsCisgICAgS2V5d29yZFJlYWQsCisgICAgS2V5d29y
ZFJlYWRXcml0ZSwKKyAgICBLZXl3b3JkUmV0dXJuLAorICAgIEtleXdvcmRTdG9yYWdlLAorICAg
IEtleXdvcmRTdHJ1Y3QsCisgICAgS2V5d29yZFVuaWZvcm0sCisgICAgS2V5d29yZFZhciwKKyAg
ICBLZXl3b3JkV29ya2dyb3VwLAorICAgIEtleXdvcmRXcml0ZSwKKyAgICBLZXl3b3JkSTMyLAor
ICAgIEtleXdvcmRVMzIsCisgICAgS2V5d29yZEYzMiwKKyAgICBLZXl3b3JkQm9vbCwKKyAgICBM
aXRlcmFsVHJ1ZSwKKyAgICBMaXRlcmFsRmFsc2UsCisgICAgLy8gRklYTUU6IGFkZCBhbGwgdGhl
IG90aGVyIGtleXdvcmRzOiBzZWUgI2tleXdvcmQtc3VtbWFyeSBpbiB0aGUgV0dTTCBzcGVjCisK
KyAgICBBcnJvdywKKyAgICBBdHRyaWJ1dGUsCisgICAgQnJhY2VMZWZ0LAorICAgIEJyYWNlUmln
aHQsCisgICAgQnJhY2tldExlZnQsCisgICAgQnJhY2tldFJpZ2h0LAorICAgIENvbG9uLAorICAg
IENvbW1hLAorICAgIEVxdWFsLAorICAgIEdULAorICAgIExULAorICAgIFBlcmlvZCwKKyAgICBQ
YXJlbkxlZnQsCisgICAgUGFyZW5SaWdodCwKKyAgICBTZW1pY29sb24sCisgICAgLy8gRklYTUU6
IGFkZCBhbGwgdGhlIG90aGVyIHNwZWNpYWwgdG9rZW5zCit9OworCitTdHJpbmcgdG9TdHJpbmco
VG9rZW5UeXBlKTsKKworc3RydWN0IFRva2VuIHsKKyAgICBUb2tlblR5cGUgbV90eXBlOworICAg
IFNvdXJjZVNwYW4gbV9zcGFuOworICAgIHVuaW9uIHsKKyAgICAgICAgZG91YmxlIG1fbGl0ZXJh
bFZhbHVlOworICAgICAgICBTdHJpbmdWaWV3IG1faWRlbnQ7CisgICAgfTsKKworICAgIFRva2Vu
KFRva2VuVHlwZSB0eXBlLCBTb3VyY2VQb3NpdGlvbiBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
KQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc3Bhbihwb3NpdGlvbi5tX2xp
bmUsIHBvc2l0aW9uLm1fbGluZU9mZnNldCwgcG9zaXRpb24ubV9vZmZzZXQsIGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SWRlbnRpZmllcik7CisgICAg
ICAgIEFTU0VSVCh0eXBlICE9IFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwpOworICAgICAgICBB
U1NFUlQodHlwZSAhPSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkKTsKKyAgICAgICAg
QVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkKTsKKyAgICAg
ICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsKTsKKyAgICAg
ICAgQVNTRVJUKHR5cGUgIT0gVG9rZW5UeXBlOjpIZXhGbG9hdExpdGVyYWwpOworICAgIH0KKwor
ICAgIFRva2VuKFRva2VuVHlwZSB0eXBlLCBTb3VyY2VQb3NpdGlvbiBwb3NpdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoLCBkb3VibGUgbGl0ZXJhbFZhbHVlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQor
ICAgICAgICAsIG1fc3Bhbihwb3NpdGlvbi5tX2xpbmUsIHBvc2l0aW9uLm1fbGluZU9mZnNldCwg
cG9zaXRpb24ubV9vZmZzZXQsIGxlbmd0aCkKKyAgICAgICAgLCBtX2xpdGVyYWxWYWx1ZShsaXRl
cmFsVmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSA9PSBUb2tlblR5cGU6OkludGVn
ZXJMaXRlcmFsCisgICAgICAgICAgICB8fCB0eXBlID09IFRva2VuVHlwZTo6SW50ZWdlckxpdGVy
YWxTaWduZWQKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJh
bFVuc2lnbmVkCisgICAgICAgICAgICB8fCB0eXBlID09IFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbAorICAgICAgICAgICAgfHwgdHlwZSA9PSBUb2tlblR5cGU6OkhleEZsb2F0TGl0ZXJh
bCk7CisgICAgfQorCisgICAgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFNvdXJjZVBvc2l0aW9uIHBv
c2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFN0cmluZ1ZpZXcgaWRlbnQpCisgICAgICAgIDogbV90
eXBlKHR5cGUpCisgICAgICAgICwgbV9zcGFuKHBvc2l0aW9uLm1fbGluZSwgcG9zaXRpb24ubV9s
aW5lT2Zmc2V0LCBwb3NpdGlvbi5tX29mZnNldCwgbGVuZ3RoKQorICAgICAgICAsIG1faWRlbnQo
aWRlbnQpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSA9PSBUb2tlblR5cGU6OklkZW50aWZp
ZXIpOworICAgIH0KKworICAgIFRva2VuJiBvcGVyYXRvcj0oVG9rZW4mJiBvdGhlcikKKyAgICB7
CisgICAgICAgIGlmIChtX3R5cGUgPT0gVG9rZW5UeXBlOjpJZGVudGlmaWVyKQorICAgICAgICAg
ICAgbV9pZGVudC5+U3RyaW5nVmlldygpOworCisgICAgICAgIG1fdHlwZSA9IG90aGVyLm1fdHlw
ZTsKKyAgICAgICAgbV9zcGFuID0gb3RoZXIubV9zcGFuOworCisgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV90eXBlKSB7CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJZGVudGlmaWVyOgorICAgICAg
ICAgICAgbmV3IChOb3ROdWxsLCAmbV9pZGVudCkgU3RyaW5nVmlldygpOworICAgICAgICAgICAg
bV9pZGVudCA9IG90aGVyLm1faWRlbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsOgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6SW50
ZWdlckxpdGVyYWxTaWduZWQ6CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJh
bFVuc2lnbmVkOgorICAgICAgICBjYXNlIFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbDoK
KyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkhleEZsb2F0TGl0ZXJhbDoKKyAgICAgICAgICAgIG1f
bGl0ZXJhbFZhbHVlID0gb3RoZXIubV9saXRlcmFsVmFsdWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFRva2VuKGNvbnN0IFRva2VuJiBvdGhlcikK
KyAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQorICAgICAgICAsIG1fc3BhbihvdGhlci5t
X3NwYW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKG90aGVyLm1fdHlwZSkgeworICAgICAgICBj
YXNlIFRva2VuVHlwZTo6SWRlbnRpZmllcjoKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1f
aWRlbnQpIFN0cmluZ1ZpZXcoKTsKKyAgICAgICAgICAgIG1faWRlbnQgPSBvdGhlci5tX2lkZW50
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVG9rZW5UeXBlOjpJbnRlZ2VyTGl0
ZXJhbDoKKyAgICAgICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkOgorICAg
ICAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZDoKKyAgICAgICAgY2Fz
ZSBUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWw6CisgICAgICAgIGNhc2UgVG9rZW5UeXBl
OjpIZXhGbG9hdExpdGVyYWw6CisgICAgICAgICAgICBtX2xpdGVyYWxWYWx1ZSA9IG90aGVyLm1f
bGl0ZXJhbFZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5Ub2tlbigpCisgICAgewor
ICAgICAgICBpZiAobV90eXBlID09IFRva2VuVHlwZTo6SWRlbnRpZmllcikKKyAgICAgICAgICAg
ICgmbV9pZGVudCktPn5TdHJpbmdWaWV3KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwIGIvU291cmNlL1dl
YkdQVS9XR1NML1dHU0wuY3BwCmluZGV4IDI1YTY4NWUxNzE1MC4uOTRmZTM5YWJkNzM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKKysrIGIvU291cmNlL1dlYkdQVS9X
R1NML1dHU0wuY3BwCkBAIC0yNywxMSArMjcsMTUgQEAKICNpbmNsdWRlICJXR1NMLmgiCiAKICNp
bmNsdWRlICJBU1QuaCIKKyNpbmNsdWRlICJMZXhlci5oIgogCiBuYW1lc3BhY2UgV0dTTCB7CiAK
LXN0ZDo6dmFyaWFudDxTdWNjZXNzZnVsQ2hlY2ssIEZhaWxlZENoZWNrPiBzdGF0aWNDaGVjayhj
b25zdCBTdHJpbmcmLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJjZU1hcD4mKQorc3RkOjp2YXJp
YW50PFN1Y2Nlc3NmdWxDaGVjaywgRmFpbGVkQ2hlY2s+IHN0YXRpY0NoZWNrKGNvbnN0IFN0cmlu
ZyYgc3RyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJjZU1hcD4mKQogeworICAgIC8vIE1ha2lu
ZyBzdXJlIHRoYXQgdGhlIGxleGVyIGJ1aWxkcyBjb3JyZWN0bHksIHdpbGwgYmUgcmVtb3ZlZCBp
biBsYXRlciBwYXRjaGVzCisgICAgTGV4ZXI8TENoYXI+IGxleGVyKHN0cik7CisgICAgbGV4ZXIu
bGV4KCk7CiAgICAgcmV0dXJuIEZhaWxlZENoZWNrIHsgeyB9LCB7IH0gfTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1tIGIvU291
cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGM0ODZkMWQ4MTk5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xMZXhlclRlc3RzLm1tCkBAIC0wLDAg
KzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJMZXhlci5oIgorCisjaW1wb3J0IDxYQ1Rlc3Qv
WENUZXN0Lmg+CisKK0BpbnRlcmZhY2UgV0dTTExleGVyVGVzdHMgOiBYQ1Rlc3RDYXNlCisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdHU0xMZXhlclRlc3RzCisKKy0gKHZvaWQpdGVzdExleGVy
T25TaW5nbGVUb2tlbnMgeworICAgIGF1dG8gY2hlY2tTaW5nbGVUb2tlbiA9IFtdIChjb25zdCBj
aGFyKiBzdHJpbmcsIFdHU0w6OlRva2VuVHlwZSB0eXBlKSB7CisgICAgICAgIFdHU0w6OkxleGVy
PExDaGFyPiBsZXhlcihzdHJpbmcpOworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBsZXhl
ci5sZXgoKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1YWwocmVzdWx0Lm1fdHlwZSwgdHlwZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBhdXRvIGNoZWNrU2luZ2xlTGl0ZXJh
bCA9IFsmXSAoY29uc3QgY2hhciogc3RyaW5nLCBXR1NMOjpUb2tlblR5cGUgdHlwZSwgZG91Ymxl
IGxpdGVyYWxWYWx1ZSkgeworICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBjaGVja1Npbmds
ZVRva2VuKHN0cmluZywgdHlwZSk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5tX2xp
dGVyYWxWYWx1ZSwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9OworCisgICAgY2hlY2tTaW5nbGVUb2tl
bigiIiwgV0dTTDo6VG9rZW5UeXBlOjpFbmRPZkZpbGUpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJh
bCgiMSIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDEpOworICAgIGNoZWNrU2lu
Z2xlTGl0ZXJhbCgiMCIsIFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDApOworICAg
IGNoZWNrU2luZ2xlTGl0ZXJhbCgiMTQyIiwgV0dTTDo6VG9rZW5UeXBlOjpJbnRlZ2VyTGl0ZXJh
bCwgMTQyKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjEuMSIsIFdHU0w6OlRva2VuVHlwZTo6
RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMS4xKTsKKyAgICBjaGVja1NpbmdsZUxpdGVyYWwoIjAuNCIs
IFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMC40KTsKKyAgICBjaGVja1Np
bmdsZUxpdGVyYWwoIjAxMjMuNDU2IiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRl
cmFsLCAwMTIzLjQ1Nik7CisgICAgY2hlY2tTaW5nbGVUb2tlbigiMDEyMyIsIFdHU0w6OlRva2Vu
VHlwZTo6SW52YWxpZCk7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCIwMTIzLiIsIFdHU0w6OlRv
a2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgMTIzKTsKKyAgICBjaGVja1NpbmdsZUxpdGVy
YWwoIi40NTYiLCBXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWwsIDAuNDU2KTsK
KyAgICBjaGVja1NpbmdsZVRva2VuKCIuIiwgV0dTTDo6VG9rZW5UeXBlOjpQZXJpb2QpOworICAg
IGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJmIiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRM
aXRlcmFsLCA0Mik7CisgICAgY2hlY2tTaW5nbGVMaXRlcmFsKCI0MmUwZiIsIFdHU0w6OlRva2Vu
VHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbCwgNDIpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgi
MDQyZTBmIiwgV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsLCA0Mik7CisgICAg
Y2hlY2tTaW5nbGVUb2tlbigiMDQyZiIsIFdHU0w6OlRva2VuVHlwZTo6SW52YWxpZCk7CisgICAg
Y2hlY2tTaW5nbGVMaXRlcmFsKCI0MmUtMyIsIFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgNDJlLTMpOworICAgIGNoZWNrU2luZ2xlTGl0ZXJhbCgiNDJlLWEiLCBXR1NMOjpU
b2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCA0Mik7Cit9CisKKy0gKHZvaWQpIHRlc3RMZXhlck9u
Q29tcHV0ZVNoYWRlciB7CisgICAgV0dTTDo6TGV4ZXI8TENoYXI+IGxleGVyKCJAYmxvY2sgc3Ry
dWN0IEIge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGE6IGkzMjtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQGdyb3VwKDApIEBi
aW5kaW5nKDApXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXI8c3RvcmFnZSwg
cmVhZF93cml0ZT4geDogQjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQHN0YWdlKGNvbXB1dGUpXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmbiBtYWluKCkge1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHguYSA9IDQyO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAifSIpOworCisgICAgdW5zaWduZWQgbGluZU51bWJlciA9IDA7CisgICAgYXV0byBjaGVja05l
eHRUb2tlbiA9IFsmXSAoV0dTTDo6VG9rZW5UeXBlIHR5cGUpIHsKKyAgICAgICAgV0dTTDo6VG9r
ZW4gcmVzdWx0ID0gbGV4ZXIubGV4KCk7CisgICAgICAgIFhDVEFzc2VydEVxdWFsKHJlc3VsdC5t
X3R5cGUsIHR5cGUpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV9zcGFuLm1fbGlu
ZSwgbGluZU51bWJlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgICBhdXRv
IGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyID0gWyZdIChjb25zdCBjaGFyKiBpZGVudCkgewor
ICAgICAgICBXR1NMOjpUb2tlbiByZXN1bHQgPSBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5
cGU6OklkZW50aWZpZXIpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV9pZGVudCwg
aWRlbnQpOworICAgIH07CisgICAgYXV0byBjaGVja05leHRUb2tlbklzTGl0ZXJhbCA9IFsmXSAo
V0dTTDo6VG9rZW5UeXBlIHR5cGUsIGRvdWJsZSBsaXRlcmFsVmFsdWUpIHsKKyAgICAgICAgV0dT
TDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tOZXh0VG9rZW4odHlwZSk7CisgICAgICAgIFhDVEFzc2Vy
dEVxdWFsKHJlc3VsdC5tX2xpdGVyYWxWYWx1ZSwgbGl0ZXJhbFZhbHVlKTsKKyAgICB9OworCisg
ICAgLy8gQGJsb2NrIHN0cnVjdCBCIHsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5
cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImJsb2NrIik7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkU3RydWN0KTsKKyAg
ICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiQiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdH
U0w6OlRva2VuVHlwZTo6QnJhY2VMZWZ0KTsKKworICAgIC8vIGE6IGkzMjsKKyAgICArK2xpbmVO
dW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImEiKTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbG9uKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OktleXdvcmRJMzIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2Vu
VHlwZTo6U2VtaWNvbG9uKTsKKworICAgIC8vIH0KKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hl
Y2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpCcmFjZVJpZ2h0KTsKKworICAgIC8vIEBncm91
cCgwKSBAYmluZGluZygwKQorICAgIGxpbmVOdW1iZXIgKz0gMjsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50
aWZpZXIoImdyb3VwIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJl
bkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6SW50
ZWdlckxpdGVyYWwsIDApOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFy
ZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUp
OworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJiaW5kaW5nIik7CisgICAgY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2Vu
SXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWwsIDApOworICAgIGNoZWNr
TmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyB2YXI8c3Rv
cmFnZSwgcmVhZF93cml0ZT4geDogQjsKKyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkVmFyKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OktleXdvcmRTdG9yYWdlKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNv
bW1hKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRSZWFkV3Jp
dGUpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNr
TmV4dFRva2VuSXNJZGVudGlmaWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpDb2xvbik7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIkIiKTsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlNlbWljb2xvbik7CisKKyAgICAvLyBA
c3RhZ2UoY29tcHV0ZSkKKyAgICBsaW5lTnVtYmVyICs9IDI7CisgICAgY2hlY2tOZXh0VG9rZW4o
V0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlm
aWVyKCJzdGFnZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5M
ZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigiY29tcHV0ZSIpOworICAgIGNo
ZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyBmbiBt
YWluKCkgeworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OktleXdvcmRGbik7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIm1haW4i
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuTGVmdCk7CisgICAg
Y2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlTGVmdCk7CisKKyAgICAvLyB4LmEgPSA0MjsK
KyAgICArK2xpbmVOdW1iZXI7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoIngiKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBlcmlvZCk7CisgICAgY2hlY2tO
ZXh0VG9rZW5Jc0lkZW50aWZpZXIoImEiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OkVxdWFsKTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5
cGU6OkludGVnZXJMaXRlcmFsLCA0Mik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpTZW1pY29sb24pOworCisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVj
a05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlUmlnaHQpOworICAgIGNoZWNrTmV4dFRv
a2VuKFdHU0w6OlRva2VuVHlwZTo6RW5kT2ZGaWxlKTsKK30KKworLSAodm9pZCkgdGVzdExleGVy
T25HcmFwaGljc1NoYWRlciB7CisgICAgV0dTTDo6TGV4ZXI8TENoYXI+IGxleGVyKCJAc3RhZ2Uo
dmVydGV4KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm4gdmVydGV4U2hhZGVy
KEBsb2NhdGlvbigwKSB4OiB2ZWM0PGYzMj4pIC0+IEBidWlsdGluKHBvc2l0aW9uKSB2ZWM0PGYz
Mj4ge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB4O1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJAc3RhZ2UoZnJhZ21l
bnQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbiBmcmFnbWVudFNoYWRlcigp
IC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB2ZWM0PGYzMj4oMC40LCAwLjQsIDAuOCwgMS4wKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKworICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIg
PSAwOworICAgIGF1dG8gY2hlY2tOZXh0VG9rZW4gPSBbJl0gKFdHU0w6OlRva2VuVHlwZSB0eXBl
KSB7CisgICAgICAgIFdHU0w6OlRva2VuIHJlc3VsdCA9IGxleGVyLmxleCgpOworICAgICAgICBY
Q1RBc3NlcnRFcXVhbChyZXN1bHQubV90eXBlLCB0eXBlKTsKKyAgICAgICAgWENUQXNzZXJ0RXF1
YWwocmVzdWx0Lm1fc3Bhbi5tX2xpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgICAgYXV0byBjaGVja05leHRUb2tlbklzSWRlbnRpZmllciA9IFsmXSAo
Y29uc3QgY2hhciogaWRlbnQpIHsKKyAgICAgICAgV0dTTDo6VG9rZW4gcmVzdWx0ID0gY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpJZGVudGlmaWVyKTsKKyAgICAgICAgWENUQXNzZXJ0
RXF1YWwocmVzdWx0Lm1faWRlbnQsIGlkZW50KTsKKyAgICB9OworICAgIGF1dG8gY2hlY2tOZXh0
VG9rZW5Jc0xpdGVyYWwgPSBbJl0gKFdHU0w6OlRva2VuVHlwZSB0eXBlLCBkb3VibGUgbGl0ZXJh
bFZhbHVlKSB7CisgICAgICAgIFdHU0w6OlRva2VuIHJlc3VsdCA9IGNoZWNrTmV4dFRva2VuKHR5
cGUpOworICAgICAgICBYQ1RBc3NlcnRFcXVhbChyZXN1bHQubV9saXRlcmFsVmFsdWUsIGxpdGVy
YWxWYWx1ZSk7CisgICAgfTsKKworICAgIC8vIFtbc3RhZ2UodmVydGV4KV1dCisgICAgY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2Vu
SXNJZGVudGlmaWVyKCJzdGFnZSIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVja05leHRUb2tlbklzSWRlbnRpZmllcigidmVydGV4Iik7
CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlblJpZ2h0KTsKKworICAg
ICsrbGluZU51bWJlcjsKKyAgICAvLyBmbiB2ZXJ0ZXhTaGFkZXIoQGxvY2F0aW9uKDApIHg6IHZl
YzQ8ZjMyPikgLT4gQGJ1aWx0aW4ocG9zaXRpb24pIHZlYzQ8ZjMyPiB7CisgICAgY2hlY2tOZXh0
VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpLZXl3b3JkRm4pOworICAgIGNoZWNrTmV4dFRva2VuSXNJ
ZGVudGlmaWVyKCJ2ZXJ0ZXhTaGFkZXIiKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tl
blR5cGU6OlBhcmVuTGVmdCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpB
dHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJsb2NhdGlvbiIpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVj
a05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNo
ZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpDb2xvbik7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlYzQi
KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05l
eHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGMzIpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlw
ZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBcnJv
dyk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpBdHRyaWJ1dGUpOworICAg
IGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJidWlsdGluIik7CisgICAgY2hlY2tOZXh0VG9r
ZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVu
dGlmaWVyKCJwb3NpdGlvbiIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6
UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlYzQiKTsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05leHRUb2tl
bihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGMzIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6
OlRva2VuVHlwZTo6R1QpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6QnJh
Y2VMZWZ0KTsKKworICAgIC8vIHJldHVybiB4OworICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVj
a05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRSZXR1cm4pOworICAgIGNoZWNrTmV4
dFRva2VuSXNJZGVudGlmaWVyKCJ4Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5U
eXBlOjpTZW1pY29sb24pOworCisgICAgLy8gfQorICAgICsrbGluZU51bWJlcjsKKyAgICBjaGVj
a05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlUmlnaHQpOworCisgICAgLy8gQHN0YWdl
KGZyYWdtZW50KQorICAgIGxpbmVOdW1iZXIgKz0gMjsKKyAgICBjaGVja05leHRUb2tlbihXR1NM
OjpUb2tlblR5cGU6OkF0dHJpYnV0ZSk7CisgICAgY2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIo
InN0YWdlIik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQp
OworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJmcmFnbWVudCIpOworICAgIGNoZWNr
TmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisKKyAgICAvLyBmbiBmcmFn
bWVudFNoYWRlcigpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4geworICAgICsrbGluZU51bWJl
cjsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OktleXdvcmRGbik7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoImZyYWdtZW50U2hhZGVyIik7CisgICAgY2hlY2tO
ZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQYXJlbkxlZnQpOworICAgIGNoZWNrTmV4dFRva2Vu
KFdHU0w6OlRva2VuVHlwZTo6UGFyZW5SaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6
VG9rZW5UeXBlOjpBcnJvdyk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpB
dHRyaWJ1dGUpOworICAgIGNoZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJsb2NhdGlvbiIpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVj
a05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsLCAwKTsK
KyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlBhcmVuUmlnaHQpOworICAgIGNo
ZWNrTmV4dFRva2VuSXNJZGVudGlmaWVyKCJ2ZWM0Iik7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dT
TDo6VG9rZW5UeXBlOjpMVCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpL
ZXl3b3JkRjMyKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkdUKTsKKyAg
ICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkJyYWNlTGVmdCk7CisKKyAgICAvLyBy
ZXR1cm4gdmVjNDxmMzI+KDAuNCwgMC40LCAwLjgsIDEuMCk7CisgICAgKytsaW5lTnVtYmVyOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6S2V5d29yZFJldHVybik7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0lkZW50aWZpZXIoInZlYzQiKTsKKyAgICBjaGVja05leHRUb2tlbihX
R1NMOjpUb2tlblR5cGU6OkxUKTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6
OktleXdvcmRGMzIpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6R1QpOwor
ICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6UGFyZW5MZWZ0KTsKKyAgICBjaGVj
a05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxGbG9hdExpdGVyYWws
IDAuNCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpDb21tYSk7CisgICAg
Y2hlY2tOZXh0VG9rZW5Jc0xpdGVyYWwoV0dTTDo6VG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRl
cmFsLCAwLjQpOworICAgIGNoZWNrTmV4dFRva2VuKFdHU0w6OlRva2VuVHlwZTo6Q29tbWEpOwor
ICAgIGNoZWNrTmV4dFRva2VuSXNMaXRlcmFsKFdHU0w6OlRva2VuVHlwZTo6RGVjaW1hbEZsb2F0
TGl0ZXJhbCwgMC44KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OkNvbW1h
KTsKKyAgICBjaGVja05leHRUb2tlbklzTGl0ZXJhbChXR1NMOjpUb2tlblR5cGU6OkRlY2ltYWxG
bG9hdExpdGVyYWwsIDEuMCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9rZW5UeXBlOjpQ
YXJlblJpZ2h0KTsKKyAgICBjaGVja05leHRUb2tlbihXR1NMOjpUb2tlblR5cGU6OlNlbWljb2xv
bik7CisKKyAgICAvLyB9CisgICAgKytsaW5lTnVtYmVyOworICAgIGNoZWNrTmV4dFRva2VuKFdH
U0w6OlRva2VuVHlwZTo6QnJhY2VSaWdodCk7CisgICAgY2hlY2tOZXh0VG9rZW4oV0dTTDo6VG9r
ZW5UeXBlOjpFbmRPZkZpbGUpOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BV
L1dHU0xVbml0VGVzdHMvV0dTTFVuaXRUZXN0cy5tbSBiL1NvdXJjZS9XZWJHUFUvV0dTTFVuaXRU
ZXN0cy9XR1NMVW5pdFRlc3RzLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjA1
NGFjYmUwNjcuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0xVbml0VGVzdHMv
V0dTTFVuaXRUZXN0cy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIldHU0wuaCIKLQotI2ltcG9ydCA8WENUZXN0L1hDVGVzdC5oPgotI2ltcG9ydCA8
dmVjdG9yPgotI2ltcG9ydCA8d3RmL0RhdGFMb2cuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4K
LQotQGludGVyZmFjZSBXR1NMVW5pdFRlc3RzIDogWENUZXN0Q2FzZQotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBXR1NMVW5pdFRlc3RzCi0KLS0gKHZvaWQpdGVzdEV4YW1wbGUgewotICAgIGRh
dGFMb2coImFzZGZcbiIpOwotICAgIFZlY3RvcjxpbnQ+IHggeyAyLCAzLCB9OwotICAgIFZlY3Rv
cjxpbnQ+IHk7Ci0gICAgeS5hcHBlbmQoMik7Ci0gICAgeS5hcHBlbmQoMyk7Ci0gICAgWENUQXNz
ZXJ0RXF1YWwoeCwgeSk7Ci0gICAgV0dTTDo6c3RhdGljQ2hlY2soIiIsIHN0ZDo6bnVsbG9wdCk7
Ci19Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGQ5OWU1M2NmYzFlNy4uM2Y0MGM2MzhiZTgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcsNyArNyw3IEBACiAJ
b2JqZWN0cyA9IHsKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMUMwMjNE
M0YyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyog
V0dTTFVuaXRUZXN0cy5tbSAqLzsgfTsKKwkJMUMwMjNEM0YyNzQ0OTA3MDAwMURCNzM0IC8qIFdH
U0xMZXhlclRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1tICovOyB9
OwogCQkxQzAyM0Q0MDI3NDQ5MDcwMDAxREI3MzQgLyogbGlid2dzbC5hIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ3RjIyNzE2QjJDQzAwQTUy
NTREIC8qIGxpYndnc2wuYSAqLzsgfTsKIAkJMUMwMjNENEIyNzQ0OTVCOTAwMURCNzM0IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMDIzRDRBMjc0NDk1QjkwMDFEQjczNCAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CiAJCTFDMkNFREVFMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRhbC5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzJDRURFRDI3MUU4QTczMDBFREMxNkYgLyogTWV0YWwuZnJhbWV3b3JrICovOyB9OwpAQCAt
NDEsNiArNDEsMTEgQEAKIAkJMUNFQkQ3RjgyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRUJEN0Y3MjcxNkIz
NDQwMEE1MjU0RCAvKiBXR1NMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGlj
LCApOyB9OyB9OwogCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDgwMjI3MTZCRjgy
MDBBNTI1NEQgLyogV0dTTC5jcHAgKi87IH07CiAJCTFDRUJEODI2MjcxNkNBQ0MwMEE1MjU0RCAv
KiBsaWJ3Z3NsLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQ0VCRDdGMjI3MTZCMkNDMDBBNTI1NEQgLyogbGlid2dzbC5hICovOyB9OworCQkzMzhC
QjJDRTI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkNEMjdCNkI2MDIwMEUwNjZBQiAvKiBUb2tlbi5o
ICovOyB9OworCQkzMzhCQjJEMDI3QjZCNjFCMDBFMDY2QUIgLyogVG9rZW4uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyQ0YyN0I2QjYxQjAw
RTA2NkFCIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJMzM4QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8q
IFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzOEJCMkQxMjdCNkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi87IH07CisJCTMz
OEJCMkQ0MjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVy
LmggKi87IH07CisJCTMzOEJCMkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJENTI3QjZCNjg3
MDBFMDY2QUIgLyogTGV4ZXIuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC02Miw3
ICs2Nyw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkxQzAy
M0QzQzI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy54Y3Rlc3QgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuY2ZidW5kbGU7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdHU0xVbml0VGVzdHMueGN0ZXN0OyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyog
V0dTTFVuaXRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xVbml0VGVzdHMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMDIzRDNFMjc0NDkwNzAwMDFEQjczNCAv
KiBXR1NMTGV4ZXJUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdHU0xMZXhlclRlc3Rz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0NzI3NDQ5MTZEMDAxREI3
MzQgLyogV0dTTFVuaXRUZXN0cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXR1NMVW5pdFRlc3Rz
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzAyM0Q0QTI3NDQ5NUI5
MDAxREI3MzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTFDMkNFREVEMjcxRThBNzMwMEVEQzE2RiAvKiBNZXRhbC5mcmFtZXdvcmsgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1l
d29yazsgbmFtZSA9IE1ldGFsLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvTWV0YWwuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKQEAgLTEzNSw2
ICsxNDAsMTEgQEAKIAkJMUNFQkQ4MkIyNzE2Q0FGQjAwQTUyNTREIC8qIENvcmVGb3VuZGF0aW9u
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrOyBw
YXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcms7
IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkxQ0VCRDgyRDI3MTZDQjE2MDBBNTI1NEQgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3
b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29y
azsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CiAJCTFDRUJEODMwMjcxNkNCMzgwMEE1MjU0RCAv
KiBsaWJpY3Vjb3JlLnRiZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9ICJzb3VyY2Vjb2RlLnRleHQtYmFzZWQtZHlsaWItZGVmaW5pdGlvbiI7IG5hbWUg
PSBsaWJpY3Vjb3JlLnRiZDsgcGF0aCA9IHVzci9saWIvbGliaWN1Y29yZS50YmQ7IHNvdXJjZVRy
ZWUgPSBTREtST09UOyB9OworCQkzMzhCQjJDRDI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4
QkIyQ0YyN0I2QjYxQjAwRTA2NkFCIC8qIFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRv
a2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM4QkIyRDEyN0I2QjYzRjAw
RTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlU3Bhbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxl
UmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLwpAQCAtMTcwLDcgKzE4MCw3IEBACiAJCTFDMDIzRDNEMjc0NDkwNzAwMDFEQjcz
NCAvKiBXR1NMVW5pdFRlc3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQkxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cy5tbSAq
LywKKwkJCQkxQzAyM0QzRTI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi8s
CiAJCQkpOwogCQkJcGF0aCA9IFdHU0xVbml0VGVzdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMjYxLDggKzI3MSwxMyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUNFQkQ4MDcy
NzE2QzJDMDAwQTUyNTREIC8qIEFTVC5oICovLAogCQkJCTFDRUJEODA0MjcxNkJGQUIwMEE1MjU0
RCAvKiBjb25maWcuaCAqLywKLQkJCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5j
cHAgKi8sCisJCQkJMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi8sCisJCQkJ
MzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLywKKwkJCQkzMzhCQjJEMTI3
QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oICovLAorCQkJCTMzOEJCMkNEMjdCNkI2MDIw
MEUwNjZBQiAvKiBUb2tlbi5oICovLAorCQkJCTMzOEJCMkNGMjdCNkI2MUIwMEUwNjZBQiAvKiBU
b2tlbi5jcHAgKi8sCiAJCQkJMUNFQkQ3RjcyNzE2QjM0NDAwQTUyNTREIC8qIFdHU0wuaCAqLywK
KwkJCQkxQ0VCRDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IFdHU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzEyLDYgKzMyNyw5
IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkzMzhCQjJEMjI3QjZCNjNGMDBFMDY2QUIg
LyogU291cmNlU3Bhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzM4QkIyRDQyN0I2QjY2QzAwRTA2
NkFCIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzhCQjJDRTI3QjZCNjAyMDBFMDY2
QUIgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUJEN0Y4MjcxNkIzNDQwMEE1MjU0
RCAvKiBXR1NMLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTM4MSw3ICszOTksNiBAQAogCQkJaXNhID0gUEJYUHJv
amVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7CiAJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBh
cmFsbGVsID0gTk87Ci0JCQkJRGVmYXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9y
aWdpbmFsOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAxMzMwOwogCQkJCVRhcmdldEF0dHJpYnV0
ZXMgPSB7CiAJCQkJCTFDMDIzRDNCMjc0NDkwNzAwMDFEQjczNCA9IHsKQEAgLTQ1OSw3ICs0NzYs
NyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0JCQkJMUMwMjNEM0YyNzQ0OTA3MDAwMURCNzM0
IC8qIFdHU0xVbml0VGVzdHMubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzAyM0QzRjI3NDQ5MDcw
MDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ5Nyw3ICs1
MTQsOSBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMzM4QkIyRDYyN0I2QjY4NzAwRTA2
NkFCIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDRUJEODAzMjcxNkJGODIwMEE1
MjU0RCAvKiBXR1NMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMzOEJCMkQwMjdCNkI2MUIwMEUw
NjZBQiAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>