<?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>160681</bug_id>
          
          <creation_ts>2016-08-08 17:23:37 -0700</creation_ts>
          <short_desc>Implement WASM Parser and B3 IR generator</short_desc>
          <delta_ts>2016-08-15 14:36:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159775</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218644</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-08 17:23:37 -0700</bug_when>
    <thetext>Implement WASM Parser and B3 IR generator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218647</commentid>
    <comment_count>1</comment_count>
      <attachid>285616</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-08 17:24:14 -0700</bug_when>
    <thetext>Created attachment 285616
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219203</commentid>
    <comment_count>2</comment_count>
      <attachid>285787</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-10 17:13:10 -0700</bug_when>
    <thetext>Created attachment 285787
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219545</commentid>
    <comment_count>3</comment_count>
      <attachid>285898</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-11 22:49:31 -0700</bug_when>
    <thetext>Created attachment 285898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219546</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-11 22:50:49 -0700</bug_when>
    <thetext>Attachment 285898 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WASMFunctionParser.h:118:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219807</commentid>
    <comment_count>5</comment_count>
      <attachid>285898</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-12 17:40:31 -0700</bug_when>
    <thetext>Comment on attachment 285898
Patch

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

Quick comments:

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.h:50
&gt; +    Vector&lt;WASMFunctionInformation&gt; functionInformation() { return m_functions; }

Copying a vector can be quite expensive.

&quot;Vector&lt;WASMFunctionInformation&gt;&quot; -&gt; &quot;const Vector&lt;WASMFunctionInformation&gt;&amp;&quot;?

&gt; Source/JavaScriptCore/wasm/WASMParser.h:56
&gt; +    bool WARN_UNUSED_RETURN matchCharacter(char);
&gt; +    bool WARN_UNUSED_RETURN matchString(const char*);
&gt; +
&gt; +    bool WARN_UNUSED_RETURN parseVarUInt1(uint8_t&amp; result);
&gt; +    bool WARN_UNUSED_RETURN parseUInt7(uint8_t&amp; result);
&gt; +    bool WARN_UNUSED_RETURN parseUInt32(uint32_t&amp; result);
&gt; +    bool WARN_UNUSED_RETURN parseVarUInt32(uint32_t&amp; result) { return decodeUInt32(m_source.data(), m_sourceLength, m_offset, result); }
&gt; +
&gt; +
&gt; +    bool WARN_UNUSED_RETURN parseValueType(WASMValueType&amp; result);

Have you considered returning Optional&lt;type&gt; instead of having each parse function a bool parse(type&amp;)?

I have not yet checked the call sites to see if that would help...

&gt; Source/JavaScriptCore/wasm/WASMPlan.cpp:55
&gt; +    for (WASMFunctionInformation info : moduleParser.functionInformation()) {

const WASMFunctionInformation&amp; info?

&gt; Source/JavaScriptCore/wasm/WASMSections.cpp:56
&gt; +    // I guess we could do something better than linear search here but I doubt it matters.

Let&apos;s remove the comment.
We can use gperf here if needed.

&gt; Source/JavaScriptCore/wasm/WASMSections.h:39
&gt; +macro(FunctionTypes, &quot;type&quot;) \
&gt; +macro(Signatures, &quot;function&quot;) \
&gt; +macro(Definitions, &quot;code&quot;) \
&gt; +macro(End, &quot;end&quot;)

Indent them?

&gt; Source/WTF/wtf/LEBDecoder.h:37
&gt; +inline bool WARN_UNUSED_RETURN decodeUInt32(const uint8_t* bytes, const size_t&amp; length, size_t&amp; offset, uint32_t&amp; result)

const size_t&amp; -&gt; size_t (since size_t is a single register already).

&gt; Source/WTF/wtf/LEBDecoder.h:56
&gt; -inline bool WARN_UNUSED_RETURN decodeInt32(const Vector&lt;uint8_t&gt;&amp; bytes, size_t&amp; offset, int32_t&amp; result)
&gt; +inline bool WARN_UNUSED_RETURN decodeInt32(const uint8_t* bytes, const size_t&amp; length, size_t&amp; offset, int32_t&amp; result)

const size_t&amp; -&gt; size_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219836</commentid>
    <comment_count>6</comment_count>
      <attachid>285898</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-12 19:14:14 -0700</bug_when>
    <thetext>Comment on attachment 285898
Patch

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

Some more comments:

&gt; Source/JavaScriptCore/ChangeLog:50
&gt; +        * wasm/WASMB3ParserContext.cpp: Added.

WASMB3ParserContext.h/WASMB3ParserContext.cpp are misnamed IMHO.
The ParserContext is an implementation detail.

&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:85
&gt; +
&gt; +
&gt; +

Empty lines here.

&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:90
&gt; +        result = m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, Add, Origin(), left, right);

It would be easy to check the input type here.
You can return false if left-&gt;type() or right-&gt;type() are not Int32.

&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:115
&gt; +    m_controlStack.append(std::make_pair(m_proc.addBlock(), Nullopt));

Is it correct to create a new basic block here?

If I understand correctly, you cannot jump to the beginning of a block, you can only jump out of a block. The block split point would be every branch and the end of the block if there are any branch.

Say we have:
    foo;
    block {
        bar;
    }
    baz;
That&apos;s one basic block.

Now:
    foo;
    block {
       br_if
       bar
    }
    baz;
has basic blocks at foo, bar, and baz.

I suspect it works now in test because m_currentBlock is not changed and the values in the blocks are added to block#0.

&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:133
&gt; +bool B3ParserContext::addReturn(Vector&lt;ExpressionType, 1&gt;&amp;&amp; returnValues)

You could take a Vector&amp; as argument to avoid copying the inline buffer.

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:41
&gt; +    typedef typename Context::BlockType BlockType;

BlockType -&gt; BasicBlockType?

&quot;Block&quot; is an ambiguous concept that means different things at different places.
BasicBlock has a precise definition.

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:62
&gt; +WASMFunctionParser&lt;Context&gt;::WASMFunctionParser(Context&amp; context, const Vector&lt;uint8_t&gt;&amp; sourceBuffer, WASMFunctionInformation info)

const WASMFunctionInformation&amp;
?

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:67
&gt; +    ASSERT(info.end &lt;= sourceBuffer.size());
&gt; +    ASSERT(info.start &lt; info.end);

This looks like condition that could be always enforced by WASMParser.

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:141
&gt; +    case WASMOpType::Block: {
&gt; +        if (!m_context.addBlock())
&gt; +            return false;
&gt; +        return parseBlock();
&gt; +    }

No need for brackets here.

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:143
&gt; +        case WASMOpType::Return: {

The indentation of this case is wrong.

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:147
&gt; +            ASSERT(returnCount &lt;= 1);

I think it&apos;s fine to assume parseVarUInt1() works.
You can even have it return a bool if you want the compiler to enforce 0/1 values.

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:157
&gt; +    case WASMOpType::End: {
&gt; +        return m_context.endBlock(m_expressionStack);
&gt; +    }

No need for brackets here.

&gt; Source/JavaScriptCore/wasm/WASMParser.h:71
&gt; +ALWAYS_INLINE bool WASMParser::matchCharacter(char c)

I find the name a bit odd because you increment the offset.
Would it be better to name this &quot;consumeCharacter()&quot; or something similar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219850</commentid>
    <comment_count>7</comment_count>
      <attachid>285898</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-12 21:06:05 -0700</bug_when>
    <thetext>Comment on attachment 285898
Patch

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

Ok, I think I have been through everything now.
Can you check my comments about basic blocks earlier? That&apos;s the main doubt I have.

&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:150
&gt; +    Vector&lt;Variable*&gt; result;

+ result.reserveInitialCapacity(source.size(());

&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:182
&gt; +BasicBlock*&amp; B3ParserContext::blockForControlLevel(unsigned level)

BasicBlock*&amp; -&gt; BasicBlock*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220036</commentid>
    <comment_count>8</comment_count>
      <attachid>286058</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-15 09:24:58 -0700</bug_when>
    <thetext>Created attachment 286058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220037</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 09:27:46 -0700</bug_when>
    <thetext>Attachment 286058 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WASMFunctionParser.h:114:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220039</commentid>
    <comment_count>10</comment_count>
      <attachid>286059</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-15 09:29:35 -0700</bug_when>
    <thetext>Created attachment 286059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220040</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 09:32:31 -0700</bug_when>
    <thetext>Attachment 286059 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WASMFunctionParser.h:114:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220046</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-15 09:44:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:115
&gt; &gt; +    m_controlStack.append(std::make_pair(m_proc.addBlock(), Nullopt));
&gt; 
&gt; Is it correct to create a new basic block here?
&gt; 
&gt; If I understand correctly, you cannot jump to the beginning of a block, you
&gt; can only jump out of a block. The block split point would be every branch
&gt; and the end of the block if there are any branch.
&gt; 
&gt; Say we have:
&gt;     foo;
&gt;     block {
&gt;         bar;
&gt;     }
&gt;     baz;
&gt; That&apos;s one basic block.
&gt; 
&gt; Now:
&gt;     foo;
&gt;     block {
&gt;        br_if
&gt;        bar
&gt;     }
&gt;     baz;
&gt; has basic blocks at foo, bar, and baz.
&gt; 
&gt; I suspect it works now in test because m_currentBlock is not changed and the
&gt; values in the blocks are added to block#0.
&gt; 

The current code will create two basic blocks in either case. We create a root basic block for the function then for each `block` opcode we create a continuation basic block for a potential branch (which we don&apos;t support yet). In the future, we should create blocks lazily but for now I&apos;m not too worried.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220050</commentid>
    <comment_count>13</comment_count>
      <attachid>285898</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-15 09:48:58 -0700</bug_when>
    <thetext>Comment on attachment 285898
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:90
&gt;&gt; +        result = m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, Add, Origin(), left, right);
&gt; 
&gt; It would be easy to check the input type here.
&gt; You can return false if left-&gt;type() or right-&gt;type() are not Int32.

In theory this should already be validated but I&apos;ll add an assert.

&gt;&gt; Source/JavaScriptCore/wasm/WASMB3ParserContext.cpp:150
&gt;&gt; +    Vector&lt;Variable*&gt; result;
&gt; 
&gt; + result.reserveInitialCapacity(source.size(());

fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.h:141
&gt;&gt; +    }
&gt; 
&gt; No need for brackets here.

It seems like WebKit style should favor having the braces; effectively, each case is it&apos;s own control clause. I also personally prefer it.

&gt;&gt; Source/JavaScriptCore/wasm/WASMParser.h:56
&gt;&gt; +    bool WARN_UNUSED_RETURN parseValueType(WASMValueType&amp; result);
&gt; 
&gt; Have you considered returning Optional&lt;type&gt; instead of having each parse function a bool parse(type&amp;)?
&gt; 
&gt; I have not yet checked the call sites to see if that would help...

This is something that ggaren and I talked about offline previously. My we ended up going with the current system because it adds a compile time check that the failure case has been managed. A runtime check might be acceptable but it doesn&apos;t do a good job when things are decoded only on some control flow paths.

&gt;&gt; Source/JavaScriptCore/wasm/WASMParser.h:71
&gt;&gt; +ALWAYS_INLINE bool WASMParser::matchCharacter(char c)
&gt; 
&gt; I find the name a bit odd because you increment the offset.
&gt; Would it be better to name this &quot;consumeCharacter()&quot; or something similar?

switched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220141</commentid>
    <comment_count>14</comment_count>
      <attachid>286059</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-15 13:48:55 -0700</bug_when>
    <thetext>Comment on attachment 286059
Patch

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

LGTM. Let&apos;s do it.

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:3381
&gt; +                53F40E921D5A4AB30099A1B6 /* WASMB3IRGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WASMB3IRGenerator.h; sourceTree = &quot;&lt;group&gt;&quot;; };

It&apos;s bizarre. XCode indented 53F40E921D5A4AB30099A1B6 in all places.

&gt; Source/JavaScriptCore/wasm/WASMB3IRGenerator.cpp:127
&gt; +    m_currentBlock = m_controlStack.takeLast().first;

Shouldn&apos;t you link the m_currentBlock to the continuation through a jump?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220150</commentid>
    <comment_count>15</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-15 14:17:27 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; Source/JavaScriptCore/wasm/WASMB3IRGenerator.cpp:127
&gt; &gt; +    m_currentBlock = m_controlStack.takeLast().first;
&gt; 
&gt; Shouldn&apos;t you link the m_currentBlock to the continuation through a jump?

I&apos;ll fix that issue when we add real control flow. There are a couple of other issues that need to be handled with control flow as well. Off the top of my head, we need to parse but not validate everything in a block after a return. We also need to upgrade the control stack to handle loops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220159</commentid>
    <comment_count>16</comment_count>
      <attachid>286059</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 14:36:41 -0700</bug_when>
    <thetext>Comment on attachment 286059
Patch

Clearing flags on attachment: 286059

Committed r204484: &lt;http://trac.webkit.org/changeset/204484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220160</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 14:36:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285616</attachid>
            <date>2016-08-08 17:24:14 -0700</date>
            <delta_ts>2016-08-10 17:13:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-160681-20160808172242.patch</filename>
            <type>text/plain</type>
            <size>31172</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWY3YzM2ZmQzZWE2MjZkOGNkOGI2MzRmYWU0NmNiMDMwMTQ4NTAzLi5lYTlhZDQ3MDE5ZWYxMDdl
MmQ1NTFiMWIwNDA3MGZkMGJkMTdiYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNi0wOC0wOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV0FTTSBQYXJzZXIgYW5kIEIzIElSIGdlbmVyYXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjgx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdhc20vV0FT
TUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgor
ICAgICAgICAoV0FTTVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKToKKyAgICAgICAg
KFdBU01QYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKFdBU01QYXJz
ZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoV0FTTVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKToK
KyAgICAgICAgKiB3YXNtL1dBU01PcHMuaDogQWRkZWQuCisgICAgICAgICogd2FzbS9XQVNNUGFy
c2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyKToKKyAgICAgICAg
KEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6bWF0Y2hDaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpX
QVNNOjpXQVNNUGFyc2VyOjptYXRjaFN0cmluZyk6CisgICAgICAgIChKU0M6OldBU006OldBU01Q
YXJzZXI6OnBhcnNlVUludDMyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6cGFy
c2VWYWx1ZVR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyOjpwYXJzZSk6Cisg
ICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcyk6CisgICAg
ICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKToKKyAg
ICAgICAgKiB3YXNtL1dBU01TZWN0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoV0FTTVNlY3Rp
b246Omxvb2t1cCk6CisgICAgICAgICogd2FzbS9XQVNNU2VjdGlvbnMuaDogQWRkZWQuCisgICAg
ICAgIChXQVNNU2VjdGlvbjo6dmFsaWRhdGVPcmRlcik6CisKIDIwMTYtMDgtMDggIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY2xlYW4gdXAg
cHJlZml4aW5nIG9mIEF1dG9tYXRpb24gcHJvdG9jb2wgZ2VuZXJhdGVkIGZpbGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYy
NmIyZWJmZmUyY2FkYTM3Y2NkYWUzY2VkZjZlZmM4NTNiNjE2YjEuLmMyMWIwZmQ2ZTFkNDY4M2M4
NzNhYjUwYTM1M2I5NzExMTBjNjk0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYtMDgtMDgg
IEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IFdBU00gUGFyc2VyIGFuZCBCMyBJUiBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDY4MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisKIDIw
MTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBXVEYgbmVl
ZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGUzMGRjOWU0ZDAyMDM2MjBiMTRjYTIyOGI0ZWIyYmI0ZmRlY2VmMGQuLjMwZmU5MjNhY2Uy
MTBhODBjZmY0MDJjNjdjOWUxOGJhYjA1NGIxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMTg3LDYgKzExODcsMTIgQEAKIAkJNTM5RUIwN0ExRDU1NjA3MDAwQzgyRUY3IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTUzOUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0
V0FTTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdBU00uY3BwICovOyB9OwogCQk1MzlGQjhC
QTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBK
U0FycmF5SW5saW5lcy5oICovOyB9OworCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV0FT
TVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggKi87IH07CisJCTUz
RjQwRTg3MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODYxRDU4RjlENjAwOTlBMUI2
IC8qIFdBU01TZWN0aW9ucy5jcHAgKi87IH07CisJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAv
KiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJz
ZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdBU01QYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1
OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi87IH07CisJCTUzRjQwRThGMUQ1OTAyODIw
MDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNN
QjNQYXJzZXJDb250ZXh0LmNwcCAqLzsgfTsKKwkJNTNGNDBFOTExRDU5MDMwMjAwOTlBMUI2IC8q
IFdBU01PcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi87IH07CiAJCTUzRjZCRjZE
MUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMz
RjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMTFD
RjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKQEAgLTMz
NTksNiArMzM2NSwxMiBAQAogCQk1MzlFQjA4MDFENTU2MDcwMDBDODJFRjcgLyogdGVzdFdBU00g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RXQVNN
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
MjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0FTTVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTg2
MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0FTTVNlY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRnVuY3Rpb25QYXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8q
IFdBU01QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVBhcnNl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUEx
QjYgLyogV0FTTUIzUGFyc2VyQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXQVNNQjNQYXJzZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFs
RnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTI1LDcgKzU1
MzcsMTMgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAv
KiBKU1dBU01Nb2R1bGUuY3BwICovLAogCQkJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBK
U1dBU01Nb2R1bGUuaCAqLywKKwkJCQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9w
cy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi8s
CisJCQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM1BhcnNlckNvbnRleHQuY3Bw
ICovLAorCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIu
aCAqLywKKwkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oICovLAor
CQkJCTUzRjQwRTg2MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3BwICovLAorCQkJ
CTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC03Mjc1LDYgKzcy
OTMsNyBAQAogCQkJCUJDMThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlckNhbGxGcmFt
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVn
Z2VyRXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTA4NjIxMTgyQjdBMDQwMEY2
RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTg1
MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCURD
OUEwQzFGMUQyRDlDQjEwMDg1MTI0RSAvKiBCM0Nhc2VDb2xsZWN0aW9uSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdD
LmggaW4gSGVhZGVycyAqLywKQEAgLTc0MTcsNiArNzQzNiw3IEBACiAJCQkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2
IC8qIFdBU01QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDBFNEE4MUM0OTdGNzQwMEE1
NzdGQSAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVF
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLApAQCAtNzc4Miw2ICs3ODAyLDcgQEAKIAkJCQkwRjJCNjZGNjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBF
OEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2Jq
ZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBD
OTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAg
LTc4NDEsNiArNzg2Miw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxMjIwMjcxQkU3RjU4QzAwMzlF
NkYyIC8qIEpJVEFkZEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdG
MzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04OTIxLDYgKzg5NDMsNyBAQAogCQkJCTBGQkUwRjcyMTZDMURCMDMw
MDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjE4MzI5MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJD
Q2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNGNDBFODcxRDU4RjlE
NjAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1
OTE0RUY5MEE2MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyRkM3NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMzM4RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC05NTA5LDYgKzk1MzIsNyBAQAogCQkJCUUxOEUzQTU5MERGOTI3
OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTU5MzJBNzE4M0M1QTI2
MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMTg3QTAx
MUJGQkU1NUUwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTNGNDBFOEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM1BhcnNlckNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMjY3MThCQTQxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNF
MjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1
ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaAppbmRleCBiMzYzNDEwNTY3M2FiZDU4ODc1YjQ2
MTJjOWUzZjZhNmExNzJhOWNiLi43NTFmNzUxOTMwZDVjNzNlYWQ0ZmJmZjJiZDBiYTYwYjYyMGJi
YWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBAIC01Miw4ICs1
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0Z1bmN0aW9uOwogCi1lbnVtIGNsYXNz
IFdBU01UeXBlIDogdWludDhfdCB7CitlbnVtIGNsYXNzIFdBU01WYWx1ZVR5cGUgOiB1aW50OF90
IHsKICAgICBJMzIsCisgICAgSTY0LAogICAgIEYzMiwKICAgICBGNjQsCiAgICAgTnVtYmVyT2ZU
eXBlcwpAQCAtNjEsNiArNjIsNyBAQCBlbnVtIGNsYXNzIFdBU01UeXBlIDogdWludDhfdCB7CiAK
IGVudW0gY2xhc3MgV0FTTUV4cHJlc3Npb25UeXBlIDogdWludDhfdCB7CiAgICAgSTMyLAorICAg
IEk2NCwKICAgICBGMzIsCiAgICAgRjY0LAogICAgIFZvaWQsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZDBmZTk3MDAw
YTQyNjkxYjg3NDMxNWIwYWYzZDY5Yzg2MTBiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaApAQCAtMCwwICsxLDEyMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV0FTTVBhcnNlci5o
IgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBXQVNNUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uRGVmaW5pdGlvbnMoKQoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFy
c2VVSW50MzIoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRp
b24oaSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIFdBU01QYXJzZXI6
OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKHVpbnQzMl90IGluZGV4KQoreworICAgIG1fY29udGV4
dC5zdGFydEZ1bmN0aW9uKGluZGV4KTsKKyAgICB1aW50MzJfdCBmdW5jdGlvblNpemU7CisgICAg
aWYgKCFwYXJzZVVJbnQzMihmdW5jdGlvblNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1aW50MzJfdCBleHBlY3RlZEVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworCisg
ICAgdWludDMyX3QgbG9jYWxDb3VudDsKKyAgICBpZiAoIXBhcnNlVUludDMyKGxvY2FsQ291bnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bG9jYWxDb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mTG9jYWxzV2l0aFR5
cGU7CisgICAgICAgIGlmICghcGFyc2VVSW50MzIobG9jYWxDb3VudCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FTTVZhbHVlVHlwZSB0eXBlT2ZMb2NhbDsKKyAgICAg
ICAgaWYgKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2NhbCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgbV9jb250ZXh0LmFkZExvY2FsKHR5cGVPZkxvY2FsLCBudW1iZXJP
ZkxvY2Fsc1dpdGhUeXBlKTsKKyAgICB9CisKKyAgICBpZiAoIXBhcnNlQmxvY2soKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGV4cGVjdGVkU2l6ZSAhPSBtX29mZnNldCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jb250ZXh0LmVuZEZ1bmN0aW9uKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIFdBU01QYXJzZXI6OnBhcnNlQmxvY2so
KQoreworICAgIHVpbnQ4X3Qgb3A7CisgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgd2hpbGUgKG9wICE9IFdBU01PcFR5cGU6OkVuZCkKKworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBXQVNN
UGFyc2VyOjpwYXJzZUV4cHJlc3Npb24oV0FTTU9wVHlwZSBvcCkKK3sKKyAgICBXQVNNUGFyc2Vy
U3RhdGU8dWludDhfdD4gb3BTdGF0ZSA9IHBhcnNlVUludDcoKTsKKyAgICB1aW50OF90IG9wOwor
ICAgIGlmICghb3BTdGF0ZS52YWx1ZShvcCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN3aXRjaCAob3ApIHsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgdmFsdWUpIGNhc2UgV0FT
TU9wVHlwZTo6IyNuYW1lOgorICAgIENSRUFURV9DQVNFKEZPUl9FQUNIX1dBU01fQklOQVJZX09Q
KSB7CisjdW5kZWYgQ1JFQVRFX0NBU0UKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgbGVmdCA9IG1f
ZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJpZ2h0
ID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUg
cmVzdWx0OworICAgICAgICBpZiAoIW1fY29udGV4dC5iaW5hcnlPcChvcCwgbGVmdCwgcmlnaHQs
IHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFdBU01PcFR5cGU6OkkzMkNvbnN0OiB7CisgICAgICAgIGludDMyX3QgY29uc3RhbnQ7CisgICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIoY29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0
YW50KFdBU01WYWx1ZVR5cGU6OkkzMiwgY29uc3RhbnQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlOTY4
ZWY0N2Q4Mjc4OWQyNDlkMTQ4ZDk0ZDdiMGRkNThiMmNkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNT3BzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TUEVDSUFMX09QKG1hY3JvKSBcCisg
ICAgbWFjcm8oSTMyQ29uc3QsIDB4MTApCisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9M
X0ZMT1dfT1AobWFjcm8pIFwKKyAgICBtYWNybyhFbmQsIDB4MGYpCisKKyNkZWZpbmUgRk9SX0VB
Q0hfV0FTTV9VTkFSWV9PUChtYWNybykKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9P
UChtYWNybykgXAorICAgIG1hY3JvKEkzMkFkZCwgMHg0MCkKKworI2RlZmluZSBGT1JfRUFDSF9X
QVNNX09QKG1hY3JvKSBcCisgICAgRk9SX0VBQ0hfV0FTTV9TUEVDSUFMX09QKG1hY3JvKSBcCisg
ICAgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX09QKG1hY3JvKSBcCisgICAgRk9SX0VBQ0hfV0FTTV9V
TkFSWV9PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKQorCisj
ZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkKSBuYW1lID0gaWQsCisKK2VudW0gY2xh
c3MgV0FTTU9wVHlwZSA6IHVpbnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fT1AoQ1JFQVRFX0VO
VU1fVkFMVUUpCit9CisKK2VudW0gY2xhc3MgV0FTTUJpbmFyeU9wVHlwZSA6IHVpbnQ4X3Qgewor
ICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9FTlVNX1ZBTFVFKQorfQorCisjdW5k
ZWYgQ1JFQVRFX0VOVU1fVkFMVUUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTlkZjkwNGU3
NzcwZmU2ZWM5MzQ4ZGQ4ODFhMDZkNjViYmY2NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBhcnNlci5oCkBAIC0wLDAgKzEsMjYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIldBU01QYXJzZXJTdGF0ZS5oIgorI2lu
Y2x1ZGUgIldBU01TZWN0aW9ucy5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4VmFyMzJTaXplID0gNTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KKw5jbGFzcyBX
QVNNUGFyc2VyIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKKworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvblR5cGUgRXhw
cmVzc2lvblR5cGU7CisKKyAgICBXQVNNUGFyc2VyKENvbnRleHQmJiBjb250ZXh0LCBWZWN0b3I8
dWludDhfdD4gc291cmNlQnVmZmVyKTsKKyAgICB7CisgICAgICAgIG1fY29udGV4dCA9IGNvbnRl
eHQ7CisgICAgICAgIG1fc291cmNlID0gc291cmNlQnVmZmVyOworICAgIH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXQVNNTW9kdWxlPiBwYXJzZSgpOworICAgIGJvb2wgcGFyc2VGdW5jdGlvbigp
OworCitwcml2YXRlOgorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIG1hdGNoQ2hhcmFjdGVy
KGNoYXIpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIG1hdGNoU3RyaW5nKGNvbnN0IGNo
YXIqKTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDMyKHVpbnQzMl90
JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDMyKHVp
bnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDco
dWludDhfdCYgcmVzdWx0KTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFs
dWVUeXBlKFdBU01WYWx1ZVR5cGUmIHJlc3VsdCk7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUZ1bmN0aW9uVHlwZXMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlRnVuY3Rpb25EZWZpbml0aW9ucygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKHVpbnQzMl90IG51bWJlcik7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VCbG9jaygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlRXhwcmVzc2lvbigpOworCisgICAgdm9pZCBzaGlmdCgpOworCisgICAgU3RyaW5nIG1fZXJy
b3I7CisgICAgQ29udGV4dCBtX2NvbnRleHQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fc291cmNl
OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgMCB9OworICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4gbV9leHByZXNzaW9uU3RhY2s7Cit9CisKKworV0FTTVBhcnNlcihDb250ZXh0JiYgY29udGV4
dCwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZUJ1ZmZlcikKK3sKKyAgICBtX2NvbnRleHQgPSBjb250
ZXh0OworICAgIG1fc291cmNlID0gc291cmNlQnVmZmVyOworfQorCisvLyBUT0RPOiBoYW5kbGUg
bV9vZmZzZXQgPj0gbV9zb3VyY2UubGVuZ3RoKCkuCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0
PgorYm9vbCBXQVNNUGFyc2VyOjptYXRjaENoYXJhY3RlcihjaGFyIGMpCit7CisgICAgaWYgKG1f
b2Zmc2V0ID49IG1fc291cmNlLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGMgPT0gbV9zb3VyY2VbbV9vZmZzZXRdKSB7CisgICAgICAgIHNoaWZ0KCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnRleHQ+Citib29sIFdBU01QYXJzZXI6Om1hdGNoU3RyaW5nKGNvbnN0IGNoYXIq
IHN0cikKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OworICAgIGZvciAoaSA9IDA7
IHN0cltpXSAhPSAwOyBpKyspIHsKKyAgICAgICAgaWYgKCFtYXRjaENoYXJhY3RlcihzdHJbaV0p
KSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb250ZXh0PgorYm9vbCBXQVNNUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYg
cmVzdWx0KQoreworICAgIGlmIChtX29mZnNldCArIDQgPj0gbV9zb3VyY2UubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSAqc3RhdGljX2Nhc3Q8dWludDMyX3Qq
PihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7CisgICAgbV9vZmZzZXQgKz0gNDsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wgV0FTTVBh
cnNlcjo6cGFyc2VWYWx1ZVR5cGUoV0FTTVZhbHVlVHlwZSYgcmVzdWx0KQoreworICAgIGlmICht
X29mZnNldCA+PSBtX3NvdXJjZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHVpbnQ4X3QgdmFsdWUgPSBtX3NvdXJjZVttX29mZnNldF07CisgICAgaWYgKHZhbHVlID49IFdB
U01WYWx1ZVR5cGU6Ok51bWJlck9mVHlwZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXN1bHQgPSB2YWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK3N0ZDo6dW5p
cXVlX3B0cjx2b2lkKj4gV0FTTVBhcnNlcjo6cGFyc2UoKQoreworICAgIGlmIChtX3NvdXJjZS5s
ZW5ndGgoKSA8IDgpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbWF0Y2hDaGFy
YWN0ZXIoMCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbWF0Y2hTdHJpbmco
ImFzbSIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNraXAgdGhlIHZlcnNp
b24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAg
ICBpZiAocGFyc2VVSW50MzIoKSAhPSBtYWdpY051bWJlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBXQVNNU2VjdGlvbnM6OlNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0gV0FTTVNl
Y3Rpb25zOjpTZWN0aW9uOjpVbmtub3duOworICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNl
Lmxlbmd0aCgpKSB7CisgICAgICAgIHVpbnQzMl90IHNlY3Rpb25OYW1lTGVuZ3RoOworICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0
aGUgc2VjdGlvbidzIHNpemUuCisgICAgICAgIGlmIChtX29mZnNldCArIHNlY3Rpb25OYW1lTGVu
Z3RoICsgbWF4VmFyMzJTaXplID49IG1fc291cmNlLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgV0FTTVNlY3Rpb25zOjpTZWN0aW9uIHNlY3Rpb24gPSBX
QVNNU2VjdGlvbnM6Omxvb2t1cCgmKG1fc291cmNlW21fb2Zmc2V0XSksIGxlbmd0aCk7CisgICAg
ICAgIGlmICghV0FTTVNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2Vj
dGlvbikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICB1aW50MzJfdCBz
ZWN0aW9uTGVuZ3RoOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQgZW5kID0g
bV9vZmZzZXQgKyBzZWN0aW9uTGVuZ3RoOworCisgICAgICAgIHN3aXRjaCAoc2VjdGlvbikgewor
ICAgICAgICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OkVuZDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsgLy8gVE9ETzogcmV0dXJuIHRoZSBtb2R1bGUuCisgICAgICAg
ICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6RnVuY3Rpb25UeXBlczogeworICAgICAg
ICAgICAgICAgIHBhcnNlRnVuY3Rpb25UeXBlcygpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6
U2lnbmF0dXJlczogeworICAgICAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
c2UgV0FTTVNlY3Rpb25zOjpTZWN0aW9uOjpEZWZpbml0aW9uczogeworICAgICAgICAgICAgICAg
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6VW5r
bm93bjogeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5nLiIpOworICAgICAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW5kICE9IG1fb2Zmc2V0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgfQorCisgICAgLy8gVE9ETworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBXQVNNUGFyc2VyOjpwYXJzZUZ1bmN0aW9uVHlw
ZXMoKQoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICB1aW50OF90IHR5cGU7CisgICAgICAgIGlmICghcGFy
c2VVSW50Nyh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHR5
cGUgIT0gMHg0MCkgLy8gRnVuY3Rpb24gdHlwZSBjb25zdGFudC4KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKKyAgICAgICAgaWYgKCFw
YXJzZVVJbnQzMihhcmd1bWVudENvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgVmVjdG9yPFdBU01UeXBlPiBhcmd1bWVudFR5cGVzOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXBh
cnNlVUludDcodHlwZSkgfHwgdHlwZSA+PSBXQVNNVHlwZTo6TnVtYmVyT2ZUeXBlcykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVu
ZCh0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBhcnNlVUludDcodHlwZSkgfHwgdHlw
ZSA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdBU01GdW5jdGlvblJl
dHVyblR5cGUgcmV0dXJuVHlwZTsKKyAgICAgICAgaWYgKHR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICghcGFyc2VWYWx1ZVR5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHR5cGU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IFdBU01GdW5jdGlvblJldHVyblR5cGU6OlZvaWQ7CisgICAgICAgIAor
ICAgICAgICBtX2NvbnRleHQuYWRkRnVuY3Rpb25UeXBlKGFyZ3VtZW50VHlwZXMsIHJldHVyblR5
cGUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29u
dGV4dD4KK2Jvb2wgV0FTTVBhcnNlcjo6cGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKQoreworICAg
IHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMih0eXBlTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgbV9jb250ZXh0LmFkZEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVOdW1iZXIpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01TZWN0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2Vj
dGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwZjQ2MmNiOTc0OWEwODNlMmFjODU0MzIyNmU3ZWZiZTM1
YzAwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
U2VjdGlvbnMuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0FTTVNl
Y3Rpb25zLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK3N0cnVjdCBTZWN0aW9uRGF0
YSB7CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIG5hbWU7Cit9OworCitz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2VjdGlvbkRhdGFMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oV0FTTVNlY3Rpb246OlNlY3Rpb246OlVua25vd24pOworc3RhdGljIGNvbnN0IFNlY3Rp
b25EYXRhIHNlY3Rpb25EYXRhW3NlY3Rpb25EYXRhTGVuZ3RoXSB7CisjZGVmaW5lIENSRUFURV9T
RUNUSU9OX0RBVEEobmFtZSwgc3RyKSB7IHNpemVvZihzdHIpIC0gMSwgc3RyIH0sCisgICAgRk9S
X0VBQ0hfV0FTTV9TRUNUSU9OX1RZUEUoQ1JFQVRFX1NFQ1RJT05fREFUQSkKKyN1bmRlZiBDUkVB
VEVfU0VDVElPTl9EQVRBCit9OworCitXQVNNU2VjdGlvbjo6U2VjdGlvbiBXQVNNU2VjdGlvbjo6
bG9va3VwKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBJIGd1
ZXNzIHdlIGNvdWxkIGRvIHNvbWV0aGluZyBiZXR0ZXIgdGhhbiBsaW5lYXIgc2VhcmNoIGhlcmUg
YnV0IEkgZG91YnQgaXQgbWF0dGVycy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Vj
dGlvbkRhdGFMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoc2VjdGlvbkRhdGFbaV0ubGVuZ3Ro
ICE9IGxlbmd0aCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobWVtY21wKG5h
bWUsIHNlY3Rpb25EYXRhW2ldLm5hbWUsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0FTTVNlY3Rpb246OlNlY3Rpb24+KGkpOworICAgIH0KKyAgICByZXR1cm4gV0FT
TVNlY3Rpb246OlNlY3Rpb246OlVua25vd247Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2VjdGlv
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJjMWYzYzVjNWI2M2QyMWYzNWRiZDE0OTNjMzI5YzJjMzExNTIwOGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2VjdGlvbnMuaApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKy8vIFRoZXNlIHNob3Vs
ZCBiZSBpbiB0aGUgb3JkZXIgdGhhdCB3ZSBleHBlY3QgdGhlbSB0byBiZSBpbiB0aGUgYmluYXJ5
LgorI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NFQ1RJT05fVFlQRShtYWNybykgXAorbWFjcm8oRnVu
Y3Rpb25UeXBlcywgInR5cGUiKSBcCittYWNybyhTaWduYXR1cmVzLCAiZnVuY3Rpb24iKSBcCitt
YWNybyhEZWZpbml0aW9ucywgImNvZGUiKSBcCittYWNybyhFbmQsICJlbmQiKQorCitzdHJ1Y3Qg
V0FTTVNlY3Rpb24geworICAgIGVudW0gY2xhc3MgU2VjdGlvbiB7CisjZGVmaW5lIENSRUFURV9T
RUNUSU9OX0VOVU0obmFtZSwgc3RyKSBuYW1lLAorICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJ
T05fVFlQRShDUkVBVEVfU0VDVElPTl9FTlVNKQorI3VuZGVmIENSRUFURV9TRUNUSU9OX0VOVU0K
KyAgICAgICAgVW5rbm93bgorICAgIH07CisgICAgc3RhdGljIFNlY3Rpb24gbG9va3VwKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCk7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9u
IHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCisgICAgeworICAgICAgICAvLyBUaGlzIGFsbG93cyB1
bmtub3duIHNlY3Rpb25zIGFmdGVyIEVuZCwgd2hpY2ggSSBkb3VidCB3aWxsIGV2ZXIgYmUgc3Vw
cG9ydGVkIGJ1dAorICAgICAgICAvLyB0aGVyZSBpcyBubyByZWFzb24gdG8gcG90ZW50aWFsbHkg
YnJlYWsgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuCisgICAgICAgIGlmIChwcmV2aW91cyA9PSBT
ZWN0aW9uOjpVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBwcmV2aW91cyA8IG5leHQ7CisgICAgfQorfTsKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmluZGV4IDY3OTAzYjhjYzI4MjY4YmRmY2E2ZTAy
MDFmMmM3NjA2MjhjYTEwNWEuLjM3M2EyZDUzMThmODE0MTQxNjQ0NWFhODdmZjBmMTBjODYxZjY2
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKKysrIGIvU291
cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaApAQCAtMjIzLDcgKzIyMyw3IEBAIHRoZSBwdWJs
aWMgaU9TIFNESy4gV2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBGZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZyBmaWxlCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJBU1NFTUJM
WSkKLSNkZWZpbmUgRU5BQkxFX1dFQkFTU0VNQkxZIDAKKyNkZWZpbmUgRU5BQkxFX1dFQkFTU0VN
QkxZIDEKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX1dFQl9BUkNISVZFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285787</attachid>
            <date>2016-08-10 17:13:10 -0700</date>
            <delta_ts>2016-08-11 22:49:27 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-160681-20160810171134.patch</filename>
            <type>text/plain</type>
            <size>55556</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWY3YzM2ZmQzZWE2MjZkOGNkOGI2MzRmYWU0NmNiMDMwMTQ4NTAzLi5lYTlhZDQ3MDE5ZWYxMDdl
MmQ1NTFiMWIwNDA3MGZkMGJkMTdiYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNi0wOC0wOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV0FTTSBQYXJzZXIgYW5kIEIzIElSIGdlbmVyYXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjgx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdhc20vV0FT
TUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgor
ICAgICAgICAoV0FTTVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKToKKyAgICAgICAg
KFdBU01QYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKFdBU01QYXJz
ZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoV0FTTVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKToK
KyAgICAgICAgKiB3YXNtL1dBU01PcHMuaDogQWRkZWQuCisgICAgICAgICogd2FzbS9XQVNNUGFy
c2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyKToKKyAgICAgICAg
KEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6bWF0Y2hDaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpX
QVNNOjpXQVNNUGFyc2VyOjptYXRjaFN0cmluZyk6CisgICAgICAgIChKU0M6OldBU006OldBU01Q
YXJzZXI6OnBhcnNlVUludDMyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6cGFy
c2VWYWx1ZVR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyOjpwYXJzZSk6Cisg
ICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcyk6CisgICAg
ICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKToKKyAg
ICAgICAgKiB3YXNtL1dBU01TZWN0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoV0FTTVNlY3Rp
b246Omxvb2t1cCk6CisgICAgICAgICogd2FzbS9XQVNNU2VjdGlvbnMuaDogQWRkZWQuCisgICAg
ICAgIChXQVNNU2VjdGlvbjo6dmFsaWRhdGVPcmRlcik6CisKIDIwMTYtMDgtMDggIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY2xlYW4gdXAg
cHJlZml4aW5nIG9mIEF1dG9tYXRpb24gcHJvdG9jb2wgZ2VuZXJhdGVkIGZpbGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYy
NmIyZWJmZmUyY2FkYTM3Y2NkYWUzY2VkZjZlZmM4NTNiNjE2YjEuLmMyMWIwZmQ2ZTFkNDY4M2M4
NzNhYjUwYTM1M2I5NzExMTBjNjk0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYtMDgtMDgg
IEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IFdBU00gUGFyc2VyIGFuZCBCMyBJUiBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDY4MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisKIDIw
MTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBXVEYgbmVl
ZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGUzMGRjOWU0ZDAyMDM2MjBiMTRjYTIyOGI0ZWIyYmI0ZmRlY2VmMGQuLmEzMjQ4Mjk2NDdk
MTljYzg5N2JiZDk0NmRlYjI1Nzc2OTBlNGU0NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMTg3LDYgKzExODcsMTUgQEAKIAkJNTM5RUIwN0ExRDU1NjA3MDAwQzgyRUY3IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTUzOUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0
V0FTTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdBU00uY3BwICovOyB9OwogCQk1MzlGQjhC
QTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBK
U0FycmF5SW5saW5lcy5oICovOyB9OworCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV0FT
TVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggKi87IH07CisJCTUz
RjQwRTg3MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODYxRDU4RjlENjAwOTlBMUI2
IC8qIFdBU01TZWN0aW9ucy5jcHAgKi87IH07CisJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAv
KiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJz
ZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdBU01QYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1
OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi87IH07CisJCTUzRjQwRThGMUQ1OTAyODIw
MDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNN
QjNQYXJzZXJDb250ZXh0LmNwcCAqLzsgfTsKKwkJNTNGNDBFOTExRDU5MDMwMjAwOTlBMUI2IC8q
IFdBU01PcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi87IH07CisJCTUzRjQwRTkz
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYg
LyogV0FTTUIzUGFyc2VyQ29udGV4dC5oICovOyB9OworCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUEx
QjYgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJz
ZXIuaCAqLzsgfTsKKwkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
NDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovOyB9OwogCQk1
M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y2
QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNG
QTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8q
IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07
CkBAIC0zMzU5LDYgKzMzNjgsMTUgQEAKIAkJNTM5RUIwODAxRDU1NjA3MDAwQzgyRUY3IC8qIHRl
c3RXQVNNICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0
ZXN0V0FTTTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM5RkI4Qjkx
Qzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU4NDFE
NThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdBU01TZWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
M0Y0MEU4NjFENThGOUQ2MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01TZWN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25Q
YXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1bmN0aW9uUGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRThDMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXQVNNUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
U01QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEUxRDU5MDI4
MjAwOTlBMUI2IC8qIFdBU01CM1BhcnNlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0FTTUIzUGFyc2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01PcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM1BhcnNlckNv
bnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUIzUGFyc2VyQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5NDFENUE3QUVGMDA5
OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXQVNNTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
RjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NTI1LDcgKzU1NDMsMTYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTdCOThEMTM0MUI2
MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovLAogCQkJCTdCOThEMTM1MUI2MENE
NUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCAqLywKKwkJCQk1M0Y0MEU5MDFENTkwMzAyMDA5
OUExQjYgLyogV0FTTU9wcy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBX
QVNNRm9ybWF0LmggKi8sCisJCQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM1Bh
cnNlckNvbnRleHQuY3BwICovLAorCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNN
QjNQYXJzZXJDb250ZXh0LmggKi8sCisJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdB
U01GdW5jdGlvblBhcnNlci5oICovLAorCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBX
QVNNTW9kdWxlUGFyc2VyLmNwcCAqLywKKwkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyog
V0FTTU1vZHVsZVBhcnNlci5oICovLAorCQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBX
QVNNUGFyc2VyLmggKi8sCisJCQkJNTNGNDBFODYxRDU4RjlENjAwOTlBMUI2IC8qIFdBU01TZWN0
aW9ucy5jcHAgKi8sCisJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdBU01TZWN0aW9u
cy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTcxOTAsNiArNzIxNyw3IEBACiAJCQkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8q
IEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9k
dWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIg
LyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgz
MkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNzI3NSw2ICs3MzAz
LDcgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJhbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dl
ckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4
NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU4NTFE
NThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzlB
MEMxRjFEMkQ5Q0IxMDA4NTEyNEUgLyogQjNDYXNlQ29sbGVjdGlvbklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5o
IGluIEhlYWRlcnMgKi8sCkBAIC03NDE3LDYgKzc0NDYsNyBAQAogCQkJCTBGNzAyNUFBMTcxNEIw
RkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAv
KiBXQVNNUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBODFDNDk3Rjc0MDBBNTc3
RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFRTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKQEAgLTc3ODIsNiArNzgxMiw3IEBACiAJCQkJMEYyQjY2RjYxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRThC
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NkI3MzFEMUJEQTA4RUYwMDMzMUI4NCAvKiBKU0dsb2JhbE9iamVjdC5sdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1RkQwMDg2MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVj
dENvbnNvbGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1
OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODQxLDYgKzc4NzIsNyBAQAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDExRCAvKiBKU1Njcmlw
dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTIyMDI3MUJFN0Y1OEMwMDM5RTZG
MiAvKiBKSVRBZGRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3RjMz
MkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcyOTlEOUUxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBI
ZWFkZXJzICovLApAQCAtNzg4OSw2ICs3OTIxLDcgQEAKIAkJCQkwRkI1NDY3NzE0RjU5QjVDMDAy
QzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5
REEwMEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzUGFyc2VyQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENGM0Q1NkIxQ0QyOTQ3MjAwM0Q1QzY1IC8qIExhenlDbGFzc1N0
cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTAyMUJGQkU1NjEwMDM4
QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODkyMSw2ICs4OTU0
LDcgQEAKIAkJCQkwRkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNTE3QTBCOENDMDA3NzNBRDggLyog
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYx
ODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUzRjQwRTg3MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUxMjFCRjAyNzZDMDAxM0M4
OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTUwOSw2ICs5
NTQzLDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkU1OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTE4N0EwMTFCRkJFNTVFMDAzOEJCQ0EgLyogSklUTXVsR2Vu
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAv
KiBXQVNNQjNQYXJzZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2NzE4QkE0MUJF
OTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdEIC8qIFdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NTE4LDYgKzk1NTMsNyBAQAogCQkJCUE3Q0EzQUUzMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYzMzhERjkxQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0NBM0FFQjE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTNBRTUxN0RBNDFBRTAwNjUzOEFGIC8q
IFdlYWtNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFODRGQTAxNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NjkxQUUz
MzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCmluZGV4IDAwMjI1Mjc3NmJiNGE1YTM0MmY5MzZlNWRl
NzhmNDc3NDYxM2ViZTQuLjU0N2U3MjI1MGEyOGVmNzhkZDRmMDRiNDBiNDIyNGY5NjQ5YjE4MDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNNLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJXQVNNQjNQ
YXJzZXJDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYv
TEVCRGVjb2Rlci5oPgogCkBAIC0zOCw2ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIFZlY3RvcjxT
dHJpbmc+IG1fYXJndW1lbnRzOwogICAgIGJvb2wgbV9ydW5MRUJUZXN0cyB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX3J1bldBU01UZXN0cyB7IGZhbHNlIH07CiAKICAgICB2b2lkIHBhcnNlQXJndW1l
bnRzKGludCwgY2hhcioqKTsKIH07CkBAIC00Nyw2ICs0OSw3IEBAIHN0YXRpYyBOT19SRVRVUk4g
dm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJvb2wgaGVscCA9IGZhbHNlKQogICAgIGZwcmludGYo
c3RkZXJyLCAiVXNhZ2U6IHRlc3RXQVNNIFtvcHRpb25zXVxuIik7CiAgICAgZnByaW50ZihzdGRl
cnIsICIgIC1ofC0taGVscCAgUHJpbnRzIHRoaXMgaGVscCBtZXNzYWdlXG4iKTsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAgLWx8LS1sZWIgICBSdW5zIHRoZSBMRUIgZGVjb2RlciB0ZXN0c1xuIik7
CisgICAgZnByaW50ZihzdGRlcnIsICIgIC13fC0td2ViICAgUnVuIHRoZSBXQVNNIHRlc3RzXG4i
KTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAKICAgICBleGl0KGhlbHAgPyBFWElUX1NV
Q0NFU1MgOiBFWElUX0ZBSUxVUkUpOwpAQCAtMTA5LDcgKzExMiw3IEBAIHZvaWQgQ29tbWFuZExp
bmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBcCiAgICAgICAgIHNpemVf
dCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAogICAgICAgICB1aW50MzJfdCByZXN1bHQ7IFwKLSAg
ICAgICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVVSW50MzIodmVjdG9yLCBvZmZzZXQsIHJlc3VsdCk7
IFwKKyAgICAgICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVVSW50MzIodmVjdG9yLmRhdGEoKSwgdmVj
dG9yLnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
YXR1cyA9PSBleHBlY3RlZFN0YXR1cyk7IFwKICAgICAgICAgaWYgKGV4cGVjdGVkU3RhdHVzKSB7
IFwKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7
IFwKQEAgLTE1Nyw3ICsxNjAsNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSBW
ZWN0b3I8dWludDhfdD4gaW5pdDsgXAogICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc3RhcnRPZmZz
ZXQ7IFwKICAgICAgICAgaW50MzJfdCByZXN1bHQ7IFwKLSAgICAgICAgYm9vbCBzdGF0dXMgPSBk
ZWNvZGVJbnQzMih2ZWN0b3IsIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBib29sIHN0YXR1
cyA9IGRlY29kZUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVz
dWx0KTsgXAogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0dXMgPT0gZXhwZWN0ZWRTdGF0dXMp
OyBcCiAgICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBcCiAgICAgICAgICAgICBpbnQzMl90
IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKQEAgLTE3Myw2ICsxNzYsMTkgQEAgc3RhdGlj
IHZvaWQgcnVuTEVCVGVzdHMoKQogICAgIEZPUl9FQUNIX1NJR05FRF9MRUJfVEVTVChURVNUX1NJ
R05FRF9MRUJfREVDT0RFKQogfQogCisvLyBGb3Igbm93IHdlIGlubGluZSB0aGUgdGVzdCBmaWxl
cy4KK3N0YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9CisgICAgeyAweDAwLCAnYScsICdzJywgJ20nLCAweDBjLCAweDAwLCAweDAwLCAweDAw
LCAweDg5LCAweDgwLCAweDgwLCAweDAwLCAweDA0LCAndCcsICd5JywgJ3AnLAorICAgICAgJ2Un
LCAweDAxLCAweDA1LCAweDAwLCAweDAwLCAweDhiLCAweDgwLCAweDgwLCAweDAwLCAweDA4LCAn
ZicsICd1JywgJ24nLCAnYycsICd0JywgJ2knLAorICAgICAgJ28nLCAnbicsIDB4MDEsIDB4MDAs
IDB4OTIsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDYsICdlJywgJ3gnLCAncCcsICdvJywgJ3InLCAn
dCcsIDB4MDEsCisgICAgICAweDAwLCAweDA4LCAndCcsICd5JywgJ3AnLCAnZScsICctJywgJ2kn
LCAnMycsICcyJywgMHg5MiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwNCwgJ2MnLAorICAgICAgJ28n
LCAnZCcsICdlJywgMHgwMSwgMHgwMCwgMHg4OCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
NiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwYiwgMHgwZiwKKyAgICAgIDB4MGYKKyAgICB9OworCit9
CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKQEAgLTE4MSw2ICsxOTcsOSBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgaWYgKG9wdGlvbnMubV9ydW5M
RUJUZXN0cykKICAgICAgICAgcnVuTEVCVGVzdHMoKTsKIAorICAgIGlmIChvcHRpb25zLm1fcnVu
V0FTTVRlc3RzKQorICAgICAgICBydW5XQVNNVGVzdHMoKTsKKwogICAgIHJldHVybiBFWElUX1NV
Q0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FT
TU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5k
ZXggMmQxNjc5MWNjNTQ3YTgyZTMzMTY3NGJjMWUzZDQ2OTQ4ZWY1MDE3MS4uNjFkZjlmNTNmYmIz
MzQwNDFhNzgzMDcxZTlhMjliYjQwY2Q4NDk4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXQVNNTW9kdWxlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxX
QVNNU2lnbmF0dXJlPiYgc2lnbmF0dXJlcygpIHsgcmV0dXJuIG1fc2lnbmF0dXJlczsgfQogICAg
IFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBvcnQ+JiBmdW5jdGlvbkltcG9ydHMoKSB7IHJldHVybiBt
X2Z1bmN0aW9uSW1wb3J0czsgfQogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1
cmU+JiBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0
U2lnbmF0dXJlczsgfQotICAgIFZlY3RvcjxXQVNNVHlwZT4mIGdsb2JhbFZhcmlhYmxlVHlwZXMo
KSB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7IH0KKyAgICBWZWN0b3I8V0FTTVZhbHVl
VHlwZT4mIGdsb2JhbFZhcmlhYmxlVHlwZXMoKSB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlw
ZXM7IH0KICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24+JiBmdW5jdGlvbkRlY2xh
cmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KICAgICBWZWN0b3I8
V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlPiYgZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkgeyByZXR1
cm4gbV9mdW5jdGlvblBvaW50ZXJUYWJsZXM7IH0KIApAQCAtOTksNyArOTksNyBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxXQVNNU2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7CiAgICAgVmVjdG9yPFdB
U01GdW5jdGlvbkltcG9ydD4gbV9mdW5jdGlvbkltcG9ydHM7CiAgICAgVmVjdG9yPFdBU01GdW5j
dGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7Ci0gICAgVmVj
dG9yPFdBU01UeXBlPiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7CisgICAgVmVjdG9yPFdBU01WYWx1
ZVR5cGU+IG1fZ2xvYmFsVmFyaWFibGVUeXBlczsKICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVj
bGFyYXRpb24+IG1fZnVuY3Rpb25EZWNsYXJhdGlvbnM7CiAgICAgVmVjdG9yPFdBU01GdW5jdGlv
blBvaW50ZXJUYWJsZT4gbV9mdW5jdGlvblBvaW50ZXJUYWJsZXM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM1BhcnNlckNvbnRleHQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzUGFyc2VyQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWI1NjQzZjIwNzc3OWJmOWM2MTJiNjhjNDJhM2FkZjMxZTM0MDIxOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM1BhcnNlckNvbnRleHQuY3BwCkBA
IC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldBU01CM1BhcnNlckNvbnRleHQu
aCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxl
VmFsdWUuaCIKKyNpbmNsdWRlICJXQVNNRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7
CisKK25hbWVzcGFjZSBXQVNNIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOworCitjbGFzcyBCM1Bh
cnNlckNvbnRleHQgeworcHVibGljOgorICAgIHR5cGVkZWYgVmFsdWUqIEV4cHJlc3Npb25UeXBl
OworICAgIHR5cGVkZWYgQmFzaWNCbG9jayogQmxvY2tUeXBlOworCisgICAgQjNQYXJzZXJDb250
ZXh0KFByb2NlZHVyZSYpOworCisgICAgdm9pZCBhZGRMb2NhbChXQVNNVmFsdWVUeXBlLCB1aW50
MzJfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoV0FTTVZhbHVlVHlwZSwgdWlu
dDY0X3QpOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5T3AoV0FTTUJpbmFy
eU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworCisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRC
bG9jaygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGV4cHJlc3Npb25TdGFjayk7Citwcml2YXRlOgorICAgIE9wdGlvbmFsPFZl
Y3RvcjxWYXJpYWJsZSo+PiYgc3RhY2tGb3JDb250cm9sTGV2ZWwodW5zaWduZWQpOworICAgIEJs
b2NrVHlwZSYgYmxvY2tGb3JDb250cm9sTGV2ZWwodW5zaWduZWQpOworICAgIHZvaWQgdW5pZnko
VmFyaWFibGUqIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsKKyAgICBWZWN0
b3I8VmFyaWFibGUqPiBpbml0aWFsaXplSW5jb21taW5nVHlwZXMoQmxvY2tUeXBlLCBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+Jik7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhMZXZlbChj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiByZXN1bHRTdGFjaywgdW5zaWduZWQpOworCisg
ICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7Cisg
ICAgLy8gVGhpcyBpcyBhIHBhaXIgb2YgdGhlIGNvbnRpbnVhdGlvbiBhbmQgdGhlIHR5cGVzIGV4
cGVjdGVkIG9uIHRoZSBzdGFjayBmb3IgdGhhdCBjb250aW51YXRpb24uCisgICAgVmVjdG9yPHN0
ZDo6cGFpcjxCbG9ja1R5cGUsIE9wdGlvbmFsPFZlY3RvcjxWYXJpYWJsZSo+Pj4+IG1fY29udHJv
bFN0YWNrOworfTsKKworQjNQYXJzZXJDb250ZXh0OjpCM1BhcnNlckNvbnRleHQoUHJvY2VkdXJl
JiBwcm9jZWR1cmUpCisgICAgOiBtX3Byb2MocHJvY2VkdXJlKQoreworfQorCit2b2lkIEIzUGFy
c2VyQ29udGV4dDo6YWRkTG9jYWwoV0FTTVZhbHVlVHlwZSwgdWludDMyX3QpCit7CisgICAgLy8g
VE9ETzogQWRkIGxvY2Fscy4KK30KKworCisKK2Jvb2wgQjNQYXJzZXJDb250ZXh0OjpiaW5hcnlP
cChXQVNNQmluYXJ5T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7Cisg
ICAgY2FzZSBXQVNNQmluYXJ5T3BUeXBlOjpJMzJBZGQ6IHsKKyAgICAgICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9Cit9CisKK0IzUGFy
c2VyQ29udGV4dDo6RXhwcmVzc2lvblR5cGUgQjNQYXJzZXJDb250ZXh0OjphZGRDb25zdGFudChX
QVNNVmFsdWVUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgV0FTTVZhbHVlVHlwZTo6STMyOgorICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIHN0YXRpY19j
YXN0PGludDMyX3Q+KHZhbHVlKSk7CisgICAgY2FzZSBXQVNNVmFsdWVUeXBlOjpJNjQ6CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgdmFsdWUpOworICAgIGNhc2UgV0FTTVZhbHVlVHlwZTo6RjMyOgorICAgICAg
ICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdEZsb2F0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFs
dWUpKSk7CisgICAgY2FzZSBXQVNNVmFsdWVUeXBlOjpGNjQ6CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfQorCitib29sIEIzUGFyc2VyQ29udGV4dDo6YWRkQmxvY2soKQoreworICAgIG1fY29udHJv
bFN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX3Byb2MuYWRkQmxvY2soKSwgTnVsbG9wdCkp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzUGFyc2VyQ29udGV4dDo6ZW5kQmxvY2so
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgZXhwcmVzc2lvblN0YWNrKQoreworICAgIEFTU0VSVCht
X2NvbnRyb2xTdGFjay5zaXplKCkpOworCisgICAgdW5pZnlWYWx1ZXNXaXRoTGV2ZWwoZXhwcmVz
c2lvblN0YWNrLCAwKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb250cm9sU3RhY2sudGFr
ZUxhc3QoKS5maXJzdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCM1BhcnNlckNvbnRl
eHQ6OnVuaWZ5KFZhcmlhYmxlKiB2YXJpYWJsZSwgRXhwcmVzc2lvblR5cGUgc291cmNlKQorewor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQs
IE9yaWdpbigpLCB2YXJpYWJsZSwgc291cmNlKTsKK30KKworVmVjdG9yPFZhcmlhYmxlKj4gQjNQ
YXJzZXJDb250ZXh0Ojppbml0aWFsaXplSW5jb21taW5nVHlwZXMoQmxvY2tUeXBlIGJsb2NrLCBj
b25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBzb3VyY2UpCit7CisgICAgVmVjdG9yPFZhcmlh
YmxlKj4gcmVzdWx0OworICAgIGZvciAoRXhwcmVzc2lvblR5cGUgZXhwciA6IHNvdXJjZSkgewor
ICAgICAgICBBU1NFUlQoZXhwci0+dHlwZSgpICE9IFZvaWQpOworICAgICAgICBWYXJpYWJsZSog
dmFyID0gbV9wcm9jLmFkZFZhcmlhYmxlKGV4cHItPnR5cGUoKSk7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQodmFyKTsKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3By
b2MsIEIzOjpHZXQsIE9yaWdpbigpLCB2YXIpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgQjNQYXJzZXJDb250ZXh0Ojp1bmlmeVZhbHVlc1dpdGhMZXZlbChjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiByZXN1bHRTdGFjaywgdW5zaWduZWQgbGV2ZWwpCit7Cisg
ICAgQVNTRVJUKG1fY29udHJvbFN0YWNrLnNpemUoKSA8PSBsZXZlbCk7CisKKyAgICBPcHRpb25h
bDxWZWN0b3I8VmFyaWFibGUqPj4mIGV4cGVjdGVkU3RhY2sgPSBzdGFja0ZvckNvbnRyb2xMZXZl
bChsZXZlbCk7CisgICAgaWYgKCFleHBlY3RlZFN0YWNrKSB7CisgICAgICAgIGV4cGVjdGVkU3Rh
Y2sgPSBpbml0aWFsaXplSW5jb21taW5nVHlwZXMoYmxvY2tGb3JDb250cm9sTGV2ZWwobGV2ZWwp
LCByZXN1bHRTdGFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZXhw
ZWN0ZWRTdGFjay52YWx1ZSgpLnNpemUoKSAhPSByZXN1bHRTdGFjay5zaXplKCkpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRTdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAg
dW5pZnkoZXhwZWN0ZWRTdGFjay52YWx1ZSgpW2ldLCByZXN1bHRTdGFja1tpXSk7Cit9CisgICAg
CitPcHRpb25hbDxWZWN0b3I8VmFyaWFibGUqPj4mIEIzUGFyc2VyQ29udGV4dDo6c3RhY2tGb3JD
b250cm9sTGV2ZWwodW5zaWduZWQgbGV2ZWwpCit7CisgICAgQVNTRVJUKG1fY29udHJvbFN0YWNr
LnNpemUoKSA8PSBsZXZlbCk7CisgICAgcmV0dXJuIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0
YWNrLnNpemUoKSAtIDEgLSBsZXZlbF0uc2Vjb25kOworfQorCitCYXNpY0Jsb2NrKiYgQjNQYXJz
ZXJDb250ZXh0OjpibG9ja0ZvckNvbnRyb2xMZXZlbCh1bnNpZ25lZCBsZXZlbCkKK3sKKyAgICBB
U1NFUlQobV9jb250cm9sU3RhY2suc2l6ZSgpIDw9IGxldmVsKTsKKyAgICByZXR1cm4gbV9jb250
cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGxldmVsXS5maXJzdDsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBWZWN0
b3I8dWludDhfdD4mIHNvdXJjZSwgV0FTTUZ1bmN0aW9uSW5mb3JtYXRpb24gaW5mbywgdW5zaWdu
ZWQgb3B0TGV2ZWwpCit7CisgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBCM1BhcnNlckNv
bnRleHQgY29udGV4dChwcm9jZWR1cmUpOworICAgIFdBU01GdW5jdGlvblBhcnNlcjxCM1BhcnNl
ckNvbnRleHQ+IHBhcnNlcihjb250ZXh0LCBzb3VyY2UsIGluZm8pOworICAgIGlmICghcGFyc2Vy
LnBhcnNlKCkpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2NlZHVyZSwgb3B0TGV2
ZWwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUIzUGFyc2VyQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUIzUGFyc2VyQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3YTg5MjZiOGVjYzc5ZTJk
NjEzY2UxZTg5NzdiOGMzMTI3OGE1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNQjNQYXJzZXJDb250ZXh0LmgKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAi
V0FTTUZvcm1hdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCitz
dGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBWZWN0
b3I8dWludDhfdD4mLCBXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbiwgdW5zaWduZWQgb3B0TGV2ZWwg
PSAxKTsKKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaAppbmRleCBiMzYzNDEwNTY3M2FiZDU4ODc1
YjQ2MTJjOWUzZjZhNmExNzJhOWNiLi40NTFjZjZhNzkxNTkwYTAyNTA3MDQ1Nzg3ZjMyODQ2MWQ4
YTJiZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBAIC01Miwx
NSArNTIsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTRnVuY3Rpb247CiAKLWVudW0g
Y2xhc3MgV0FTTVR5cGUgOiB1aW50OF90IHsKK2VudW0gY2xhc3MgV0FTTVZhbHVlVHlwZSA6IHVp
bnQ4X3QgewogICAgIEkzMiwKKyAgICBJNjQsCiAgICAgRjMyLAogICAgIEY2NCwKICAgICBOdW1i
ZXJPZlR5cGVzCiB9OwogCi1lbnVtIGNsYXNzIFdBU01FeHByZXNzaW9uVHlwZSA6IHVpbnQ4X3Qg
eworZW51bSBjbGFzcyBXQVNNRnVuY3Rpb25SZXR1cm5UeXBlIDogdWludDhfdCB7CiAgICAgSTMy
LAorICAgIEk2NCwKICAgICBGMzIsCiAgICAgRjY0LAogICAgIFZvaWQsCkBAIC02OCw4ICs3MCw4
IEBAIGVudW0gY2xhc3MgV0FTTUV4cHJlc3Npb25UeXBlIDogdWludDhfdCB7CiB9OwogCiBzdHJ1
Y3QgV0FTTVNpZ25hdHVyZSB7Ci0gICAgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGU7Ci0g
ICAgVmVjdG9yPFdBU01UeXBlPiBhcmd1bWVudHM7CisgICAgV0FTTUZ1bmN0aW9uUmV0dXJuVHlw
ZSByZXR1cm5UeXBlOworICAgIFZlY3RvcjxXQVNNVmFsdWVUeXBlPiBhcmd1bWVudHM7CiB9Owog
CiBzdHJ1Y3QgV0FTTUZ1bmN0aW9uSW1wb3J0IHsKQEAgLTkxLDYgKzkzLDExIEBAIHN0cnVjdCBX
QVNNRnVuY3Rpb25Qb2ludGVyVGFibGUgewogICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rp
b25zOwogfTsKIAorc3RydWN0IFdBU01GdW5jdGlvbkluZm9ybWF0aW9uIHsKKyAgICBzaXplX3Qg
c3RhcnQ7CisgICAgc2l6ZV90IGVuZDsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kM2Y5MDFhNmI2MGFlZmFjNDRjMjZi
YzQ5MWU1NjA4NGQwMmQ2Zjk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldBU01QYXJzZXIuaCIKKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00gewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorY2xhc3MgV0FTTUZ1bmN0aW9uUGFyc2VyIDog
cHVibGljIFdBU01QYXJzZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4
dDo6RXhwcmVzc2lvblR5cGUgRXhwcmVzc2lvblR5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
b250ZXh0OjpCbG9ja1R5cGUgQmxvY2tUeXBlOworCisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyKENv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBXQVNN
RnVuY3Rpb25JbmZvcm1hdGlvbik7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsK
KworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQmxvY2soKTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oV0FTTU9wVHlwZSk7CisgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gdW5pZnlDb250cm9sKFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCB1
bnNpZ25lZCBsZXZlbCk7CisKKyAgICBCbG9ja1R5cGUmIGJsb2NrRm9yQ29udHJvbExldmVsKHVu
c2lnbmVkIGxldmVsKTsKKyAgICBPcHRpb25hbDxWZWN0b3I8RXhwcmVzc2lvblR5cGU+PiYgc3Rh
Y2tGb3JDb250cm9sTGV2ZWwodW5zaWduZWQgbGV2ZWwpOworCisgICAgQ29udGV4dCYgbV9jb250
ZXh0OworICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gbV9leHByZXNzaW9uU3RhY2s7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorV0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpXQVNNRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBzb3VyY2VCdWZmZXIsIFdBU01GdW5jdGlvbkluZm9ybWF0aW9uIGluZm8pCisgICAgOiBX
QVNNUGFyc2VyKHNvdXJjZUJ1ZmZlciwgaW5mby5zdGFydCwgaW5mby5lbmQpCisgICAgLCBtX2Nv
bnRleHQoY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaW5mby5lbmQgPD0gc291cmNlQnVmZmVyLnNp
emUoKSk7CisgICAgQVNTRVJUKGluZm8uc3RhcnQgPCBpbmZvLmVuZCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbnRleHQ+Citib29sIFdBU01GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2UoKQoreworICAgIHVpbnQzMl90IGxvY2FsQ291bnQ7CisgICAgaWYgKCFwYXJzZVVJbnQzMihs
b2NhbENvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGxvY2FsQ291bnQ7ICsraSkgeworICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxv
Y2Fsc1dpdGhUeXBlOworICAgICAgICBpZiAoIXBhcnNlVUludDMyKG51bWJlck9mTG9jYWxzV2l0
aFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01WYWx1ZVR5
cGUgdHlwZU9mTG9jYWw7CisgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUodHlwZU9mTG9jYWwp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fY29udGV4dC5hZGRMb2Nh
bCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHNXaXRoVHlwZSk7CisgICAgfQorCisgICAgcmV0
dXJuIHBhcnNlQmxvY2soKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wg
V0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJsb2NrKCkKK3sKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICB1aW50OF90IG9wOworICAgICAgICBpZiAoIXBhcnNlVUludDcob3Ap
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghcGFyc2VFeHByZXNz
aW9uKHN0YXRpY19jYXN0PFdBU01PcFR5cGU+KG9wKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKG9wICE9IFdBU01PcFR5cGU6OkVuZCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250ZXh0PgorYm9vbCBXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lv
bihXQVNNT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyNkZWZpbmUgQ1JFQVRFX0NB
U0UobmFtZSwgdmFsdWUpIGNhc2UgbmFtZToKKyAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChD
UkVBVEVfQ0FTRSkgeworI3VuZGVmIENSRUFURV9DQVNFCisgICAgICAgIEV4cHJlc3Npb25UeXBl
IGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOworICAgICAgICBFeHByZXNzaW9u
VHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuYmluYXJ5T3Aoc3RhdGlj
X2Nhc3Q8V0FTTUJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwgcmVzdWx0KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgV0FTTU9wVHlw
ZTo6STMyQ29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoY29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KFdBU01W
YWx1ZVR5cGU6OkkzMiwgY29uc3RhbnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBXQVNNT3BUeXBlOjpCbG9jazogeworICAgICAgICBpZiAoIW1fY29udGV4dC5h
ZGRCbG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcGFy
c2VCbG9jaygpOworICAgIH0KKworICAgIGNhc2UgV0FTTU9wVHlwZTo6RW5kOiB7CisgICAgICAg
IHJldHVybiBtX2NvbnRleHQuZW5kQmxvY2sobV9leHByZXNzaW9uU3RhY2spOworICAgIH0KKwor
ICAgIH0KKworICAgIC8vIFVua25vd24gb3Bjb2RlLgorICAgIHJldHVybiBmYWxzZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkwMzU5ZWRiMTY4NWVjM2ZlODljNWZmMTkxN2Q3
NDEwYTFjYzhlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01Nb2R1bGVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldBU01Nb2R1bGVQYXJzZXIuaCIKKworI2luY2x1ZGUgIldBU01TZWN0aW9ucy5oIgorI2lu
Y2x1ZGUgIldBU01Gb3JtYXQuaCIKKyNpbmNsdWRlICJXQVNNT3BzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK2Jvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2Uo
KQoreworICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8IDgpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIW1hdGNoQ2hhcmFjdGVyKDApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFtYXRjaFN0cmluZygiYXNtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8gYW55dGhp
bmcgd2l0aCBpdC4KKyAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOworICAgIGlmICghcGFyc2VV
SW50MzIodmVyc2lvbk51bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2
ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBXQVNNU2VjdGlvbnM6OlNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0gV0FTTVNlY3Rpb25zOjpT
ZWN0aW9uOjpVbmtub3duOworICAgIHdoaWxlIChtX29mZnNldCA8IG1fc291cmNlTGVuZ3RoKSB7
CisgICAgICAgIHVpbnQzMl90IHNlY3Rpb25OYW1lTGVuZ3RoOworICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIHJlYWQgdXAgdG8gdGhlIHNlY3Rpb24ncyBz
aXplLgorICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIG1heExFQkJ5
dGVMZW5ndGggPj0gbV9zb3VyY2VMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgV0FTTVNlY3Rpb25zOjpTZWN0aW9uIHNlY3Rpb24gPSBXQVNNU2VjdGlvbnM6Omxv
b2t1cChtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCwgc2VjdGlvbk5hbWVMZW5ndGgpOworICAg
ICAgICBpZiAoIVdBU01TZWN0aW9uczo6dmFsaWRhdGVPcmRlcihwcmV2aW91c1NlY3Rpb24sIHNl
Y3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVpbnQzMl90IHNl
Y3Rpb25MZW5ndGg7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbkxlbmd0aCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9v
ZmZzZXQgKyBzZWN0aW9uTGVuZ3RoOworCisgICAgICAgIHN3aXRjaCAoc2VjdGlvbikgeworICAg
ICAgICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OkVuZDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsgLy8gVE9ETzogcmV0dXJuIHRoZSBtb2R1bGUuCisgICAgICAgICAgICBj
YXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6RnVuY3Rpb25UeXBlczogeworICAgICAgICAgICAg
ICAgIGlmICghcGFyc2VGdW5jdGlvblR5cGVzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OlNpZ25hdHVyZXM6IHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OkRlZmluaXRpb25zOiB7
CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6VW5r
bm93bjogeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5nLiIpOworICAgICAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW5kICE9IG1fb2Zmc2V0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rp
b247CisgICAgfQorCisgICAgLy8gVE9ETworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdB
U01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygpCit7CisgICAgdWludDMyX3QgY291
bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IHVpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0
eXBlIGNvbnN0YW50LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1aW50MzJf
dCBhcmd1bWVudENvdW50OworICAgICAgICBpZiAoIXBhcnNlVUludDMyKGFyZ3VtZW50Q291bnQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBWZWN0b3I8V0FTTVZhbHVlVHlw
ZT4gYXJndW1lbnRUeXBlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Vt
ZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8IHR5
cGUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTVZhbHVlVHlwZTo6TnVtYmVyT2ZUeXBlcykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXJndW1lbnRUeXBl
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8V0FTTVZhbHVlVHlwZT4odHlwZSkpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghcGFyc2VVSW50Nyh0eXBlKSB8fCB0eXBlID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0FTTUZ1bmN0aW9uUmV0dXJuVHlwZSByZXR1cm5UeXBlOwor
ICAgICAgICBpZiAodHlwZSkgeworICAgICAgICAgICAgV0FTTVZhbHVlVHlwZSB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUodmFsdWUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBzdGF0aWNfY2FzdDxXQVNNRnVu
Y3Rpb25SZXR1cm5UeXBlPih2YWx1ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFdBU01GdW5jdGlvblJldHVyblR5cGU6OlZvaWQ7CisKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblNpZ25h
dHVyZXMoKQoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIo
Y291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOworICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKHR5cGVOdW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpCit7CisgICAgdWludDMyX3QgY291bnQ7Cisg
ICAgaWYgKCFwYXJzZVVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90
IGZ1bmN0aW9uU2l6ZTsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQzMihmdW5jdGlvblNpemUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01GdW5jdGlvbkluZm9ybWF0
aW9uIGluZm8gPSBtX2Z1bmN0aW9uc1tpXTsKKyAgICAgICAgaW5mby5zdGFydCA9IG1fb2Zmc2V0
OworICAgICAgICBpbmZvLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBt
X29mZnNldCA9IGluZm8uZW5kOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYzI0OWJmYzJlODRj
MmIyZmZkNjEzODAzZWI2NjJhYjVhNWRhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV0FTTVBhcnNlci5oIgorI2luY2x1ZGUgIldBU01PcHMuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBK
U0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK2NsYXNzIFdBU01Nb2R1bGVQYXJzZXIgOiBwdWJs
aWMgV0FTTVBhcnNlciB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0gMHhiOwor
CisgICAgV0FTTU1vZHVsZVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKKworICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CisKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9u
SW5mb3JtYXRpb24+IGZ1bmN0aW9uSW5mb3JtYXRpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uczsg
fQorCitwcml2YXRlOgorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25U
eXBlcygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1
cmVzKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRp
b25zKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRp
b24odWludDMyX3QgbnVtYmVyKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJs
b2NrKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKFdBU01P
cFR5cGUpOworCisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9u
czsKK307CisKK1dBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIpCisgICAgOiBXQVNNUGFyc2VyKHNvdXJjZUJ1ZmZlciwg
MCwgc291cmNlQnVmZmVyLnNpemUoKSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGFkYmUzNzVlM2I2ZDIxNzM5
ZjYwNDk5NDdlNWU3ZTg3ZjkxNzRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTU9wcy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworI2Rl
ZmluZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJDb25z
dCwgMHgxMCkKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19PUChtYWNybykg
XAorICAgIG1hY3JvKEJsb2NrLCAweDAxKSBcCisgICAgbWFjcm8oRW5kLCAweDBmKQorCisjZGVm
aW5lIEZPUl9FQUNIX1dBU01fVU5BUllfT1AobWFjcm8pCisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FT
TV9CSU5BUllfT1AobWFjcm8pIFwKKyAgICBtYWNybyhJMzJBZGQsIDB4NDApCisKKyNkZWZpbmUg
Rk9SX0VBQ0hfV0FTTV9PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUCht
YWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKG1hY3JvKSBcCisgICAg
Rk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fQklOQVJZ
X09QKG1hY3JvKQorCisjZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkKSBuYW1lID0g
aWQsCisKK2VudW0gV0FTTU9wVHlwZSA6IHVpbnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fT1Ao
Q1JFQVRFX0VOVU1fVkFMVUUpCit9OworCisKKworZW51bSBjbGFzcyBXQVNNQmluYXJ5T3BUeXBl
IDogdWludDhfdCB7CisgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0VOVU1fVkFM
VUUpCit9OworCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
dW5kZWYgQ1JFQVRFX0VOVU1fVkFMVUUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDJlMDBm
YTUzMWQwNDdkOWQ5ZWZiMWRhZWE0ODJiNGUwNDM1N2NmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBhcnNlci5oCkBAIC0wLDAgKzEsMTI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIldBU01TZWN0aW9ucy5oIgorI2lu
Y2x1ZGUgIldBU01Gb3JtYXQuaCIKKyNpbmNsdWRlICJXQVNNT3BzLmgiCisjaW5jbHVkZSA8d3Rm
L0xFQkRlY29kZXIuaD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY2xhc3MgV0FTTVBhcnNlciB7Citwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0gMHhiOworCisgICAgV0FT
TVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQp
OworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gbWF0Y2hDaGFyYWN0ZXIoY2hhcik7Cisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gbWF0Y2hTdHJpbmcoY29uc3QgY2hhciopOworCisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCk7
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJl
c3VsdCkgeyByZXR1cm4gZGVjb2RlVUludDMyKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2VMZW5n
dGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VVSW50Nyh1aW50OF90JiByZXN1bHQpOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2VWYWx1ZVR5cGUoV0FTTVZhbHVlVHlwZSYgcmVzdWx0KTsKKworICAgIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgbV9zb3VyY2U7CisgICAgc2l6ZV90IG1fc291cmNlTGVuZ3RoOworICAgIHNp
emVfdCBtX29mZnNldDsKK307CisKK0FMV0FZU19JTkxJTkUgV0FTTVBhcnNlcjo6V0FTTVBhcnNl
cihjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHN0YXJ0LCBzaXpl
X3QgZW5kKQorICAgIDogbV9zb3VyY2Uoc291cmNlQnVmZmVyKQorICAgICwgbV9zb3VyY2VMZW5n
dGgoZW5kKQorICAgICwgbV9vZmZzZXQoc3RhcnQpCit7CisgICAgQVNTRVJUKHN0YXJ0IDwgZW5k
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6Om1hdGNoQ2hhcmFjdGVyKGNo
YXIgYykKK3sKKyAgICBpZiAobV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoYyA9PSBtX3NvdXJjZVttX29mZnNldF0pIHsKKyAgICAgICAg
bV9vZmZzZXQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6Om1hdGNoU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cikKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IHN0cltpXSAhPSAwOyBpKyspIHsKKyAgICAgICAgaWYgKCFtYXRjaENo
YXJhY3RlcihzdHJbaV0pKSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0OworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6cGFyc2VVSW50MzIodWludDMyX3Qm
IHJlc3VsdCkKK3sKKyAgICBpZiAobV9vZmZzZXQgKyA0ID49IG1fc291cmNlTGVuZ3RoKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7CisgICAgbV9vZmZzZXQgKz0g
NDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6
OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3Nv
dXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IG1fc291cmNl
W21fb2Zmc2V0KytdOworICAgIHJldHVybiByZXN1bHQgJiAweDgwOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgV0FTTVBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUoV0FTTVZhbHVlVHlwZSYgcmVzdWx0
KQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHVpbnQ4X3QgdmFsdWUgPSBtX3NvdXJjZVttX29mZnNldF07CisgICAgaWYg
KHZhbHVlID49IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYWx1ZVR5cGU6Ok51bWJlck9mVHlw
ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0FT
TVZhbHVlVHlwZT4odmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGIyOGJjMDQ4ZDc0ZjBlNWRlMmE5NWRiNGJlMWVjNTI5NTkyYzk1OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5jcHAKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQVNNU2VjdGlvbnMuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNN
IHsKKworc3RydWN0IFNlY3Rpb25EYXRhIHsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgY29u
c3QgY2hhciogbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzZWN0aW9uRGF0YUxl
bmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXQVNNU2VjdGlvbnM6OlNlY3Rpb246OlVua25v
d24pOworc3RhdGljIGNvbnN0IFNlY3Rpb25EYXRhIHNlY3Rpb25EYXRhW3NlY3Rpb25EYXRhTGVu
Z3RoXSB7CisjZGVmaW5lIENSRUFURV9TRUNUSU9OX0RBVEEobmFtZSwgc3RyKSB7IHNpemVvZihz
dHIpIC0gMSwgc3RyIH0sCisgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OX1RZUEUoQ1JFQVRFX1NF
Q1RJT05fREFUQSkKKyN1bmRlZiBDUkVBVEVfU0VDVElPTl9EQVRBCit9OworCitXQVNNU2VjdGlv
bnM6OlNlY3Rpb24gV0FTTVNlY3Rpb25zOjpsb29rdXAoY29uc3QgdWludDhfdCogbmFtZSwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIC8vIEkgZ3Vlc3Mgd2UgY291bGQgZG8gc29tZXRoaW5nIGJl
dHRlciB0aGFuIGxpbmVhciBzZWFyY2ggaGVyZSBidXQgSSBkb3VidCBpdCBtYXR0ZXJzLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWN0aW9uRGF0YUxlbmd0aDsgKytpKSB7CisgICAg
ICAgIGlmIChzZWN0aW9uRGF0YVtpXS5sZW5ndGggIT0gbGVuZ3RoKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGlmIChtZW1jbXAobmFtZSwgc2VjdGlvbkRhdGFbaV0ubmFtZSwgbGVu
Z3RoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXQVNNU2VjdGlvbnM6OlNlY3Rp
b24+KGkpOworICAgIH0KKyAgICByZXR1cm4gV0FTTVNlY3Rpb25zOjpTZWN0aW9uOjpVbmtub3du
OworfQorCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
U2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU5ZDFlN2EzNDJhOWM4NjY1NWEwYmZjZTlhMjAyZjQ2
ZTUxNGVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TVNlY3Rpb25zLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCisvLyBUaGVzZSBzaG91
bGQgYmUgaW4gdGhlIG9yZGVyIHRoYXQgd2UgZXhwZWN0IHRoZW0gdG8gYmUgaW4gdGhlIGJpbmFy
eS4KKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OX1RZUEUobWFjcm8pIFwKK21hY3JvKEZ1
bmN0aW9uVHlwZXMsICJ0eXBlIikgXAorbWFjcm8oU2lnbmF0dXJlcywgImZ1bmN0aW9uIikgXAor
bWFjcm8oRGVmaW5pdGlvbnMsICJjb2RlIikgXAorbWFjcm8oRW5kLCAiZW5kIikKKworc3RydWN0
IFdBU01TZWN0aW9ucyB7CisgICAgZW51bSBjbGFzcyBTZWN0aW9uIHsKKyNkZWZpbmUgQ1JFQVRF
X1NFQ1RJT05fRU5VTShuYW1lLCBzdHIpIG5hbWUsCisgICAgICAgIEZPUl9FQUNIX1dBU01fU0VD
VElPTl9UWVBFKENSRUFURV9TRUNUSU9OX0VOVU0pCisjdW5kZWYgQ1JFQVRFX1NFQ1RJT05fRU5V
TQorICAgICAgICBVbmtub3duCisgICAgfTsKKyAgICBzdGF0aWMgU2VjdGlvbiBsb29rdXAoY29u
c3QgdWludDhfdCosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZU9yZGVyKFNl
Y3Rpb24gcHJldmlvdXMsIFNlY3Rpb24gbmV4dCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgYWxs
b3dzIHVua25vd24gc2VjdGlvbnMgYWZ0ZXIgRW5kLCB3aGljaCBJIGRvdWJ0IHdpbGwgZXZlciBi
ZSBzdXBwb3J0ZWQgYnV0CisgICAgICAgIC8vIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBwb3RlbnRp
YWxseSBicmVhayBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KKyAgICAgICAgaWYgKHByZXZpb3Vz
ID09IFNlY3Rpb246OlVua25vd24pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIHByZXZpb3VzIDwgbmV4dDsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXQVNN
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaCBiL1NvdXJjZS9XVEYv
d3RmL0ZlYXR1cmVEZWZpbmVzLmgKaW5kZXggNjc5MDNiOGNjMjgyNjhiZGZjYTZlMDIwMWYyYzc2
MDYyOGNhMTA1YS4uMzczYTJkNTMxOGY4MTQxNDE2NDQ1YWE4N2ZmMGYxMGM4NjFmNjYzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9GZWF0dXJlRGVmaW5lcy5oCkBAIC0yMjMsNyArMjIzLDcgQEAgdGhlIHB1YmxpYyBpT1Mg
U0RLLiBXZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIEZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnIGZpbGUKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX1dFQkFTU0VNQkxZKQotI2Rl
ZmluZSBFTkFCTEVfV0VCQVNTRU1CTFkgMAorI2RlZmluZSBFTkFCTEVfV0VCQVNTRU1CTFkgMQog
I2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfV0VCX0FSQ0hJVkUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgK
aW5kZXggMWIyMDIxZWIxZDg3Y2I1Yjc3NmE5ZTA3NjA2ODJjN2ExMzNlMGY1OC4uNWQxYWQyMWEz
ZWJjYzgzZjBjYWQ3OGIzN2YwYjdmMzJhNjQ4NDBmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTEVCRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaApAQCAtMjYs
MjMgKzI2LDIwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbXBpbGVyLmgiCi0jaW5j
bHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCi0jaW5jbHVkZSAiRGF0YUxv
Zy5oIgotCiAvLyBUaGlzIGZpbGUgY29udGFpbnMgYSBidW5jaCBvZiBoZWxwZXIgZnVuY3Rpb25z
IGZvciBkZWNvZGluZyBMRUIgbnVtYmVycy4KIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9MRUIxMjggZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAvLyBMRUIgZm9y
bWF0LgogCiBjb25zdCBzaXplX3QgbWF4TEVCQnl0ZUxlbmd0aCA9IDU7CiAKLWlubGluZSBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50MzIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBi
eXRlcywgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90JiByZXN1bHQpCitpbmxpbmUgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBjb25zdCBz
aXplX3QmIGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90JiByZXN1bHQpCiB7Ci0gICAg
QVNTRVJUKGJ5dGVzLnNpemUoKSA+IG9mZnNldCk7CisgICAgQVNTRVJUKGxlbmd0aCA+IG9mZnNl
dCk7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgc2l6ZV90
IGxhc3QgPSBzdGQ6Om1pbihtYXhMRUJCeXRlTGVuZ3RoLCBieXRlcy5zaXplKCkgLSBvZmZzZXQg
LSAxKTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExFQkJ5dGVMZW5ndGgsIGxlbmd0
aCAtIG9mZnNldCAtIDEpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkgewog
ICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRlc1tvZmZzZXQrK107CiAgICAgICAgIHJlc3VsdCB8
PSAoYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OwpAQCAtNTYsMTIgKzUzLDEyIEBAIGlubGluZSBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50MzIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBi
eXRlcywgc2l6ZV90CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBkZWNvZGVJbnQzMihjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ5dGVzLCBzaXpl
X3QmIG9mZnNldCwgaW50MzJfdCYgcmVzdWx0KQoraW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGRlY29kZUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBjb25zdCBzaXplX3QmIGxlbmd0
aCwgc2l6ZV90JiBvZmZzZXQsIGludDMyX3QmIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQoYnl0ZXMu
c2l6ZSgpID4gb2Zmc2V0KTsKKyAgICBBU1NFUlQobGVuZ3RoID4gb2Zmc2V0KTsKICAgICByZXN1
bHQgPSAwOwogICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAgICBzaXplX3QgbGFzdCA9IHN0ZDo6
bWluKG1heExFQkJ5dGVMZW5ndGgsIGJ5dGVzLnNpemUoKSAtIG9mZnNldCAtIDEpOworICAgIHNp
emVfdCBsYXN0ID0gc3RkOjptaW4obWF4TEVCQnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0IC0g
MSk7CiAgICAgdWludDhfdCBieXRlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHRydWU7ICsr
aSkgewogICAgICAgICBieXRlID0gYnl0ZXNbb2Zmc2V0KytdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285898</attachid>
            <date>2016-08-11 22:49:31 -0700</date>
            <delta_ts>2016-08-15 09:24:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160681-20160811224752.patch</filename>
            <type>text/plain</type>
            <size>75353</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWY3YzM2ZmQzZWE2MjZkOGNkOGI2MzRmYWU0NmNiMDMwMTQ4NTAzLi42Yzg5NTVlYjYxOWYxMDUz
ZTI3NzViMWZiNjk1Y2MyZDIyNDQ0MWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5OSBAQAorMjAxNi0wOC0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV0FTTSBQYXJzZXIgYW5kIEIzIElSIGdlbmVyYXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjgx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRoZSBza2VsZXRvbiBmb3IgYSBXZWJBc3NlbWJseSBwaXBlbGluZS4gVGhlCisg
ICAgICAgIHBpcGVsaW5lIGlzIGRlc2lnbmVkIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzeSB0byBo
YXZlIGFzIG11Y2ggb2YKKyAgICAgICAgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdGhyZWFkZWQg
YXMgcG9zc2libGUuIFRoZSBmbG93IG9mIHRoZQorICAgICAgICBwaXBlbGluZSByb3VnaGx5IGdv
ZXMgYXMgZm9sbG93czoKKworICAgICAgICAxKSBDcmVhdGUgYSBXQVNNUGxhbiB3aXRoIHRoZSBW
TSBhbmQgYSBWZWN0b3Igb2YgdGhlCisgICAgICAgIGFzc2VtYmx5LiBDdXJyZW50bHkgdGhlIHBs
YW4gd2lsbCBwcm9jZXNzIGFsbCB0aGUgd29yaworICAgICAgICBzeW5jaHJvbm91c2x5LCBob3dl
dmVyLCBpbiB0aGUgZnV0dXJlIHRoaXMgY2FuIGJlIG9mZmxvYWRlZCB0bworICAgICAgICBvdGhl
ciB0aHJlYWRzLgorCisgICAgICAgIDIpIFRoZSBwbGFuIHdpbGwgcnVuIHRoZSBXQVNNTW9kdWxl
UGFyc2VyLCB3aGljaCBjb2xsYXRlcyBhbGwgdGhlCisgICAgICAgIGluZm9ybWF0aW9uIG5lZWRl
ZCB0byBjb21waWxlIGVhY2ggbW9kdWxlIGZ1bmN0aW9uCisgICAgICAgIGluZGVwZW5kZW50bHku
IFNpbmNlLCB3ZSBhcmUgc3RpbGwgaW4gdGhlIGVhcmx5IHBoYXNlcywgdGhlIG9ubHkKKyAgICAg
ICAgaW5mb3JtYXRpb24gaXMgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgYnl0ZSBvZiB0aGUgZnVu
Y3Rpb24ncworICAgICAgICBib2R5LiBUaGUgbW9kdWxlIHBhcnNlciwgaG93ZXZlciwgc3RpbGwg
c2NhbnMgYm90aCBhbmQKKyAgICAgICAgc2VtaS12YWxpZGF0ZXMgdGhlIHR5cGUgYW5kIHRoZSBm
dW5jdGlvbiBzZWN0aW9ucy4KKworICAgICAgICAzKSBFYWNoIGZ1bmN0aW9uIGlzIGRlY29kZWQg
YW5kIGNvbXBpbGVkLiBJbiB0aGUgZnV0dXJlIHRoaXMKKyAgICAgICAgc2hvdWxkIGFsc28gaW5j
bHVkZSBhIG9wY29kZSB2YWxpZGF0aW9uIHBoYXNlLiBUaGUKKyAgICAgICAgV0FTTUZ1bmN0aW9u
UGFyc2VyIGlzIHRlbXBsYXRpemVkIHNvIHRoYXQgYSB2YWxpZGF0b3Igc2hvdWxkIGJlCisgICAg
ICAgIGFibGUgdG8gdXNlIG1vc3Qgb2YgdGhlIHNhbWUgY29kZSB0aGUgQjMgSVIgZ2VuZXJhdG9y
IGRvZXMuCisKKyAgICAgICAgNCkgV2hlbiB0aGUgcGxhbiBoYXMgZmluaXNoZWQgaXQgd2lsbCBm
aWxsIGEgVmVjdG9yIG9mCisgICAgICAgIEIzOjpDb21waWxhdGlvbiBvYmplY3RzIHRoYXQgY29y
cmVzcG9uZCB0byB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbgorICAgICAgICBpbiB0aGUgV0FTTSBt
b2R1bGUuCisKKworICAgICAgICBUaGUgY3VycmVudCB0ZXN0aW5nIHBsYW4gZm9yIHRoZSBtb2R1
bGVzIGlzIHRvIGlubGluZSB0aGUgdGhlCisgICAgICAgIGJpbmFyeSBnZW5lcmF0ZWQgYnkgdGhl
IHNwZWMncyBPQ2FtbCBwcm90b3R5cGUuIFRoZSBpbmxpbmVkIGJpbmFyeQorICAgICAgICBpcyBw
YXNzZWQgdG8gYSBXQVNNUGxhbiB0aGVuIGludm9rZWQgdG8gY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGUKKyAgICAgICAgZnVuY3Rpb24uIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGFkZCBhIG1vcmUg
cm9idXN0IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHRlc3RXQVNN
LmNwcDoKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExp
bmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKGludm9rZSk6CisgICAgICAgIChydW5XQVNN
VGVzdHMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd2FzbS9KU1dBU01Nb2R1bGUuaDoK
KyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAg
ICAgKiB3YXNtL1dBU01CM1BhcnNlckNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTTo6QjNQYXJzZXJDb250ZXh0OjpCM1BhcnNlckNvbnRleHQpOgorICAgICAgICAoSlNDOjpX
QVNNOjpCM1BhcnNlckNvbnRleHQ6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V0FTTTo6QjNQ
YXJzZXJDb250ZXh0OjpiaW5hcnlPcCk6CisgICAgICAgIChKU0M6OldBU006OkIzUGFyc2VyQ29u
dGV4dDo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM1BhcnNlckNvbnRleHQ6
OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V0FTTTo6QjNQYXJzZXJDb250ZXh0OjplbmRCbG9j
ayk6CisgICAgICAgIChKU0M6OldBU006OkIzUGFyc2VyQ29udGV4dDo6YWRkUmV0dXJuKToKKyAg
ICAgICAgKEpTQzo6V0FTTTo6QjNQYXJzZXJDb250ZXh0Ojp1bmlmeSk6CisgICAgICAgIChKU0M6
OldBU006OkIzUGFyc2VyQ29udGV4dDo6aW5pdGlhbGl6ZUluY29tbWluZ1R5cGVzKToKKyAgICAg
ICAgKEpTQzo6V0FTTTo6QjNQYXJzZXJDb250ZXh0Ojp1bmlmeVZhbHVlc1dpdGhMZXZlbCk6Cisg
ICAgICAgIChKU0M6OldBU006OkIzUGFyc2VyQ29udGV4dDo6c3RhY2tGb3JDb250cm9sTGV2ZWwp
OgorICAgICAgICAoSlNDOjpXQVNNOjpCM1BhcnNlckNvbnRleHQ6OmJsb2NrRm9yQ29udHJvbExl
dmVsKToKKyAgICAgICAgKEpTQzo6V0FTTTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3
YXNtL1dBU01CM1BhcnNlckNvbnRleHQuaDoKKyAgICAgICAgKiB3YXNtL1dBU01Gb3JtYXQuaDoK
KyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTTo6V0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpXQVNNRnVuY3Rpb25QYXJzZXIp
OgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
KToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZSk6Cisg
ICAgICAgIChKU0M6OldBU006OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcyk6
CisgICAgICAgIChKU0M6OldBU006OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWdu
YXR1cmVzKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvbkRlZmluaXRpb25zKToKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OldBU006OldBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJz
ZXIpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNTW9kdWxlUGFyc2VyOjpmdW5jdGlvbkluZm9y
bWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dBU01PcHMuaDogQWRkZWQuCisgICAgICAgICogd2Fz
bS9XQVNNUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyOjpw
YXJzZVZhclVJbnQzMik6CisgICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OldBU01QYXJz
ZXIpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyOjptYXRjaENoYXJhY3Rlcik6Cisg
ICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6Om1hdGNoU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6V0FTTTo6V0FTTVBhcnNlcjo6cGFyc2VVSW50MzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpX
QVNNUGFyc2VyOjpwYXJzZVVJbnQ3KToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6
cGFyc2VWYXJVSW50MSk6CisgICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlVmFs
dWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dBU01QbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OldBU006OlBsYW46OlBsYW4pOgorICAgICAgICAqIHdhc20vV0FTTVBsYW4uaDogQWRkZWQu
CisgICAgICAgICogd2FzbS9XQVNNU2VjdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTTo6V0FTTVNlY3Rpb25zOjpsb29rdXApOgorICAgICAgICAqIHdhc20vV0FTTVNlY3Rpb25z
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNU2VjdGlvbnM6OnZhbGlkYXRlT3Jk
ZXIpOgorCiAyMDE2LTA4LTA4ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IGNsZWFuIHVwIHByZWZpeGluZyBvZiBBdXRvbWF0aW9uIHByb3Rv
Y29sIGdlbmVyYXRlZCBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmMjZiMmViZmZlMmNhZGEzN2NjZGFlM2NlZGY2ZWZj
ODUzYjYxNmIxLi5mOGZlMzYwM2YyMWQ5YTExMjVkNzkzMjc5OWE1NWY0YTRjODhkMWUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTA4LTExICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBXQVNNIFBhcnNlciBhbmQgQjMgSVIgZ2Vu
ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHd0Zi9EYXRhTG9nLmg6CisgICAgICAgIChXVEY6OmRhdGFMb2dMbik6IEFkZCBhIG5ldyBkYXRh
TG9nIGZ1bmN0aW9uLCBkYXRhTG9nTG4gdGhhdAorICAgICAgICBhdXRvbWFnaWNhbGx5IGluY2x1
ZGVzIGEgbmV3IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJpbnQuCisgICAgICAgICogd3RmL0xF
QkRlY29kZXIuaDoKKyAgICAgICAgKGRlY29kZVVJbnQzMik6CisgICAgICAgIChkZWNvZGVJbnQz
Mik6IENoYW5nZSB0aGUgTEVCRGVjb2RlciB0byB0YWtlIGEgcG9pbnRlciBhbmQgbGVuZ3RoCisg
ICAgICAgIHJhdGhlciB0aGFuIGEgVmVjdG9yLgorCiAyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV1RGIG5lZWRzIGEgdmFyaWFudCBpbXBsZW1lbnRh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMzBkYzllNGQwMjAzNjIwYjE0
Y2EyMjhiNGViMmJiNGZkZWNlZjBkLi5jMGY0NTg5OWQxM2JjNDEzMzI3YzM3NDVhZTM5NmE1NjUz
ODgxMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE3NCw2ICsxMTc0LDgg
QEAKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBC
NEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJC
NjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8q
IFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsg
fTsKKwkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdBU01QbGFuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdB
MEIgLyogV0FTTVBsYW4uaCAqLzsgfTsKKwkJNTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdB
U01QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAgKi87IH07CiAJCTUzNDg2
QkI3MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBK
U1R5cGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07
IH07CiAJCTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0
NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgKi87IH07CiAJCTUzNDkwMjg1MUM3Mjc2Qjcw
MDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJy
YXlDVGVzdC5jcHAgKi87IH07CkBAIC0xMTg3LDYgKzExODksMTUgQEAKIAkJNTM5RUIwN0ExRDU1
NjA3MDAwQzgyRUY3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3
NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTUzOUVCMDgxMUQ1NTYwOEEw
MEM4MkVGNyAvKiB0ZXN0V0FTTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVzdFdBU00uY3BwICov
OyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURB
N0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OworCQk1M0Y0MEU4NTFENThGOTc3
MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25z
LmggKi87IH07CisJCTUzRjQwRTg3MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODYx
RDU4RjlENjAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5jcHAgKi87IH07CisJCTUzRjQwRThCMUQ1
OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBX
QVNNRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8q
IFdBU01QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi87IH07CisJCTUz
RjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThFMUQ1OTAyODIw
MDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0LmNwcCAqLzsgfTsKKwkJNTNGNDBFOTExRDU5
MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi87
IH07CisJCTUzRjQwRTkzMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MjFE
NUE0QUIzMDA5OUExQjYgLyogV0FTTUIzUGFyc2VyQ29udGV4dC5oICovOyB9OworCQk1M0Y0MEU5
NTFENUE3QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8q
IFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsgfTsKKwkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8q
IFdBU01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIu
Y3BwICovOyB9OwogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFs
bG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkwMDIyNzEx
RCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTIxQ0Yz
ODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAgKi87IH07CkBAIC0zMzQyLDYgKzMzNTMsOCBAQAogCQk1MkMwNjExRDFBQTUxRTFC
MDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzEzNzRCQzFENUNFNjc2MDBB
RjdBMEIgLyogV0FTTVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FT
TVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMzc0QkUxRDVDRTk1MDAw
QUY3QTBCIC8qIFdBU01QbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdBU01QbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQjYx
QzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1R5cGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM0ODZCQkExQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzQ5MDI4MjFDNzI0MkM4MDAxMkJDQjggLyogVHlwZWRBcnJheUNU
ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFR5cGVkQXJyYXlD
VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvVHlwZWRBcnJheUNUZXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzNTksNiArMzM3MiwxNSBAQAogCQk1MzlFQjA4MDFENTU2
MDcwMDBDODJFRjcgLyogdGVzdFdBU00gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RXQVNNOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwogCQk1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUlubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzRjQwRTg2MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTVNlY3Rpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2
IC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQVNNRnVuY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNG
NDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdBU01QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0FTTVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV0FTTUIzUGFyc2VyQ29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNQjNQYXJzZXJDb250ZXh0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2
IC8qIFdBU01PcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU9wcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYg
LyogV0FTTUIzUGFyc2VyQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQVNNQjNQYXJzZXJDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
RjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJz
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTU1vZHVsZVBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEw
MEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzEx
RCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEy
QUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MjUsNyArNTU0NywxOCBAQAogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8sCiAJ
CQkJN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovLAorCQkJCTUz
RjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi8sCiAJCQkJN0JDNTQ3RDIxQjY5
NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKKwkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5
OUExQjYgLyogV0FTTUIzUGFyc2VyQ29udGV4dC5jcHAgKi8sCisJCQkJNTNGNDBFOTIxRDVBNEFC
MzAwOTlBMUI2IC8qIFdBU01CM1BhcnNlckNvbnRleHQuaCAqLywKKwkJCQk1M0Y0MEU4QTFENTkw
MUJCMDA5OUExQjYgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8sCisJCQkJNTNGNDBFOTYxRDVB
N0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAorCQkJCTUzRjQwRTk0MUQ1
QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCisJCQkJNTMxMzc0QkUxRDVD
RTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCAqLywKKwkJCQk1MzEzNzRCQzFENUNFNjc2MDBB
RjdBMEIgLyogV0FTTVBsYW4uaCAqLywKKwkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyog
V0FTTVBhcnNlci5oICovLAorCQkJCTUzRjQwRTg2MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2Vj
dGlvbnMuY3BwICovLAorCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlv
bnMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MTkwLDYgKzcyMjMsNyBAQAogCQkJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAv
KiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV0FTTU1v
ZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhC
IC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFF
M0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzUsNiArNzMw
OSw3IEBACiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdn
ZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjExODJCN0EwNDAwRjZE
ODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFODUx
RDU4Rjk3NzAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREM5
QTBDMUYxRDJEOUNCMTAwODUxMjRFIC8qIEIzQ2FzZUNvbGxlY3Rpb25JbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0Mu
aCBpbiBIZWFkZXJzICovLApAQCAtNzQxNyw2ICs3NDUyLDcgQEAKIAkJCQkwRjcwMjVBQTE3MTRC
MEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYg
LyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTgxQzQ5N0Y3NDAwQTU3
N0ZBIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUUx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTcxLDYgKzc2MDcsNyBAQAogCQkJCTBGMkI2NkFEMTdC
NkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkFFMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMzc0
QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdBU01QbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFC
Q0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCQkQ5ODFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTU0RThFQjAxOEJGRkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXkuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzc4Miw2ICs3ODE5LDcgQEAKIAkJCQkwRjJCNjZGNjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEIxRDU5MDFCQjAw
OTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2Qjcz
MUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFn
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDEsNiArNzg3
OSw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxMjIwMjcxQkU3RjU4QzAwMzlFNkYyIC8qIEpJVEFk
ZEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdE
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQw
RTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5
OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBE
RDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8s
CkBAIC03ODg5LDYgKzc5MjgsNyBAQAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQjAxQkQ1
OTk0RTAwRjQ1NzVDIC8qIGxhenl3cml0ZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQz
MTBFMTZGNUNEMDBCMzQ0NjAgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTkz
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNQYXJzZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzUyRTBFMTZGQ0UxMDBCMzQ0NjAgLyogTGV4ZXIubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlEQ0YzRDU2QjFDRDI5NDcyMDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMDIxQkZCRTU2MTAwMzhCQkNBIC8qIEpJ
VE11bEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTIxLDYgKzg5NjEsNyBAQAogCQkJ
CTBGQkUwRjcyMTZDMURCMDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjE4MzI5MUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTNGNDBFODcxRDU4RjlENjAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTEyMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09w
YXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MTMzLDYgKzkxNzQsNyBAQAog
CQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNj
cmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyog
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMTM3NEJGMUQ1Q0U5
NTAwMEFGN0EwQiAvKiBXQVNNUGxhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNThFMzU5MTE4
NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTNFNUNBMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NDBFMjAxODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVk
U2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTUwOSw2ICs5NTUxLDcgQEAKIAkJ
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkU1OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRTE4N0EwMTFCRkJFNTVFMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNQYXJz
ZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3
QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC05NTE4LDYgKzk1NjEsNyBAQAogCQkJCUE3Q0EzQUUzMTdEQTQxQUUwMDY1MzhB
RiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhERjkx
QkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0NBM0FFQjE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdDQTNBRTUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8q
IFdlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5
IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdFdBU00uY3BwCmluZGV4IDAwMjI1Mjc3NmJiNGE1YTM0MmY5MzZlNWRlNzhmNDc3NDYxM2Vi
ZTQuLjUzYjZjZmVkZjYyYmU2ZjQ0Yjk0YzQyZTBkM2ZkY2VkYzkzZmYxNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RXQVNNLmNwcApAQCAtMjUsNyArMjUsMTEgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVU
aHJlYWRpbmcuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5j
bHVkZSAiV0FTTVBsYW4uaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0
Zi9MRUJEZWNvZGVyLmg+CiAKQEAgLTM4LDYgKzQyLDcgQEAgcHVibGljOgogCiAgICAgVmVjdG9y
PFN0cmluZz4gbV9hcmd1bWVudHM7CiAgICAgYm9vbCBtX3J1bkxFQlRlc3RzIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fcnVuV0FTTVRlc3RzIHsgZmFsc2UgfTsKIAogICAgIHZvaWQgcGFyc2VBcmd1
bWVudHMoaW50LCBjaGFyKiopOwogfTsKQEAgLTQ3LDYgKzUyLDcgQEAgc3RhdGljIE5PX1JFVFVS
TiB2b2lkIHByaW50VXNhZ2VTdGF0ZW1lbnQoYm9vbCBoZWxwID0gZmFsc2UpCiAgICAgZnByaW50
ZihzdGRlcnIsICJVc2FnZTogdGVzdFdBU00gW29wdGlvbnNdXG4iKTsKICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgLWh8LS1oZWxwICBQcmludHMgdGhpcyBoZWxwIG1lc3NhZ2VcbiIpOwogICAgIGZw
cmludGYoc3RkZXJyLCAiICAtbHwtLWxlYiAgIFJ1bnMgdGhlIExFQiBkZWNvZGVyIHRlc3RzXG4i
KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXd8LS13ZWIgICBSdW4gdGhlIFdBU00gdGVzdHNc
biIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKIAogICAgIGV4aXQoaGVscCA/IEVYSVRf
U1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7CkBAIC02Myw2ICs2OSw5IEBAIHZvaWQgQ29tbWFuZExp
bmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKIAogICAgICAgICBpZiAo
IXN0cmNtcChhcmcsICItbCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1sZWIiKSkKICAgICAgICAgICAg
IG1fcnVuTEVCVGVzdHMgPSB0cnVlOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi13Iikg
fHwgIXN0cmNtcChhcmcsICItLXdlYiIpKQorICAgICAgICAgICAgbV9ydW5XQVNNVGVzdHMgPSB0
cnVlOwogICAgIH0KIAogICAgIGZvciAoOyBpIDwgYXJnYzsgKytpKQpAQCAtMTA5LDcgKzExOCw3
IEBAIHZvaWQgQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJn
dikKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0
OyBcCiAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAogICAgICAgICB1aW50
MzJfdCByZXN1bHQ7IFwKLSAgICAgICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVVSW50MzIodmVjdG9y
LCBvZmZzZXQsIHJlc3VsdCk7IFwKKyAgICAgICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVVSW50MzIo
dmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHN0YXR1cyA9PSBleHBlY3RlZFN0YXR1cyk7IFwKICAgICAgICAgaWYg
KGV4cGVjdGVkU3RhdHVzKSB7IFwKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9
PSBleHBlY3RlZFJlc3VsdCk7IFwKQEAgLTE1Nyw3ICsxNjYsNyBAQCB2b2lkIENvbW1hbmRMaW5l
OjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSBWZWN0b3I8dWludDhfdD4gaW5pdDsgXAogICAgICAgICBzaXplX3Qg
b2Zmc2V0ID0gc3RhcnRPZmZzZXQ7IFwKICAgICAgICAgaW50MzJfdCByZXN1bHQ7IFwKLSAgICAg
ICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVJbnQzMih2ZWN0b3IsIG9mZnNldCwgcmVzdWx0KTsgXAor
ICAgICAgICBib29sIHN0YXR1cyA9IGRlY29kZUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5z
aXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0dXMg
PT0gZXhwZWN0ZWRTdGF0dXMpOyBcCiAgICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBcCiAg
ICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKQEAgLTE3Myw2
ICsxODIsMTIxIEBAIHN0YXRpYyB2b2lkIHJ1bkxFQlRlc3RzKCkKICAgICBGT1JfRUFDSF9TSUdO
RURfTEVCX1RFU1QoVEVTVF9TSUdORURfTEVCX0RFQ09ERSkKIH0KIAorI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworc3RhdGljIEpTQzo6Vk0qIHZtOworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
dXNpbmcgbmFtZXNwYWNlIFdBU007Cit1c2luZyBuYW1lc3BhY2UgQjM7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgaW52b2tlKE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBwdHIsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVCAoKmZ1bmN0aW9u
KShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4ocHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGludm9r
ZShjb25zdCBDb21waWxhdGlvbiYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAg
ICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29kZSgpLCBhcmd1bWVudHMuLi4pOworfQorCisvLyBG
b3Igbm93IHdlIGlubGluZSB0aGUgdGVzdCBmaWxlcy4KK3N0YXRpYyB2b2lkIHJ1bldBU01UZXN0
cygpCit7CisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAi
cmV0dXJuLWkzMiIgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGkzMi5jb25zdCA1KSkpICkKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NzQsIDB4NzksIDB4NzAs
IDB4NjUsIDB4ODUsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDQwLCAw
eDAwLCAweDAxLCAweDAxLCAweDA4LCAweDY2LCAweDc1LCAweDZlLCAweDYzLCAweDc0LCAweDY5
LCAweDZmLCAweDZlLCAweDgyLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMCwgMHgwNiwgMHg2NSwgMHg3OCwgMHg3MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHg4ZCwgMHg4
MCwgMHg4MCwgMHgwMCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDAsIDB4MGEsIDB4NzIsIDB4NjUs
IDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4MzMsIDB4MzIsIDB4MDQsIDB4
NjMsIDB4NmYsCisgICAgICAgICAgICAweDY0LCAweDY1LCAweDhiLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA1LCAweDA5LCAw
eDAxLAorICAgICAgICAgICAgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigq
dm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxh
bi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBj
b21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgZGF0YUxvZ0xuKCJS
dW5uaW5nIHRoZSBwbGFuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXSkgPT0gNSk7CisgICAgfQorCisKKyAgICB7CisgICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOiAobW9kdWxlIChmdW5jICJyZXR1cm4taTMyIiAocmVzdWx0IGkzMikgKHJldHVy
biAoaTMyLmFkZCAoaTMyLmNvbnN0IDUpIChpMzIuY29uc3QgNikpKSkgKQorICAgICAgICBWZWN0
b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2
ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwg
MHg4NSwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4
MDEsIDB4MDEsIDB4MDgsIDB4NjYsIDB4NzUsIDB4NmUsIDB4NjMsIDB4NzQsIDB4NjksIDB4NmYs
IDB4NmUsIDB4ODIsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAw
eDA2LCAweDY1LCAweDc4LCAweDcwLCAweDZmLCAweDcyLCAweDc0LCAweDhkLCAweDgwLCAweDgw
LCAweDAwLAorICAgICAgICAgICAgMHgwMSwgMHgwMCwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwg
MHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwNCwgMHg2MywgMHg2
ZiwKKyAgICAgICAgICAgIDB4NjQsIDB4NjUsIDB4OGUsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4ODksIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4MTAsIDB4MDYsCisg
ICAgICAgICAgICAweDQwLCAweDA5LCAweDAxLCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUg
ZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBk
YXRhTG9nTG4oIlJ1bm5pbmcgdGhlIHBsYW4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdKSA9PSAxMSk7CisgICAgfQorICAgIAorICAgIHsKKyAg
ICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgInJldHVybi1pMzIiIChyZXN1
bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5jb25z
dCAzKSkgKGkzMi5jb25zdCAzKSkpKSApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3Ig
PSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAw
LCAweDAwLCAweDA0LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDg1LCAweDgwLCAweDgwLAor
ICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwgMHg2
NiwgMHg3NSwgMHg2ZSwgMHg2MywgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg4MiwKKyAgICAg
ICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjUsIDB4NzgsIDB4
NzAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4OGQsIDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAg
ICAweDAxLCAweDAwLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAweDZlLCAw
eDJkLCAweDY5LCAweDMzLCAweDMyLCAweDA0LCAweDYzLCAweDZmLAorICAgICAgICAgICAgMHg2
NCwgMHg2NSwgMHg5MSwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4YywgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwMywKKyAgICAgICAgICAgIDB4NDAsIDB4
MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MDEsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQ
bGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9
IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBm
YWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIGRh
dGFMb2dMbigiUnVubmluZyB0aGUgcGxhbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0pID09IDExKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jICJyZXR1cm4taTMyIiAocmVzdWx0IGkz
MikgKGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5hZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNv
bnN0IDMpKSAoaTMyLmNvbnN0IDMpKSkpKSApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAw
eDAwLCAweDAwLCAweDA0LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDg1LCAweDgwLCAweDgw
LAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwg
MHg2NiwgMHg3NSwgMHg2ZSwgMHg2MywgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg4MiwKKyAg
ICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjUsIDB4Nzgs
IDB4NzAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4OGQsIDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAg
ICAgICAweDAxLCAweDAwLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAweDZl
LCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDA0LCAweDYzLCAweDZmLAorICAgICAgICAgICAg
MHg2NCwgMHg2NSwgMHg5MywgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4ZSwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwNSwgMHgxMCwKKyAgICAgICAgICAgIDB4MDMs
IDB4NDAsIDB4MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MDEsIDB4MGYsIDB4MGYKKyAgICAgICAg
fTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5y
ZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCisgICAgICAgIGRhdGFMb2dMbigiUnVubmluZyB0aGUgcGxhbiIpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0pID09IDExKTsKKyAgICB9Cit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKQEAgLTE4MSw2ICszMDUsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogICAgIGlmIChvcHRpb25zLm1fcnVuTEVCVGVzdHMpCiAgICAgICAgIHJ1bkxF
QlRlc3RzKCk7CiAKKworICAgIGlmIChvcHRpb25zLm1fcnVuV0FTTVRlc3RzKSB7CisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAg
ICAgICAgdm0gPSAmSlNDOjpWTTo6Y3JlYXRlKEpTQzo6TGFyZ2VIZWFwKS5sZWFrUmVmKCk7Cisg
ICAgICAgIHJ1bldBU01UZXN0cygpOworI2Vsc2UKKyAgICAgICAgZGF0YUxvZ0xuKCJXQVNNIGlz
IG5vdCBlbmFibGVkISIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB9CisKICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oCmluZGV4IDJkMTY3
OTFjYzU0N2E4MmUzMzE2NzRiYzFlM2Q0Njk0OGVmNTAxNzEuLjYxZGY5ZjUzZmJiMzM0MDQxYTc4
MzA3MWU5YTI5YmI0MGNkODQ5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL0pTV0FTTU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FT
TU1vZHVsZS5oCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8V0FTTVNpZ25h
dHVyZT4mIHNpZ25hdHVyZXMoKSB7IHJldHVybiBtX3NpZ25hdHVyZXM7IH0KICAgICBWZWN0b3I8
V0FTTUZ1bmN0aW9uSW1wb3J0PiYgZnVuY3Rpb25JbXBvcnRzKCkgeyByZXR1cm4gbV9mdW5jdGlv
bkltcG9ydHM7IH0KICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiYgZnVu
Y3Rpb25JbXBvcnRTaWduYXR1cmVzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZXM7IH0KLSAgICBWZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxWYXJpYWJsZVR5cGVzKCkgeyByZXR1
cm4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOyB9CisgICAgVmVjdG9yPFdBU01WYWx1ZVR5cGU+JiBn
bG9iYWxWYXJpYWJsZVR5cGVzKCkgeyByZXR1cm4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOyB9CiAg
ICAgVmVjdG9yPFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uPiYgZnVuY3Rpb25EZWNsYXJhdGlvbnMo
KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9CiAgICAgVmVjdG9yPFdBU01GdW5j
dGlvblBvaW50ZXJUYWJsZT4mIGZ1bmN0aW9uUG9pbnRlclRhYmxlcygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25Qb2ludGVyVGFibGVzOyB9CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8V0FTTVNpZ25hdHVyZT4gbV9zaWduYXR1cmVzOwogICAgIFZlY3RvcjxXQVNNRnVuY3Rp
b25JbXBvcnQ+IG1fZnVuY3Rpb25JbXBvcnRzOwogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBv
cnRTaWduYXR1cmU+IG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOwotICAgIFZlY3RvcjxXQVNN
VHlwZT4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOworICAgIFZlY3RvcjxXQVNNVmFsdWVUeXBlPiBt
X2dsb2JhbFZhcmlhYmxlVHlwZXM7CiAgICAgVmVjdG9yPFdBU01GdW5jdGlvbkRlY2xhcmF0aW9u
PiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOwogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVy
VGFibGU+IG1fZnVuY3Rpb25Qb2ludGVyVGFibGVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNQYXJzZXJDb250ZXh0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01CM1BhcnNlckNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1ZmVmNTY1
ZmVhNmU2ZDZjNTk5ZWJhNGU4ZjI1NjkxZWJkNGNhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNQYXJzZXJDb250ZXh0LmNwcApAQCAtMCwwICsx
LDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXQVNNQjNQYXJzZXJDb250ZXh0LmgiCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgi
CisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1l
c3BhY2UgV0FTTSB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzsKKworY2xhc3MgQjNQYXJzZXJDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZhbHVlKiBFeHByZXNzaW9uVHlwZTsKKyAgICB0
eXBlZGVmIEJhc2ljQmxvY2sqIEJsb2NrVHlwZTsKKworICAgIEIzUGFyc2VyQ29udGV4dChQcm9j
ZWR1cmUmKTsKKworICAgIHZvaWQgYWRkTG9jYWwoV0FTTVZhbHVlVHlwZSwgdWludDMyX3QpOwor
ICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFdBU01WYWx1ZVR5cGUsIHVpbnQ2NF90KTsK
KworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGJpbmFyeU9wKFdBU01CaW5hcnlPcFR5cGUs
IEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKCk7Cisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1
cm4oVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYmIHJldHVyblZhbHVlcyk7CisKK3ByaXZhdGU6
CisgICAgT3B0aW9uYWw8VmVjdG9yPFZhcmlhYmxlKj4+JiBzdGFja0ZvckNvbnRyb2xMZXZlbCh1
bnNpZ25lZCk7CisgICAgQmxvY2tUeXBlJiBibG9ja0ZvckNvbnRyb2xMZXZlbCh1bnNpZ25lZCk7
CisgICAgdm9pZCB1bmlmeShWYXJpYWJsZSogdGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uVHlwZSBz
b3VyY2UpOworICAgIFZlY3RvcjxWYXJpYWJsZSo+IGluaXRpYWxpemVJbmNvbW1pbmdUeXBlcyhC
bG9ja1R5cGUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mKTsKKyAgICB2b2lkIHVuaWZ5
VmFsdWVzV2l0aExldmVsKGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIHJlc3VsdFN0YWNr
LCB1bnNpZ25lZCk7CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jazsKKyAgICAvLyBUaGlzIGlzIGEgcGFpciBvZiB0aGUgY29udGludWF0aW9u
IGFuZCB0aGUgdHlwZXMgZXhwZWN0ZWQgb24gdGhlIHN0YWNrIGZvciB0aGF0IGNvbnRpbnVhdGlv
bi4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPEJsb2NrVHlwZSwgT3B0aW9uYWw8VmVjdG9yPFZhcmlh
YmxlKj4+Pj4gbV9jb250cm9sU3RhY2s7Cit9OworCitCM1BhcnNlckNvbnRleHQ6OkIzUGFyc2Vy
Q29udGV4dChQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1fcHJvYyhwcm9jZWR1cmUpCit7
CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKK30KKwordm9pZCBCM1Bh
cnNlckNvbnRleHQ6OmFkZExvY2FsKFdBU01WYWx1ZVR5cGUsIHVpbnQzMl90KQoreworICAgIC8v
IFRPRE86IEFkZCBsb2NhbHMuCit9CisKKworCitib29sIEIzUGFyc2VyQ29udGV4dDo6YmluYXJ5
T3AoV0FTTUJpbmFyeU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgc3dpdGNoIChvcCkgewor
ICAgIGNhc2UgV0FTTUJpbmFyeU9wVHlwZTo6STMyQWRkOiB7CisgICAgICAgIHJlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgfQorfQorCitCM1Bh
cnNlckNvbnRleHQ6OkV4cHJlc3Npb25UeXBlIEIzUGFyc2VyQ29udGV4dDo6YWRkQ29uc3RhbnQo
V0FTTVZhbHVlVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFdBU01WYWx1ZVR5cGU6OkkzMjoKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZSkpOworICAgIGNhc2UgV0FTTVZhbHVlVHlwZTo6STY0OgorICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHZhbHVlKTsKKyAgICBjYXNlIFdBU01WYWx1ZVR5cGU6OkYzMjoKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3By
b2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKSkpOworICAgIGNhc2UgV0FTTVZhbHVlVHlwZTo6RjY0OgorICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KK30KKworYm9vbCBCM1BhcnNlckNvbnRleHQ6OmFkZEJsb2NrKCkKK3sKKyAgICBtX2NvbnRy
b2xTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9wcm9jLmFkZEJsb2NrKCksIE51bGxvcHQp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCM1BhcnNlckNvbnRleHQ6OmVuZEJsb2Nr
KFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2UgYXJlIGV4aXRpbmcgdGhlIGZ1bmN0aW9uLgorICAgIGlmICghbV9jb250
cm9sU3RhY2suc2l6ZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyByZXF1aXJl
IHRoZSBzdGFjayBpcyBlbXB0eT8gSXQncyBub3QgY2xlYXIgZnJvbSB0aGUgY3VycmVudCBzcGVj
LgorICAgICAgICByZXR1cm4gIWV4cHJlc3Npb25TdGFjay5zaXplKCk7CisgICAgfQorCisgICAg
dW5pZnlWYWx1ZXNXaXRoTGV2ZWwoZXhwcmVzc2lvblN0YWNrLCAwKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKS5maXJzdDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBCM1BhcnNlckNvbnRleHQ6OmFkZFJldHVybihWZWN0b3I8RXhwcmVzc2lv
blR5cGUsIDE+JiYgcmV0dXJuVmFsdWVzKQoreworICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6
ZSgpIDw9IDEpOworICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKQorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3JpZ2lu
KCksIHJldHVyblZhbHVlc1swXSk7CisgICAgZWxzZQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCkpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEIzUGFyc2VyQ29udGV4dDo6dW5pZnkoVmFyaWFibGUq
IHZhcmlhYmxlLCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCit7CisgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlhYmxl
LCBzb3VyY2UpOworfQorCitWZWN0b3I8VmFyaWFibGUqPiBCM1BhcnNlckNvbnRleHQ6OmluaXRp
YWxpemVJbmNvbW1pbmdUeXBlcyhCbG9ja1R5cGUgYmxvY2ssIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIHNvdXJjZSkKK3sKKyAgICBWZWN0b3I8VmFyaWFibGUqPiByZXN1bHQ7CisgICAg
Zm9yIChFeHByZXNzaW9uVHlwZSBleHByIDogc291cmNlKSB7CisgICAgICAgIEFTU0VSVChleHBy
LT50eXBlKCkgIT0gVm9pZCk7CisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFy
aWFibGUoZXhwci0+dHlwZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXIpOworICAgICAg
ICBibG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2lu
KCksIHZhcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCM1BhcnNl
ckNvbnRleHQ6OnVuaWZ5VmFsdWVzV2l0aExldmVsKGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIHJlc3VsdFN0YWNrLCB1bnNpZ25lZCBsZXZlbCkKK3sKKyAgICBBU1NFUlQobGV2ZWwgPCBt
X2NvbnRyb2xTdGFjay5zaXplKCkpOworCisgICAgT3B0aW9uYWw8VmVjdG9yPFZhcmlhYmxlKj4+
JiBleHBlY3RlZFN0YWNrID0gc3RhY2tGb3JDb250cm9sTGV2ZWwobGV2ZWwpOworICAgIGlmICgh
ZXhwZWN0ZWRTdGFjaykgeworICAgICAgICBleHBlY3RlZFN0YWNrID0gaW5pdGlhbGl6ZUluY29t
bWluZ1R5cGVzKGJsb2NrRm9yQ29udHJvbExldmVsKGxldmVsKSwgcmVzdWx0U3RhY2spOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGV4cGVjdGVkU3RhY2sudmFsdWUoKS5z
aXplKCkgIT0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVzdWx0U3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5KGV4cGVjdGVkU3RhY2su
dmFsdWUoKVtpXSwgcmVzdWx0U3RhY2tbaV0pOworfQorICAgIAorT3B0aW9uYWw8VmVjdG9yPFZh
cmlhYmxlKj4+JiBCM1BhcnNlckNvbnRleHQ6OnN0YWNrRm9yQ29udHJvbExldmVsKHVuc2lnbmVk
IGxldmVsKQoreworICAgIHJldHVybiBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXpl
KCkgLSAxIC0gbGV2ZWxdLnNlY29uZDsKK30KKworQmFzaWNCbG9jayomIEIzUGFyc2VyQ29udGV4
dDo6YmxvY2tGb3JDb250cm9sTGV2ZWwodW5zaWduZWQgbGV2ZWwpCit7CisgICAgcmV0dXJuIG1f
Y29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBsZXZlbF0uZmlyc3Q7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIFdBU01GdW5jdGlvbkluZm9ybWF0aW9uIGluZm8sIHVu
c2lnbmVkIG9wdExldmVsKQoreworICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQjNQYXJz
ZXJDb250ZXh0IGNvbnRleHQocHJvY2VkdXJlKTsKKyAgICBXQVNNRnVuY3Rpb25QYXJzZXI8QjNQ
YXJzZXJDb250ZXh0PiBwYXJzZXIoY29udGV4dCwgc291cmNlLCBpbmZvKTsKKyAgICBpZiAoIXBh
cnNlci5wYXJzZSgpKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jZWR1cmUsIG9w
dExldmVsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01CM1BhcnNlckNvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01CM1BhcnNlckNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDUxOTYxNDcwZGE0
ZjBmOWRmZmY4MjU4Mjc2NzkyNzc0N2E2NzljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzUGFyc2VyQ29udGV4dC5oCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1
ZGUgIldBU01Gb3JtYXQuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNl
IEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxh
dGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+JiwgV0FTTUZ1bmN0aW9u
SW5mb3JtYXRpb24sIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CisKK30gLy8gbmFtZXNwYWNlIFdB
U00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKaW5kZXggYjM2MzQxMDU2NzNh
YmQ1ODg3NWI0NjEyYzllM2Y2YTZhMTcyYTljYi4uNDUxY2Y2YTc5MTU5MGEwMjUwNzA0NTc4N2Yz
Mjg0NjFkOGEyYmViZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaApA
QCAtNTIsMTUgKzUyLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0Z1bmN0aW9uOwog
Ci1lbnVtIGNsYXNzIFdBU01UeXBlIDogdWludDhfdCB7CitlbnVtIGNsYXNzIFdBU01WYWx1ZVR5
cGUgOiB1aW50OF90IHsKICAgICBJMzIsCisgICAgSTY0LAogICAgIEYzMiwKICAgICBGNjQsCiAg
ICAgTnVtYmVyT2ZUeXBlcwogfTsKIAotZW51bSBjbGFzcyBXQVNNRXhwcmVzc2lvblR5cGUgOiB1
aW50OF90IHsKK2VudW0gY2xhc3MgV0FTTUZ1bmN0aW9uUmV0dXJuVHlwZSA6IHVpbnQ4X3Qgewog
ICAgIEkzMiwKKyAgICBJNjQsCiAgICAgRjMyLAogICAgIEY2NCwKICAgICBWb2lkLApAQCAtNjgs
OCArNzAsOCBAQCBlbnVtIGNsYXNzIFdBU01FeHByZXNzaW9uVHlwZSA6IHVpbnQ4X3QgewogfTsK
IAogc3RydWN0IFdBU01TaWduYXR1cmUgewotICAgIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5U
eXBlOwotICAgIFZlY3RvcjxXQVNNVHlwZT4gYXJndW1lbnRzOworICAgIFdBU01GdW5jdGlvblJl
dHVyblR5cGUgcmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8V0FTTVZhbHVlVHlwZT4gYXJndW1lbnRz
OwogfTsKIAogc3RydWN0IFdBU01GdW5jdGlvbkltcG9ydCB7CkBAIC05MSw2ICs5MywxMSBAQCBz
dHJ1Y3QgV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlIHsKICAgICBWZWN0b3I8SlNGdW5jdGlvbio+
IGZ1bmN0aW9uczsKIH07CiAKK3N0cnVjdCBXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbiB7CisgICAg
c2l6ZV90IHN0YXJ0OworICAgIHNpemVfdCBlbmQ7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk5YTZiN2E2YjM0MzFi
NzRlOTdlZTkyYWQ3ZGUyNTU4NzAxZGNiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsMTY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJXQVNNUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBX
QVNNIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2NsYXNzIFdBU01GdW5jdGlvblBh
cnNlciA6IHB1YmxpYyBXQVNNUGFyc2VyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1l
IENvbnRleHQ6OkV4cHJlc3Npb25UeXBlIEV4cHJlc3Npb25UeXBlOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ29udGV4dDo6QmxvY2tUeXBlIEJsb2NrVHlwZTsKKworICAgIFdBU01GdW5jdGlvblBh
cnNlcihDb250ZXh0JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIsIFdBU01G
dW5jdGlvbkluZm9ybWF0aW9uKTsKKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwor
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VCbG9jaygpOworICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlRXhwcmVzc2lvbihXQVNNT3BUeXBlKTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVu
c2lnbmVkIGxldmVsKTsKKworICAgIEJsb2NrVHlwZSYgYmxvY2tGb3JDb250cm9sTGV2ZWwodW5z
aWduZWQgbGV2ZWwpOworICAgIE9wdGlvbmFsPFZlY3RvcjxFeHByZXNzaW9uVHlwZT4+JiBzdGFj
a0ZvckNvbnRyb2xMZXZlbCh1bnNpZ25lZCBsZXZlbCk7CisKKyAgICBDb250ZXh0JiBtX2NvbnRl
eHQ7CisgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBtX2V4cHJlc3Npb25TdGFjazsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CitXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OldBU01GdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIHNvdXJjZUJ1ZmZlciwgV0FTTUZ1bmN0aW9uSW5mb3JtYXRpb24gaW5mbykKKyAgICA6IFdB
U01QYXJzZXIoc291cmNlQnVmZmVyLCBpbmZvLnN0YXJ0LCBpbmZvLmVuZCkKKyAgICAsIG1fY29u
dGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVChpbmZvLmVuZCA8PSBzb3VyY2VCdWZmZXIuc2l6
ZSgpKTsKKyAgICBBU1NFUlQoaW5mby5zdGFydCA8IGluZm8uZW5kKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wgV0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZSgpCit7CisgICAgdWludDMyX3QgbG9jYWxDb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGxvY2FsQ291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgbG9jYWxDb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9m
TG9jYWxzV2l0aFR5cGU7CisgICAgICAgIGlmICghcGFyc2VVSW50MzIobnVtYmVyT2ZMb2NhbHNX
aXRoVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV0FTTVZhbHVl
VHlwZSB0eXBlT2ZMb2NhbDsKKyAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2Nh
bCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9jb250ZXh0LmFkZExv
Y2FsKHR5cGVPZkxvY2FsLCBudW1iZXJPZkxvY2Fsc1dpdGhUeXBlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGFyc2VCbG9jaygpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9v
bCBXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2soKQoreworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIHVpbnQ4X3Qgb3A7CisgICAgICAgIGlmICghcGFyc2VVSW50Nyhv
cCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFwYXJzZUV4cHJl
c3Npb24oc3RhdGljX2Nhc3Q8V0FTTU9wVHlwZT4ob3ApKSkgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcHJvY2VzcyBvcDoi
LCBvcCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAob3AgPT0gV0FTTU9wVHlwZTo6RW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIFdB
U01GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKFdBU01PcFR5cGUgb3Ap
Cit7CisgICAgc3dpdGNoIChvcCkgeworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCB2YWx1ZSkg
Y2FzZSBuYW1lOgorICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9DQVNFKSB7Cisj
dW5kZWYgQ1JFQVRFX0NBU0UKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgbGVmdCA9IG1fZXhwcmVz
c2lvblN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJpZ2h0ID0gbV9l
eHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
OworICAgICAgICBpZiAoIW1fY29udGV4dC5iaW5hcnlPcChzdGF0aWNfY2FzdDxXQVNNQmluYXJ5
T3BUeXBlPihvcCksIGxlZnQsIHJpZ2h0LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBXQVNNT3BUeXBlOjpJMzJDb25zdDogewor
ICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihj
b25zdGFudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoV0FTTVZhbHVlVHlwZTo6STMyLCBj
b25zdGFudCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIFdBU01P
cFR5cGU6OkJsb2NrOiB7CisgICAgICAgIGlmICghbV9jb250ZXh0LmFkZEJsb2NrKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7CisgICAg
fQorCisgICAgICAgIGNhc2UgV0FTTU9wVHlwZTo6UmV0dXJuOiB7CisgICAgICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OworICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHJldHVybkNv
dW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBBU1NFUlQo
cmV0dXJuQ291bnQgPD0gMSk7CisgICAgICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+
IHJldHVyblZhbHVlczsKKyAgICAgICAgICAgIGlmIChyZXR1cm5Db3VudCkKKyAgICAgICAgICAg
ICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCkpOwor
CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZFJldHVybihXVEZNb3ZlKHJldHVyblZh
bHVlcykpOworICAgICAgICB9CisKKyAgICBjYXNlIFdBU01PcFR5cGU6OkVuZDogeworICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICB9CisK
KyAgICB9CisKKyAgICAvLyBVbmtub3duIG9wY29kZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdBU00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01N
b2R1bGVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5YTJmYmQ3NjlmNTQ0NTVmMmU5ODliYzgxM2Qw
ZjRjMDFhNTIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXQVNNTW9kdWxlUGFyc2VyLmgiCisKKyNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCisjaW5j
bHVkZSAiV0FTTU9wcy5oIgorI2luY2x1ZGUgIldBU01TZWN0aW9ucy5oIgorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCitz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2Jvb2wgV0FTTU1vZHVsZVBhcnNl
cjo6cGFyc2UoKQoreworICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8IDgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIW1hdGNoQ2hhcmFjdGVyKDApKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFtYXRjaFN0cmluZygiYXNtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3Qg
ZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOworICAgIGlm
ICghcGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9j
ZXNzaW5nIGhlYWRlci4iKTsKKworICAgIFdBU01TZWN0aW9uczo6U2VjdGlvbiBwcmV2aW91c1Nl
Y3Rpb24gPSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OlVua25vd247CisgICAgd2hpbGUgKG1fb2Zm
c2V0IDwgbV9zb3VyY2VMZW5ndGgpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nTG4oIlN0YXJ0aW5nIHRvIHBhcnNlIG5leHQgc2VjdGlvbiBhdCBvZmZzZXQ6ICIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgdWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7CisgICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbk5hbWVMZW5ndGgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUg
c2VjdGlvbidzIHNpemUuCisgICAgICAgIGlmIChtX29mZnNldCArIHNlY3Rpb25OYW1lTGVuZ3Ro
ICsgbWF4TEVCQnl0ZUxlbmd0aCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBXQVNNU2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFdBU01T
ZWN0aW9uczo6bG9va3VwKG1fc291cmNlLmRhdGEoKSArIG1fb2Zmc2V0LCBzZWN0aW9uTmFtZUxl
bmd0aCk7CisgICAgICAgIGlmICghV0FTTVNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3Vz
U2VjdGlvbiwgc2VjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25OYW1lTGVuZ3RoOworCisgICAgICAgIHVpbnQzMl90IHNlY3Rpb25M
ZW5ndGg7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbkxlbmd0aCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9vZmZzZXQg
KyBzZWN0aW9uTGVuZ3RoOworCisgICAgICAgIHN3aXRjaCAoc2VjdGlvbikgeworICAgICAgICBj
YXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OkZ1bmN0aW9uVHlwZXM6IHsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFy
c2luZyB0eXBlcy4iKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblR5cGVzKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6U2lnbmF0dXJlczogewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJz
aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIik7CisgICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rp
b25TaWduYXR1cmVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlv
bjo6RGVmaW5pdGlvbnM6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4iKTsKKyAgICAgICAg
ICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IFdBU01TZWN0aW9uczo6U2VjdGlvbjo6VW5rbm93bjogeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5n
LiIpOworICAgICAgICAgICAgbV9vZmZzZXQgKz0gc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigiRmluaXNoZWQgcGFyc2luZyBzZWN0aW9uLiIpOworCisgICAg
ICAgIGlmIChlbmQgIT0gbV9vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgcHJldmlvdXNTZWN0aW9uID0gc2VjdGlvbjsKKyAgICB9CisKKyAgICAvLyBUT0RPCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
blR5cGVzKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2dMbigiY291bnQ6ICIsIGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYg
KCFwYXJzZVVJbnQ3KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAodHlwZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGRhdGFMb2dMbigiR290IGZ1bmN0aW9uIHR5cGUuIik7
CisKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKKyAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihhcmd1bWVudENvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiYXJndW1lbnRDb3VudDog
IiwgYXJndW1lbnRDb3VudCk7CisKKyAgICAgICAgVmVjdG9yPFdBU01WYWx1ZVR5cGU+IGFyZ3Vt
ZW50VHlwZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VVSW50Nyh0eXBlKSB8fCB0eXBlID49IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYWx1ZVR5cGU6Ok51bWJlck9mVHlwZXMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5k
KHN0YXRpY19jYXN0PFdBU01WYWx1ZVR5cGU+KHR5cGUpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghcGFyc2VWYXJVSW50MSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgV0FTTUZ1bmN0aW9uUmV0dXJuVHlwZSByZXR1cm5UeXBlOworCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKHR5cGUpOworCisgICAgICAgIGlmICh0eXBl
KSB7CisgICAgICAgICAgICBXQVNNVmFsdWVUeXBlIHZhbHVlOworICAgICAgICAgICAgaWYgKCFw
YXJzZVZhbHVlVHlwZSh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFdBU01GdW5jdGlvblJldHVyblR5cGU+
KHZhbHVlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm5UeXBlID0gV0FTTUZ1
bmN0aW9uUmV0dXJuVHlwZTo6Vm9pZDsKKworICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBkbyBz
b21ldGhpbmcgd2l0aCB0aGlzIGRhdGEuLi4KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKQoreworICAg
IHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Z1bmN0aW9ucy5yZXNpemUoY291bnQpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
dHlwZU51bWJlcjsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKQoreworICAg
IHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY291bnQgIT0gbV9mdW5jdGlvbnMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNpemU7CisgICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fZnVuY3Rpb25zW2ld
OworICAgICAgICBpbmZvLnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgICAgIGluZm8uZW5kID0gbV9v
ZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdBU00KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkwZmJm
MjZjMDBmNTJiMGM3YjhkMWRiMjcyNDgxZDcxNmRjNGJlYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaApAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJXQVNNT3BzLmgiCisjaW5jbHVkZSAiV0FTTVBhcnNlci5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY2xhc3MgV0FTTU1vZHVsZVBhcnNl
ciA6IHB1YmxpYyBXQVNNUGFyc2VyIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYWdpY051bWJlciA9IDB4YzsKKworICAgIFdBU01Nb2R1bGVQYXJzZXIoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIpCisgICAgICAgIDogV0FTTVBhcnNlcihzb3VyY2VC
dWZmZXIsIDAsIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CisKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW5m
b3JtYXRpb24+IGZ1bmN0aW9uSW5mb3JtYXRpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQor
Citwcml2YXRlOgorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25UeXBl
cygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVz
KCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb25z
KCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24o
dWludDMyX3QgbnVtYmVyKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJsb2Nr
KCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKFdBU01PcFR5
cGUpOworCisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9uczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdBU00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNT3BzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNT3BzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDg3YThmNjFkYzU4YjZjMWYzMWRkNDg3NWJlNzZkOTU5ZjAxYjUzOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaApAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBK
U0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TUEVDSUFM
X09QKG1hY3JvKSBcCisgICAgbWFjcm8oSTMyQ29uc3QsIDB4MTApCisKKyNkZWZpbmUgRk9SX0VB
Q0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFjcm8pIFwKKyAgICBtYWNybyhCbG9jaywgMHgwMSkg
XAorICAgIG1hY3JvKFJldHVybiwgMHgwOSkgXAorICAgIG1hY3JvKEVuZCwgMHgwZikKKworI2Rl
ZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKQorCisjZGVmaW5lIEZPUl9FQUNIX1dB
U01fQklOQVJZX09QKG1hY3JvKSBcCisgICAgbWFjcm8oSTMyQWRkLCAweDQwKQorCisjZGVmaW5l
IEZPUl9FQUNIX1dBU01fT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1Ao
bWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19PUChtYWNybykgXAorICAg
IEZPUl9FQUNIX1dBU01fVU5BUllfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX0JJTkFS
WV9PUChtYWNybykKKworI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCkgbmFtZSA9
IGlkLAorCitlbnVtIFdBU01PcFR5cGUgOiB1aW50OF90IHsKKyAgICBGT1JfRUFDSF9XQVNNX09Q
KENSRUFURV9FTlVNX1ZBTFVFKQorfTsKKworCisKK2VudW0gY2xhc3MgV0FTTUJpbmFyeU9wVHlw
ZSA6IHVpbnQ4X3QgeworICAgIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKENSRUFURV9FTlVNX1ZB
TFVFKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I3VuZGVmIENSRUFURV9FTlVNX1ZBTFVFCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGFyc2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWVjMWI3
MWIzMDQwOGU4N2I4ODVkMjhiZTdmN2JhMzFmYzUyNmYwZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaApAQCAtMCwwICsxLDEzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgi
CisjaW5jbHVkZSAiV0FTTUZvcm1hdC5oIgorI2luY2x1ZGUgIldBU01PcHMuaCIKKyNpbmNsdWRl
ICJXQVNNU2VjdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvTEVCRGVjb2Rlci5oPgorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00gewor
CitjbGFzcyBXQVNNUGFyc2VyIHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWFnaWNOdW1iZXIgPSAweGI7CisKKyAgICBXQVNNUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCk7CisKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBtYXRjaENoYXJhY3RlcihjaGFyKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBtYXRjaFN0cmluZyhjb25zdCBjaGFyKik7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlVmFyVUludDMyKHVpbnQzMl90JiByZXN1bHQpIHsgcmV0dXJuIGRlY29k
ZVVJbnQzMihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0
KTsgfQorCisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhbHVlVHlwZShXQVNN
VmFsdWVUeXBlJiByZXN1bHQpOworCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtX3NvdXJj
ZTsKKyAgICBzaXplX3QgbV9zb3VyY2VMZW5ndGg7CisgICAgc2l6ZV90IG1fb2Zmc2V0OworfTsK
KworQUxXQVlTX0lOTElORSBXQVNNUGFyc2VyOjpXQVNNUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgc291cmNlQnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCisgICAgOiBtX3Nv
dXJjZShzb3VyY2VCdWZmZXIpCisgICAgLCBtX3NvdXJjZUxlbmd0aChlbmQpCisgICAgLCBtX29m
ZnNldChzdGFydCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPCBlbmQpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgV0FTTVBhcnNlcjo6bWF0Y2hDaGFyYWN0ZXIoY2hhciBjKQoreworICAgIGlmICht
X29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChjID09IG1fc291cmNlW21fb2Zmc2V0XSkgeworICAgICAgICBtX29mZnNldCsrOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgV0FTTVBhcnNlcjo6bWF0Y2hTdHJpbmcoY29uc3QgY2hhciogc3RyKQoreworICAg
IHVuc2lnbmVkIHN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgc3Ry
W2ldOyBpKyspIHsKKyAgICAgICAgaWYgKCFtYXRjaENoYXJhY3RlcihzdHJbaV0pKSB7CisgICAg
ICAgICAgICBtX29mZnNldCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
V0FTTVBhcnNlcjo6cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICBpZiAobV9v
ZmZzZXQgKyA0ID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihtX3NvdXJjZS5kYXRh
KCkgKyBtX29mZnNldCk7CisgICAgbV9vZmZzZXQgKz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6OnBhcnNlVUludDcodWludDhfdCYgcmVz
dWx0KQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IG1fc291cmNlW21fb2Zmc2V0KytdOworICAgIHJldHVy
biByZXN1bHQgPCAweDgwOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6cGFy
c2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpCit7CisgICAgdWludDMyX3QgdGVtcDsKKyAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKHRlbXApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odGVtcCk7CisgICAgcmV0dXJuIHRlbXAgPD0gMTsK
K30KKworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFdBU01W
YWx1ZVR5cGUmIHJlc3VsdCkKK3sKKyAgICB1aW50OF90IHZhbHVlOworICAgIGlmICghcGFyc2VV
SW50Nyh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodmFsdWUgPj0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oV0FTTVZhbHVlVHlwZTo6TnVtYmVyT2ZUeXBlcykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxXQVNNVmFsdWVUeXBlPih2
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdBU00KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAzMzAwMWVjZmVmMTcx
Y2MyODgwOTA5N2UwMDM4NTQyYTk4ZTBiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01QbGFuLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldBU01QbGFuLmgiCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5j
bHVkZSAiV0FTTUIzUGFyc2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldBU01Nb2R1bGVQYXJzZXIu
aCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCitzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK1BsYW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhfdD4g
c291cmNlKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oIlN0YXJ0aW5n
IHBsYW4uIik7CisgICAgV0FTTU1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoc291cmNlKTsKKyAg
ICBpZiAoIW1vZHVsZVBhcnNlci5wYXJzZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiUGFyc2lu
ZyBtb2R1bGUgZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2dMbigiUGFyc2VkIG1vZHVsZS4iKTsKKworICAgIGZvciAo
V0FTTUZ1bmN0aW9uSW5mb3JtYXRpb24gaW5mbyA6IG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9y
bWF0aW9uKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4o
IlByb2Nlc3NpbmcgZnVuY2lvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBhbmQgZW5k
aW5nIGF0OiAiLCBpbmZvLmVuZCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocGFyc2VBbmRDb21w
aWxlKHZtLCBzb3VyY2UsIGluZm8pKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdBU00K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hN2M3NzQzY2QwNWY5
YmYzYzg3MDMwM2U5MjExZGRjZTkzNGYzYzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJDb21waWxhdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsK
K2NsYXNzIENvbXBpbGF0aW9uOworfSAvLyBuYW1lc3BhY2UgQjMKKworbmFtZXNwYWNlIFdBU00g
eworCisvLyBUT0RPOiBUaGlzIHNob3VsZCBjcmVhdGUgYSBXQVNNIE1vZHVsZSBub3QgYSBsaXN0
IG9mIGZ1bmN0aW9ucy4KK2NsYXNzIFBsYW4geworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4gc291cmNlKTsKKworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPj4gcmVzdWx0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2VjdGlvbnMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNkZTE5Zjk2ZDg3ZWJlZjFjMmQ5ODU4MWI4ODUxOWVkN2Q1NmMyZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2VjdGlvbnMuY3BwCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0FTTVNlY3Rpb25zLmgiCisKKyNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNl
IFdBU00geworCitzdHJ1Y3QgU2VjdGlvbkRhdGEgeworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAg
ICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2VjdGlvbkRhdGFMZW5ndGggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oV0FTTVNlY3Rpb25zOjpTZWN0aW9uOjpVbmtub3duKTsKK3N0YXRpYyBj
b25zdCBTZWN0aW9uRGF0YSBzZWN0aW9uRGF0YVtzZWN0aW9uRGF0YUxlbmd0aF0geworI2RlZmlu
ZSBDUkVBVEVfU0VDVElPTl9EQVRBKG5hbWUsIHN0cikgeyBzaXplb2Yoc3RyKSAtIDEsIHN0ciB9
LAorICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTl9UWVBFKENSRUFURV9TRUNUSU9OX0RBVEEpCisj
dW5kZWYgQ1JFQVRFX1NFQ1RJT05fREFUQQorfTsKKworV0FTTVNlY3Rpb25zOjpTZWN0aW9uIFdB
U01TZWN0aW9uczo6bG9va3VwKGNvbnN0IHVpbnQ4X3QqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJEZWNvZGluZyBzZWN0aW9u
IHdpdGggbmFtZTogIiwgU3RyaW5nKG5hbWUsIGxlbmd0aCkpOworICAgIC8vIEkgZ3Vlc3Mgd2Ug
Y291bGQgZG8gc29tZXRoaW5nIGJldHRlciB0aGFuIGxpbmVhciBzZWFyY2ggaGVyZSBidXQgSSBk
b3VidCBpdCBtYXR0ZXJzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWN0aW9uRGF0
YUxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChzZWN0aW9uRGF0YVtpXS5sZW5ndGggIT0gbGVu
Z3RoKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghbWVtY21wKG5hbWUsIHNl
Y3Rpb25EYXRhW2ldLm5hbWUsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V0FTTVNlY3Rpb25zOjpTZWN0aW9uPihpKTsKKyAgICB9CisgICAgcmV0dXJuIFdBU01TZWN0
aW9uczo6U2VjdGlvbjo6VW5rbm93bjsKK30KKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlOWQxZTdhMzQy
YTljODY2NTVhMGJmY2U5YTIwMmY0NmU1MTRlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBX
QVNNIHsKKworLy8gVGhlc2Ugc2hvdWxkIGJlIGluIHRoZSBvcmRlciB0aGF0IHdlIGV4cGVjdCB0
aGVtIHRvIGJlIGluIHRoZSBiaW5hcnkuCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fU0VDVElPTl9U
WVBFKG1hY3JvKSBcCittYWNybyhGdW5jdGlvblR5cGVzLCAidHlwZSIpIFwKK21hY3JvKFNpZ25h
dHVyZXMsICJmdW5jdGlvbiIpIFwKK21hY3JvKERlZmluaXRpb25zLCAiY29kZSIpIFwKK21hY3Jv
KEVuZCwgImVuZCIpCisKK3N0cnVjdCBXQVNNU2VjdGlvbnMgeworICAgIGVudW0gY2xhc3MgU2Vj
dGlvbiB7CisjZGVmaW5lIENSRUFURV9TRUNUSU9OX0VOVU0obmFtZSwgc3RyKSBuYW1lLAorICAg
ICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT05fVFlQRShDUkVBVEVfU0VDVElPTl9FTlVNKQorI3Vu
ZGVmIENSRUFURV9TRUNUSU9OX0VOVU0KKyAgICAgICAgVW5rbm93bgorICAgIH07CisgICAgc3Rh
dGljIFNlY3Rpb24gbG9va3VwKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25lZCk7CisgICAgc3RhdGlj
IGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9uIHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCisgICAg
eworICAgICAgICAvLyBUaGlzIGFsbG93cyB1bmtub3duIHNlY3Rpb25zIGFmdGVyIEVuZCwgd2hp
Y2ggSSBkb3VidCB3aWxsIGV2ZXIgYmUgc3VwcG9ydGVkIGJ1dAorICAgICAgICAvLyB0aGVyZSBp
cyBubyByZWFzb24gdG8gcG90ZW50aWFsbHkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHku
CisgICAgICAgIGlmIChwcmV2aW91cyA9PSBTZWN0aW9uOjpVbmtub3duKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBwcmV2aW91cyA8IG5leHQ7CisgICAgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cu
aCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAppbmRleCAxM2UzZWRjYTMwYjVlNjNhYTBiMGVk
YjRjMjc1YjJkMDE2MTM0ZDg5Li5jMmVmNTc2NTUxNDQzODc3MmM5ZjI3MTMzODIxYmMwOGEyZmY3
ZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvRGF0YUxvZy5oCkBAIC00NSw5ICs0NSwxNiBAQCB2b2lkIGRhdGFMb2coY29uc3QgVHlw
ZXMmLi4uIHZhbHVlcykKICAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLik7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgordm9pZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMmLi4u
IHZhbHVlcykKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLiwgIlxuIik7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmRhdGFMb2c7Cit1c2luZyBXVEY6OmRh
dGFMb2dMbjsKIHVzaW5nIFdURjo6ZGF0YUxvZ0Y7CiB1c2luZyBXVEY6OmRhdGFMb2dGU3RyaW5n
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmggYi9Tb3VyY2UvV1RG
L3d0Zi9MRUJEZWNvZGVyLmgKaW5kZXggMWIyMDIxZWIxZDg3Y2I1Yjc3NmE5ZTA3NjA2ODJjN2Ex
MzNlMGY1OC4uNWQxYWQyMWEzZWJjYzgzZjBjYWQ3OGIzN2YwYjdmMzJhNjQ4NDBmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0xF
QkRlY29kZXIuaApAQCAtMjYsMjMgKzI2LDIwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNvbXBpbGVyLmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
Ci0jaW5jbHVkZSAiRGF0YUxvZy5oIgotCiAvLyBUaGlzIGZpbGUgY29udGFpbnMgYSBidW5jaCBv
ZiBoZWxwZXIgZnVuY3Rpb25zIGZvciBkZWNvZGluZyBMRUIgbnVtYmVycy4KIC8vIFNlZSBodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MRUIxMjggZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJv
dXQgdGhlCiAvLyBMRUIgZm9ybWF0LgogCiBjb25zdCBzaXplX3QgbWF4TEVCQnl0ZUxlbmd0aCA9
IDU7CiAKLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50MzIoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBieXRlcywgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90JiByZXN1bHQp
CitpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludDMyKGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBjb25zdCBzaXplX3QmIGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90
JiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKGJ5dGVzLnNpemUoKSA+IG9mZnNldCk7CisgICAgQVNT
RVJUKGxlbmd0aCA+IG9mZnNldCk7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlm
dCA9IDA7Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhMRUJCeXRlTGVuZ3RoLCBieXRl
cy5zaXplKCkgLSBvZmZzZXQgLSAxKTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExF
QkJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCAtIDEpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IHRydWU7ICsraSkgewogICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRlc1tvZmZzZXQrK107
CiAgICAgICAgIHJlc3VsdCB8PSAoYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OwpAQCAtNTYsMTIgKzUz
LDEyIEBAIGlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50MzIoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBieXRlcywgc2l6ZV90CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlu
bGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJbnQzMihjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGJ5dGVzLCBzaXplX3QmIG9mZnNldCwgaW50MzJfdCYgcmVzdWx0KQoraW5saW5lIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBj
b25zdCBzaXplX3QmIGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIGludDMyX3QmIHJlc3VsdCkKIHsK
LSAgICBBU1NFUlQoYnl0ZXMuc2l6ZSgpID4gb2Zmc2V0KTsKKyAgICBBU1NFUlQobGVuZ3RoID4g
b2Zmc2V0KTsKICAgICByZXN1bHQgPSAwOwogICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAgICBz
aXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExFQkJ5dGVMZW5ndGgsIGJ5dGVzLnNpemUoKSAtIG9m
ZnNldCAtIDEpOworICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4TEVCQnl0ZUxlbmd0aCwg
bGVuZ3RoIC0gb2Zmc2V0IC0gMSk7CiAgICAgdWludDhfdCBieXRlOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICBieXRlID0gYnl0ZXNbb2Zmc2V0KytdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286058</attachid>
            <date>2016-08-15 09:24:58 -0700</date>
            <delta_ts>2016-08-15 09:29:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160681-20160815092313.patch</filename>
            <type>text/plain</type>
            <size>75171</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWY3YzM2ZmQzZWE2MjZkOGNkOGI2MzRmYWU0NmNiMDMwMTQ4NTAzLi4xMTY2OTZkMWEzNmE5ODFk
NTMwMGVlY2RlZmRiYTgzNjdlODc4MDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5OSBAQAorMjAxNi0wOC0xNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV0FTTSBQYXJzZXIgYW5kIEIzIElSIGdlbmVyYXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjgx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRoZSBza2VsZXRvbiBmb3IgYSBXZWJBc3NlbWJseSBwaXBlbGluZS4gVGhlCisg
ICAgICAgIHBpcGVsaW5lIGlzIGRlc2lnbmVkIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzeSB0byBo
YXZlIGFzIG11Y2ggb2YKKyAgICAgICAgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdGhyZWFkZWQg
YXMgcG9zc2libGUuIFRoZSBmbG93IG9mIHRoZQorICAgICAgICBwaXBlbGluZSByb3VnaGx5IGdv
ZXMgYXMgZm9sbG93czoKKworICAgICAgICAxKSBDcmVhdGUgYSBXQVNNUGxhbiB3aXRoIHRoZSBW
TSBhbmQgYSBWZWN0b3Igb2YgdGhlCisgICAgICAgIGFzc2VtYmx5LiBDdXJyZW50bHkgdGhlIHBs
YW4gd2lsbCBwcm9jZXNzIGFsbCB0aGUgd29yaworICAgICAgICBzeW5jaHJvbm91c2x5LCBob3dl
dmVyLCBpbiB0aGUgZnV0dXJlIHRoaXMgY2FuIGJlIG9mZmxvYWRlZCB0bworICAgICAgICBvdGhl
ciB0aHJlYWRzLgorCisgICAgICAgIDIpIFRoZSBwbGFuIHdpbGwgcnVuIHRoZSBXQVNNTW9kdWxl
UGFyc2VyLCB3aGljaCBjb2xsYXRlcyBhbGwgdGhlCisgICAgICAgIGluZm9ybWF0aW9uIG5lZWRl
ZCB0byBjb21waWxlIGVhY2ggbW9kdWxlIGZ1bmN0aW9uCisgICAgICAgIGluZGVwZW5kZW50bHku
IFNpbmNlLCB3ZSBhcmUgc3RpbGwgaW4gdGhlIGVhcmx5IHBoYXNlcywgdGhlIG9ubHkKKyAgICAg
ICAgaW5mb3JtYXRpb24gaXMgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgYnl0ZSBvZiB0aGUgZnVu
Y3Rpb24ncworICAgICAgICBib2R5LiBUaGUgbW9kdWxlIHBhcnNlciwgaG93ZXZlciwgc3RpbGwg
c2NhbnMgYm90aCBhbmQKKyAgICAgICAgc2VtaS12YWxpZGF0ZXMgdGhlIHR5cGUgYW5kIHRoZSBm
dW5jdGlvbiBzZWN0aW9ucy4KKworICAgICAgICAzKSBFYWNoIGZ1bmN0aW9uIGlzIGRlY29kZWQg
YW5kIGNvbXBpbGVkLiBJbiB0aGUgZnV0dXJlIHRoaXMKKyAgICAgICAgc2hvdWxkIGFsc28gaW5j
bHVkZSBhIG9wY29kZSB2YWxpZGF0aW9uIHBoYXNlLiBUaGUKKyAgICAgICAgV0FTTUZ1bmN0aW9u
UGFyc2VyIGlzIHRlbXBsYXRpemVkIHNvIHRoYXQgYSB2YWxpZGF0b3Igc2hvdWxkIGJlCisgICAg
ICAgIGFibGUgdG8gdXNlIG1vc3Qgb2YgdGhlIHNhbWUgY29kZSB0aGUgQjMgSVIgZ2VuZXJhdG9y
IGRvZXMuCisKKyAgICAgICAgNCkgV2hlbiB0aGUgcGxhbiBoYXMgZmluaXNoZWQgaXQgd2lsbCBm
aWxsIGEgVmVjdG9yIG9mCisgICAgICAgIEIzOjpDb21waWxhdGlvbiBvYmplY3RzIHRoYXQgY29y
cmVzcG9uZCB0byB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbgorICAgICAgICBpbiB0aGUgV0FTTSBt
b2R1bGUuCisKKworICAgICAgICBUaGUgY3VycmVudCB0ZXN0aW5nIHBsYW4gZm9yIHRoZSBtb2R1
bGVzIGlzIHRvIGlubGluZSB0aGUgdGhlCisgICAgICAgIGJpbmFyeSBnZW5lcmF0ZWQgYnkgdGhl
IHNwZWMncyBPQ2FtbCBwcm90b3R5cGUuIFRoZSBpbmxpbmVkIGJpbmFyeQorICAgICAgICBpcyBw
YXNzZWQgdG8gYSBXQVNNUGxhbiB0aGVuIGludm9rZWQgdG8gY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGUKKyAgICAgICAgZnVuY3Rpb24uIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGFkZCBhIG1vcmUg
cm9idXN0IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHRlc3RXQVNN
LmNwcDoKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExp
bmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKGludm9rZSk6CisgICAgICAgIChydW5XQVNN
VGVzdHMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd2FzbS9KU1dBU01Nb2R1bGUuaDoK
KyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAg
ICAgKiB3YXNtL1dBU01CM0lSR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldB
U006OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXQVNNOjpC
M0lSR2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6OldBU006OkIzSVJHZW5lcmF0
b3I6OmJpbmFyeU9wKToKKyAgICAgICAgKEpTQzo6V0FTTTo6QjNJUkdlbmVyYXRvcjo6YWRkQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM0lSR2VuZXJhdG9yOjphZGRCbG9jayk6Cisg
ICAgICAgIChKU0M6OldBU006OkIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V0FTTTo6QjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V0FTTTo6
QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM0lSR2VuZXJhdG9y
Ojppbml0aWFsaXplSW5jb21taW5nVHlwZXMpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM0lSR2Vu
ZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6OldBU006OkIzSVJH
ZW5lcmF0b3I6OnN0YWNrRm9yQ29udHJvbExldmVsKToKKyAgICAgICAgKEpTQzo6V0FTTTo6QjNJ
UkdlbmVyYXRvcjo6YmxvY2tGb3JDb250cm9sTGV2ZWwpOgorICAgICAgICAoSlNDOjpXQVNNOjpw
YXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV0FTTUIzSVJHZW5lcmF0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvRGF0YUxvZy5oLgorICAgICAgICAqIHdhc20vV0FTTUZv
cm1hdC5oOgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OldBU01GdW5jdGlv
blBhcnNlcik6CisgICAgICAgIChKU0M6OldBU006OldBU01GdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFy
c2VyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldBU006OldBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
blR5cGVzKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvblNpZ25hdHVyZXMpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMpOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmguCisgICAgICAgIChKU0M6
OldBU006OldBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIpOgorICAgICAgICAoSlND
OjpXQVNNOjpXQVNNTW9kdWxlUGFyc2VyOjpmdW5jdGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAg
KiB3YXNtL1dBU01PcHMuaDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvRGF0YUxvZy5oLgor
ICAgICAgICAqIHdhc20vV0FTTVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6
V0FTTVBhcnNlcjo6cGFyc2VWYXJVSW50MzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFy
c2VyOjpXQVNNUGFyc2VyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6bWF0Y2hD
aGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyOjptYXRjaFN0cmluZyk6
CisgICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlVUludDMyKToKKyAgICAgICAg
KEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6OldBU006
OldBU01QYXJzZXI6OnBhcnNlVmFyVUludDEpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFy
c2VyOjpwYXJzZVZhbHVlVHlwZSk6CisgICAgICAgICogd2FzbS9XQVNNUGxhbi5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaC4KKyAgICAgICAgKEpTQzo6V0FTTTo6UGxh
bjo6UGxhbik6CisgICAgICAgICogd2FzbS9XQVNNUGxhbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9EYXRhTG9nLmguCisgICAgICAgICogd2FzbS9XQVNNU2VjdGlvbnMuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmguCisgICAgICAgIChKU0M6OldBU006OldB
U01TZWN0aW9uczo6bG9va3VwKToKKyAgICAgICAgKiB3YXNtL1dBU01TZWN0aW9ucy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmguCisgICAgICAgIChKU0M6OldBU006OldB
U01TZWN0aW9uczo6dmFsaWRhdGVPcmRlcik6CisKIDIwMTYtMDgtMDggIEJyaWFuIEJ1cmcgIDxi
YnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY2xlYW4gdXAgcHJlZml4
aW5nIG9mIEF1dG9tYXRpb24gcHJvdG9jb2wgZ2VuZXJhdGVkIGZpbGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYyNmIyZWJm
ZmUyY2FkYTM3Y2NkYWUzY2VkZjZlZmM4NTNiNjE2YjEuLjVhM2UxMDM2ODFlNTJkNzZkMGVkZGU3
YjEwMTVjY2FiNjg1M2JiZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDgtMTUgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IFdB
U00gUGFyc2VyIGFuZCBCMyBJUiBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDY4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0RhdGFMb2cuaDoKKyAgICAgICAgKFdURjo6ZGF0
YUxvZ0xuKTogQWRkIGEgbmV3IGRhdGFMb2cgZnVuY3Rpb24sIGRhdGFMb2dMbiB0aGF0CisgICAg
ICAgIGF1dG9tYWdpY2FsbHkgaW5jbHVkZXMgYSBuZXcgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBw
cmludC4KKyAgICAgICAgKiB3dGYvTEVCRGVjb2Rlci5oOgorICAgICAgICAoZGVjb2RlVUludDMy
KToKKyAgICAgICAgKGRlY29kZUludDMyKTogQ2hhbmdlIHRoZSBMRUJEZWNvZGVyIHRvIHRha2Ug
YSBwb2ludGVyIGFuZCBsZW5ndGgKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBWZWN0b3IuCisKIDIw
MTYtMDgtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBXVEYgbmVl
ZHMgYSB2YXJpYW50IGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGUzMGRjOWU0ZDAyMDM2MjBiMTRjYTIyOGI0ZWIyYmI0ZmRlY2VmMGQuLmE3NzVmODJhYWQ0
MDI2MmEzYjY0NmMzYTM4MmQ3MjEwNWE5NGQxNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMTc0LDYgKzExNzQsOCBAQAogCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyog
UnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5
NTJCOTE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAv
KiBUeXBlUHJvZmlsZXIuY3BwICovOyB9OworCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyog
V0FTTVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5oICovOyB9OworCQk1MzEzNzRC
RjFENUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01Q
bGFuLmNwcCAqLzsgfTsKIAkJNTM0ODZCQjcxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0ODZC
QjYxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNTM0ODZCQkIxQzE4RTg0NTAwRjZGM0FGIC8q
IEpTVHlwZWRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCAqLzsg
fTsKIAkJNTM0OTAyODUxQzcyNzZCNzAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ5MDI4MjFDNzI0
MkM4MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLzsgfTsKQEAgLTExODcsNiArMTE4
OSwxNSBAQAogCQk1MzlFQjA3QTFENTU2MDcwMDBDODJFRjcgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsg
fTsKIAkJNTM5RUIwODExRDU1NjA4QTAwQzgyRUY3IC8qIHRlc3RXQVNNLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCMDcxMUQ1NTNERjgwMEM4
MkVGNyAvKiB0ZXN0V0FTTS5jcHAgKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAv
KiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi87
IH07CisJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLzsgfTsKKwkJNTNGNDBFODcxRDU4RjlENjAwOTlB
MUI2IC8qIFdBU01TZWN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0Y0MEU4NjFENThGOUQ2MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmNw
cCAqLzsgfTsKKwkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBF
OEExRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovOyB9OworCQk1M0Y0
MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdB
U01QYXJzZXIuaCAqLzsgfTsKKwkJNTNGNDBFOEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lS
R2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi87
IH07CisJCTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MDFENTkwMzAyMDA5OUEx
QjYgLyogV0FTTU9wcy5oICovOyB9OworICAgICAgICAgICAgICAgIDUzRjQwRTkzMUQ1QTRBQjMw
MDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lS
R2VuZXJhdG9yLmggKi87IH07CisJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9k
dWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oICovOyB9Owor
CQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5NjFENUE3QkVD
MDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi87IH07CiAJCTUzRjZCRjZEMUMzRjA2
MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEw
MEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNG
MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFF
MDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTNGQTJBRTMxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLzsgfTsKQEAgLTMzNDIsNiAr
MzM1Myw4IEBACiAJCTUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2Zp
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXQVNNUGxhbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTVBsYW4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzQ4NkJCNjFDMTc5NUMzMDBGNkYzQUYgLyogSlNUeXBlZEFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ4NkJCQTFDMThFODQ1MDBGNkYzQUYgLyog
SlNUeXBlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
VHlwZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDkwMjgyMUM3
MjQyQzgwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gVHlwZWRBcnJheUNUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9U
eXBlZEFycmF5Q1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM1OSw2
ICszMzcyLDE1IEBACiAJCTUzOUVCMDgwMUQ1NTYwNzAwMEM4MkVGNyAvKiB0ZXN0V0FTTSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1h
Y2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdFdBU007IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUzOUZCOEI5MUM5OURBN0MwMDk0
MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YyNTZF
MTFCODdFMjgwMDBCNEI3NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFODQxRDU4Rjk3NzAwOTlB
MUI2IC8qIFdBU01TZWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVNNU2VjdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFODYxRDU4
RjlENjAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXQVNNU2VjdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5jdGlvblBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FT
TVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAv
KiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXQVNNQjNJUkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdBU01PcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKyAg
ICAgICAgICAgICAgICA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2
IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0FTTU1vZHVsZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5
NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8q
IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTUyNSw3ICs1NTQ3LDE4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3Qjk4RDEzNDFCNjBDRDVB
MDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLywKIAkJCQk3Qjk4RDEzNTFCNjBDRDVBMDAy
M0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8sCisJCQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2
IC8qIFdBU01PcHMuaCAqLywKIAkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZv
cm1hdC5oICovLAorCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVy
YXRvci5jcHAgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzRjQwRTkyMUQ1
QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAorCQkJCTUzRjQwRThBMUQ1
OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLywKKwkJCQk1M0Y0MEU5NjFE
NUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCisJCQkJNTNGNDBFOTQx
RDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKKwkJCQk1MzEzNzRCRTFE
NUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwICovLAorCQkJCTUzMTM3NEJDMUQ1Q0U2NzYw
MEFGN0EwQiAvKiBXQVNNUGxhbi5oICovLAorCQkJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAv
KiBXQVNNUGFyc2VyLmggKi8sCisJCQkJNTNGNDBFODYxRDU4RjlENjAwOTlBMUI2IC8qIFdBU01T
ZWN0aW9ucy5jcHAgKi8sCisJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdBU01TZWN0
aW9ucy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB3YXNtOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTcxOTAsNiArNzIyMyw3IEBACiAJCQkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2
IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAw
MzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTk1MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNN
TW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZG
OEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBG
MUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYx
MzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNzI3NSw2ICs3
MzA5LDcgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1
Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMTE4MkI3QTA0MDBG
NkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU4
NTFENThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlE
QzlBMEMxRjFEMkQ5Q0IxMDA4NTEyNEUgLyogQjNDYXNlQ29sbGVjdGlvbklubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJH
Qy5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDE3LDYgKzc0NTIsNyBAQAogCQkJCTBGNzAyNUFBMTcx
NEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFC
NiAvKiBXQVNNUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQwRTRBODFDNDk3Rjc0MDBB
NTc3RkEgLyogQWlyT3Bjb2RlR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJF
RTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTc1NzEsNiArNzYwNyw3IEBACiAJCQkJMEYyQjY2QUQx
N0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzEz
NzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJB
QUJDREU3MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJCRDk4MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTRFOEVCMDE4QkZGQkJCMDA1NTZEMjggLyogR0NTZWdtZW50ZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkBAIC03NzgyLDYgKzc4MTksNyBAQAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0NDYw
IC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU4QjFENTkwMUJC
MDA5OUExQjYgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZC
NzMxRDFCREEwOEVGMDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNUZEMDA4NjE4OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xl
QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QzNBMUE2MThDMDQ5MDIwMEM5NTkzQSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNzg0MSw2ICs3
ODc5LDcgQEAKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTEyMjAyNzFCRTdGNThDMDAzOUU2RjIgLyogSklU
QWRkR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRF
N0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNG
NDBFOTExRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
Mjk5RDlFMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5
MERENzAxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDTG9vcFN0YWNrLmggaW4gSGVhZGVycyAq
LywKQEAgLTc4ODksNiArNzkyOCw3IEBACiAJCQkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBCMDFC
RDU5OTRFMDBGNDU3NUMgLyogbGF6eXdyaXRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDMxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDUzRjQwRTkzMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJ
UkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYw
IC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENGM0Q1NkIxQ0QyOTQ3MjAwM0Q1
QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
MTg3QTAyMUJGQkU1NjEwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
LApAQCAtODkyMSw2ICs4OTYxLDcgQEAKIAkJCQkwRkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNTE3
QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjYxODMyOTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzRjQwRTg3MUQ1OEY5RDYwMDk5QTFCNiAv
KiBXQVNNU2VjdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAw
QzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZF
MTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMz
OEUxMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtOTEzMyw2ICs5MTc0LDcgQEAKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUg
LyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4
NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUxNEIyQzIxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzEzNzRCRjFENUNFOTUwMDBBRjdBMEIgLyogV0FTTVBsYW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2Ny
aXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIw
MTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTk1MDksNiArOTU1MSw3IEBACiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8q
IFZNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBW
TUVudHJ5U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxODdBMDExQkZCRTU1RTAwMzhC
QkNBIC8qIEpJVE11bEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0Y0MEU4RjFE
NTkwMjgyMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMjY3MThCQTQxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBX
YXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0Qg
LyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk1MTgsNiArOTU2MSw3IEBACiAJ
CQkJQTdDQTNBRTMxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjMzOERGOTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFr
TWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0Y0MEU5NzFENUE3QkVDMDA5OUExQjYg
LyogV0FTTU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FFNTE3REE0
MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNNLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKaW5kZXggMDAyMjUyNzc2YmI0
YTVhMzQyZjkzNmU1ZGU3OGY0Nzc0NjEzZWJlNC4uMDdhMjBmOTUwOTE2Y2ExYzE2Mjc3MTEzMjE5
ODY0OTM1NDdjNzlhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNN
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCkBAIC0yNSw3ICsy
NSwxMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9u
LmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXQVNNUGxhbi5oIgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xFQkRlY29kZXIuaD4KIApAQCAtMzgsNiArNDIs
NyBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX2FyZ3VtZW50czsKICAgICBib29s
IG1fcnVuTEVCVGVzdHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9ydW5XQVNNVGVzdHMgeyBmYWxz
ZSB9OwogCiAgICAgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQsIGNoYXIqKik7CiB9OwpAQCAtNDcs
NiArNTIsNyBAQCBzdGF0aWMgTk9fUkVUVVJOIHZvaWQgcHJpbnRVc2FnZVN0YXRlbWVudChib29s
IGhlbHAgPSBmYWxzZSkKICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiB0ZXN0V0FTTSBbb3B0
aW9uc11cbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiICAtaHwtLWhlbHAgIFByaW50cyB0aGlz
IGhlbHAgbWVzc2FnZVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC1sfC0tbGViICAgUnVu
cyB0aGUgTEVCIGRlY29kZXIgdGVzdHNcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtd3wt
LXdlYiAgIFJ1biB0aGUgV0FTTSB0ZXN0c1xuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcbiIp
OwogCiAgICAgZXhpdChoZWxwID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKQEAgLTYz
LDYgKzY5LDkgQEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogCiAgICAgICAgIGlmICghc3RyY21wKGFyZywgIi1sIikgfHwgIXN0cmNtcChh
cmcsICItLWxlYiIpKQogICAgICAgICAgICAgbV9ydW5MRUJUZXN0cyA9IHRydWU7CisKKyAgICAg
ICAgaWYgKCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0td2ViIikpCisgICAg
ICAgICAgICBtX3J1bldBU01UZXN0cyA9IHRydWU7CiAgICAgfQogCiAgICAgZm9yICg7IGkgPCBh
cmdjOyArK2kpCkBAIC0xMDksNyArMTE4LDcgQEAgdm9pZCBDb21tYW5kTGluZTo6cGFyc2VBcmd1
bWVudHMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0gVmVjdG9yPHVpbnQ4X3Q+IGluaXQ7IFwKICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0
YXJ0T2Zmc2V0OyBcCiAgICAgICAgIHVpbnQzMl90IHJlc3VsdDsgXAotICAgICAgICBib29sIHN0
YXR1cyA9IGRlY29kZVVJbnQzMih2ZWN0b3IsIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBi
b29sIHN0YXR1cyA9IGRlY29kZVVJbnQzMih2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpLCBv
ZmZzZXQsIHJlc3VsdCk7IFwKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdHVzID09IGV4cGVj
dGVkU3RhdHVzKTsgXAogICAgICAgICBpZiAoZXhwZWN0ZWRTdGF0dXMpIHsgXAogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IGV4cGVjdGVkUmVzdWx0KTsgXApAQCAtMTU3LDcg
KzE2Niw3IEBAIHZvaWQgQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFy
KiogYXJndikKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90
PiBpbml0OyBcCiAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAogICAgICAg
ICBpbnQzMl90IHJlc3VsdDsgXAotICAgICAgICBib29sIHN0YXR1cyA9IGRlY29kZUludDMyKHZl
Y3Rvciwgb2Zmc2V0LCByZXN1bHQpOyBcCisgICAgICAgIGJvb2wgc3RhdHVzID0gZGVjb2RlSW50
MzIodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXR1cyA9PSBleHBlY3RlZFN0YXR1cyk7IFwKICAgICAgICAg
aWYgKGV4cGVjdGVkU3RhdHVzKSB7IFwKICAgICAgICAgICAgIGludDMyX3QgZXhwZWN0ZWQgPSBl
eHBlY3RlZFJlc3VsdDsgXApAQCAtMTczLDYgKzE4MiwxMTcgQEAgc3RhdGljIHZvaWQgcnVuTEVC
VGVzdHMoKQogICAgIEZPUl9FQUNIX1NJR05FRF9MRUJfVEVTVChURVNUX1NJR05FRF9MRUJfREVD
T0RFKQogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCitzdGF0aWMgSlNDOjpWTSogdm07
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgV0FTTTsKK3VzaW5nIG5h
bWVzcGFjZSBCMzsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorVCBpbnZva2UoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0ciwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKK3sKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8
VCgqKShBcmd1bWVudHMuLi4pPihwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJu
IGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KK1QgaW52b2tlKGNvbnN0IENvbXBpbGF0aW9uJiBjb2RlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBpbnZva2U8VD4oY29kZS5jb2RlKCks
IGFyZ3VtZW50cy4uLik7Cit9CisKKy8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVz
Lgorc3RhdGljIHZvaWQgcnVuV0FTTVRlc3RzKCkKK3sKKyAgICB7CisgICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOiAobW9kdWxlIChmdW5jICJyZXR1cm4taTMyIiAocmVzdWx0IGkzMikgKHJldHVy
biAoaTMyLmNvbnN0IDUpKSkgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewor
ICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwNCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHg4NSwgMHg4MCwgMHg4MCwKKyAgICAg
ICAgICAgIDB4MDAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDgsIDB4NjYsIDB4
NzUsIDB4NmUsIDB4NjMsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4ODIsCisgICAgICAgICAg
ICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA2LCAweDY1LCAweDc4LCAweDcwLCAw
eDZmLCAweDcyLCAweDc0LCAweDhkLCAweDgwLCAweDgwLCAweDAwLAorICAgICAgICAgICAgMHgw
MSwgMHgwMCwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwg
MHg2OSwgMHgzMywgMHgzMiwgMHgwNCwgMHg2MywgMHg2ZiwKKyAgICAgICAgICAgIDB4NjQsIDB4
NjUsIDB4OGIsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDAsIDB4MTAsIDB4MDUsIDB4MDksIDB4MDEsCisgICAgICAgICAgICAweDBmCisgICAgICAg
IH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4u
cmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0
YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0p
ID09IDUpOworICAgIH0KKworCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1v
ZHVsZSAoZnVuYyAicmV0dXJuLWkzMiIgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGkzMi5hZGQgKGkz
Mi5jb25zdCA1KSAoaTMyLmNvbnN0IDYpKSkpICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDQsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4ODUsIDB4ODAsIDB4
ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA4
LCAweDY2LCAweDc1LCAweDZlLCAweDYzLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDgyLAor
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHg2NSwgMHg3
OCwgMHg3MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHg4ZCwgMHg4MCwgMHg4MCwgMHgwMCwKKyAgICAg
ICAgICAgIDB4MDEsIDB4MDAsIDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4
NmUsIDB4MmQsIDB4NjksIDB4MzMsIDB4MzIsIDB4MDQsIDB4NjMsIDB4NmYsCisgICAgICAgICAg
ICAweDY0LCAweDY1LCAweDhlLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDg5LCAweDgwLCAw
eDgwLCAweDAwLCAweDAwLCAweDEwLCAweDA1LCAweDEwLCAweDA2LAorICAgICAgICAgICAgMHg0
MCwgMHgwOSwgMHgwMSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0s
IHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdKSA9PSAxMSk7CisgICAgfQorICAgIAorICAgIHsK
KyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgInJldHVybi1pMzIiIChy
ZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChpMzIuYWRkIChpMzIuY29uc3QgNSkgKGkzMi5j
b25zdCAzKSkgKGkzMi5jb25zdCAzKSkpKSApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAw
eDAwLCAweDAwLCAweDA0LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDg1LCAweDgwLCAweDgw
LAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwg
MHg2NiwgMHg3NSwgMHg2ZSwgMHg2MywgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg4MiwKKyAg
ICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjUsIDB4Nzgs
IDB4NzAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4OGQsIDB4ODAsIDB4ODAsIDB4MDAsCisgICAgICAg
ICAgICAweDAxLCAweDAwLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAweDZl
LCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDA0LCAweDYzLCAweDZmLAorICAgICAgICAgICAg
MHg2NCwgMHg2NSwgMHg5MSwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4YywgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwMywKKyAgICAgICAgICAgIDB4NDAs
IDB4MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MDEsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAg
ICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgp
ICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXSkgPT0gMTEpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206IChtb2R1bGUgKGZ1bmMgInJl
dHVybi1pMzIiIChyZXN1bHQgaTMyKSAoYmxvY2sgKHJldHVybiAoaTMyLmFkZCAoaTMyLmFkZCAo
aTMyLmNvbnN0IDUpIChpMzIuY29uc3QgMykpIChpMzIuY29uc3QgMykpKSkpICkKKyAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMs
IDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NzQsIDB4NzksIDB4NzAsIDB4
NjUsIDB4ODUsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDAwLCAweDAxLCAweDQwLCAweDAw
LCAweDAxLCAweDAxLCAweDA4LCAweDY2LCAweDc1LCAweDZlLCAweDYzLCAweDc0LCAweDY5LCAw
eDZmLCAweDZlLCAweDgyLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNiwgMHg2NSwgMHg3OCwgMHg3MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHg4ZCwgMHg4MCwg
MHg4MCwgMHgwMCwKKyAgICAgICAgICAgIDB4MDEsIDB4MDAsIDB4MGEsIDB4NzIsIDB4NjUsIDB4
NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MmQsIDB4NjksIDB4MzMsIDB4MzIsIDB4MDQsIDB4NjMs
IDB4NmYsCisgICAgICAgICAgICAweDY0LCAweDY1LCAweDkzLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweDhlLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDA1LCAweDEw
LAorICAgICAgICAgICAgMHgwMywgMHg0MCwgMHgxMCwgMHgwMywgMHg0MCwgMHgwOSwgMHgwMSwg
MHgwZiwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0p
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJl
Y3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
ZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdKSA9PSAxMSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CkBAIC0x
ODEsNiArMzAxLDE4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBpZiAo
b3B0aW9ucy5tX3J1bkxFQlRlc3RzKQogICAgICAgICBydW5MRUJUZXN0cygpOwogCisKKyAgICBp
ZiAob3B0aW9ucy5tX3J1bldBU01UZXN0cykgeworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAgIHZtID0gJkpTQzo6Vk06
OmNyZWF0ZShKU0M6OkxhcmdlSGVhcCkubGVha1JlZigpOworICAgICAgICBydW5XQVNNVGVzdHMo
KTsKKyNlbHNlCisgICAgICAgIGRhdGFMb2dMbigiV0FTTSBpcyBub3QgZW5hYmxlZCEiKTsKKyAg
ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgfQorCiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAppbmRleCAyZDE2NzkxY2M1NDdhODJlMzMxNjc0YmMx
ZTNkNDY5NDhlZjUwMTcxLi42MWRmOWY1M2ZiYjMzNDA0MWE3ODMwNzFlOWEyOWJiNDBjZDg0OThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaApAQCAtNzksNyAr
NzksNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+JiBzaWduYXR1cmVzKCkg
eyByZXR1cm4gbV9zaWduYXR1cmVzOyB9CiAgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydD4m
IGZ1bmN0aW9uSW1wb3J0cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRzOyB9CiAgICAgVmVj
dG9yPFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4mIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOyB9Ci0gICAgVmVjdG9yPFdB
U01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcygpIHsgcmV0dXJuIG1fZ2xvYmFsVmFyaWFibGVU
eXBlczsgfQorICAgIFZlY3RvcjxXQVNNVmFsdWVUeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcygp
IHsgcmV0dXJuIG1fZ2xvYmFsVmFyaWFibGVUeXBlczsgfQogICAgIFZlY3RvcjxXQVNNRnVuY3Rp
b25EZWNsYXJhdGlvbj4mIGZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlv
bkRlY2xhcmF0aW9uczsgfQogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGU+JiBm
dW5jdGlvblBvaW50ZXJUYWJsZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uUG9pbnRlclRhYmxlczsg
fQogCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+
IG1fc2lnbmF0dXJlczsKICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0PiBtX2Z1bmN0aW9u
SW1wb3J0czsKICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlPiBtX2Z1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlczsKLSAgICBWZWN0b3I8V0FTTVR5cGU+IG1fZ2xvYmFsVmFyaWFi
bGVUeXBlczsKKyAgICBWZWN0b3I8V0FTTVZhbHVlVHlwZT4gbV9nbG9iYWxWYXJpYWJsZVR5cGVz
OwogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9mdW5jdGlvbkRlY2xhcmF0
aW9uczsKICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlPiBtX2Z1bmN0aW9uUG9p
bnRlclRhYmxlczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJH
ZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNmNmZDBkMmMwNDVkYjdlNzE2NjE5MWY4OWZjMzlm
N2UxZjc3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNQjNJUkdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0FTTUIzSVJHZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIK
KyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKKyNpbmNsdWRlICJXQVNNRnVuY3Rpb25QYXJz
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKwordXNpbmcgbmFtZXNw
YWNlIEIzOworCitjbGFzcyBCM0lSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZh
bHVlKiBFeHByZXNzaW9uVHlwZTsKKworICAgIEIzSVJHZW5lcmF0b3IoUHJvY2VkdXJlJik7CisK
KyAgICB2b2lkIGFkZExvY2FsKFdBU01WYWx1ZVR5cGUsIHVpbnQzMl90KTsKKyAgICBFeHByZXNz
aW9uVHlwZSBhZGRDb25zdGFudChXQVNNVmFsdWVUeXBlLCB1aW50NjRfdCk7CisKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBiaW5hcnlPcChXQVNNQmluYXJ5T3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jaygpOworICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGV4cHJlc3Np
b25TdGFjayk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IFZl
Y3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJldHVyblZhbHVlcyk7CisKK3ByaXZhdGU6CisgICAg
T3B0aW9uYWw8VmVjdG9yPFZhcmlhYmxlKj4+JiBzdGFja0ZvckNvbnRyb2xMZXZlbCh1bnNpZ25l
ZCk7CisgICAgQmFzaWNCbG9jayogYmxvY2tGb3JDb250cm9sTGV2ZWwodW5zaWduZWQpOworICAg
IHZvaWQgdW5pZnkoVmFyaWFibGUqIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNl
KTsKKyAgICBWZWN0b3I8VmFyaWFibGUqPiBpbml0aWFsaXplSW5jb21taW5nVHlwZXMoQmFzaWNC
bG9jayosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mKTsKKyAgICB2b2lkIHVuaWZ5VmFs
dWVzV2l0aExldmVsKGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIHJlc3VsdFN0YWNrLCB1
bnNpZ25lZCk7CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBtX2N1
cnJlbnRCbG9jazsKKyAgICAvLyBUaGlzIGlzIGEgcGFpciBvZiB0aGUgY29udGludWF0aW9uIGFu
ZCB0aGUgdHlwZXMgZXhwZWN0ZWQgb24gdGhlIHN0YWNrIGZvciB0aGF0IGNvbnRpbnVhdGlvbi4K
KyAgICBWZWN0b3I8c3RkOjpwYWlyPEJhc2ljQmxvY2sqLCBPcHRpb25hbDxWZWN0b3I8VmFyaWFi
bGUqPj4+PiBtX2NvbnRyb2xTdGFjazsKK307CisKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgOiBtX3Byb2MocHJvY2VkdXJlKQoreworICAg
IG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7Cit9CisKK3ZvaWQgQjNJUkdlbmVy
YXRvcjo6YWRkTG9jYWwoV0FTTVZhbHVlVHlwZSwgdWludDMyX3QpCit7CisgICAgLy8gVE9ETzog
QWRkIGxvY2Fscy4KK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjpiaW5hcnlPcChXQVNNQmluYXJ5
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBXQVNN
QmluYXJ5T3BUeXBlOjpJMzJBZGQ6IHsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSBC
Mzo6SW50MzIgJiYgcmlnaHQtPnR5cGUoKSA9PSBCMzo6SW50MzIpOworICAgICAgICByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgT3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIH0KK30KKwor
QjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQo
V0FTTVZhbHVlVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFdBU01WYWx1ZVR5cGU6OkkzMjoKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZSkpOworICAgIGNhc2UgV0FTTVZhbHVlVHlwZTo6STY0OgorICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIHZhbHVlKTsKKyAgICBjYXNlIFdBU01WYWx1ZVR5cGU6OkYzMjoKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RGbG9hdFZhbHVlPihtX3By
b2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKSkpOworICAgIGNhc2UgV0FTTVZhbHVlVHlwZTo6RjY0OgorICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCbG9jaygpCit7CisgICAgbV9jb250cm9s
U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fcHJvYy5hZGRCbG9jaygpLCBOdWxsb3B0KSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgZXhwcmVzc2lvblN0YWNrKQoreworICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCB3ZSBhcmUgZXhpdGluZyB0aGUgZnVuY3Rpb24uCisgICAgaWYgKCFtX2NvbnRyb2xT
dGFjay5zaXplKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHJlcXVpcmUgdGhl
IHN0YWNrIGlzIGVtcHR5PyBJdCdzIG5vdCBjbGVhciBmcm9tIHRoZSBjdXJyZW50IHNwZWMuCisg
ICAgICAgIHJldHVybiAhZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKKyAgICB9CisKKyAgICB1bmlm
eVZhbHVlc1dpdGhMZXZlbChleHByZXNzaW9uU3RhY2ssIDApOworCisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpLmZpcnN0OworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBWZWN0b3I8RXhwcmVzc2lv
blR5cGUsIDE+JiByZXR1cm5WYWx1ZXMpCit7CisgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXpl
KCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4o
KSwgcmV0dXJuVmFsdWVzWzBdKTsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBPcmlnaW4oKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFyaWFibGUqIHZh
cmlhYmxlLCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCit7CisgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlhYmxlLCBz
b3VyY2UpOworfQorCitWZWN0b3I8VmFyaWFibGUqPiBCM0lSR2VuZXJhdG9yOjppbml0aWFsaXpl
SW5jb21taW5nVHlwZXMoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIHNvdXJjZSkKK3sKKyAgICBWZWN0b3I8VmFyaWFibGUqPiByZXN1bHQ7CisgICAgcmVz
dWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc291cmNlLnNpemUoKSk7CisgICAgZm9yIChFeHBy
ZXNzaW9uVHlwZSBleHByIDogc291cmNlKSB7CisgICAgICAgIEFTU0VSVChleHByLT50eXBlKCkg
IT0gVm9pZCk7CisgICAgICAgIFZhcmlhYmxlKiB2YXIgPSBtX3Byb2MuYWRkVmFyaWFibGUoZXhw
ci0+dHlwZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXIpOworICAgICAgICBibG9jay0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHZhcik7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCM0lSR2VuZXJhdG9yOjp1
bmlmeVZhbHVlc1dpdGhMZXZlbChjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiByZXN1bHRT
dGFjaywgdW5zaWduZWQgbGV2ZWwpCit7CisgICAgQVNTRVJUKGxldmVsIDwgbV9jb250cm9sU3Rh
Y2suc2l6ZSgpKTsKKworICAgIE9wdGlvbmFsPFZlY3RvcjxWYXJpYWJsZSo+PiYgZXhwZWN0ZWRT
dGFjayA9IHN0YWNrRm9yQ29udHJvbExldmVsKGxldmVsKTsKKyAgICBpZiAoIWV4cGVjdGVkU3Rh
Y2spIHsKKyAgICAgICAgZXhwZWN0ZWRTdGFjayA9IGluaXRpYWxpemVJbmNvbW1pbmdUeXBlcyhi
bG9ja0ZvckNvbnRyb2xMZXZlbChsZXZlbCksIHJlc3VsdFN0YWNrKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVChleHBlY3RlZFN0YWNrLnZhbHVlKCkuc2l6ZSgpICE9IHJl
c3VsdFN0YWNrLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFN0
YWNrLnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShleHBlY3RlZFN0YWNrLnZhbHVlKClbaV0s
IHJlc3VsdFN0YWNrW2ldKTsKK30KKyAgICAKK09wdGlvbmFsPFZlY3RvcjxWYXJpYWJsZSo+PiYg
QjNJUkdlbmVyYXRvcjo6c3RhY2tGb3JDb250cm9sTGV2ZWwodW5zaWduZWQgbGV2ZWwpCit7Cisg
ICAgcmV0dXJuIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBsZXZl
bF0uc2Vjb25kOworfQorCitCYXNpY0Jsb2NrKiBCM0lSR2VuZXJhdG9yOjpibG9ja0ZvckNvbnRy
b2xMZXZlbCh1bnNpZ25lZCBsZXZlbCkKK3sKKyAgICByZXR1cm4gbV9jb250cm9sU3RhY2tbbV9j
b250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGxldmVsXS5maXJzdDsKK30KKworc3RkOjp1bmlxdWVf
cHRyPENvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4m
IHNvdXJjZSwgV0FTTUZ1bmN0aW9uSW5mb3JtYXRpb24gaW5mbywgdW5zaWduZWQgb3B0TGV2ZWwp
Cit7CisgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQo
cHJvY2VkdXJlKTsKKyAgICBXQVNNRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2Vy
KGNvbnRleHQsIHNvdXJjZSwgaW5mbyk7CisgICAgaWYgKCFwYXJzZXIucGFyc2UoKSkKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdBU00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
QjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIzSVJHZW5l
cmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lNDUxOTYxNDcwZGE0ZjBmOWRmZmY4MjU4Mjc2NzkyNzc0N2E2
NzljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIz
SVJHZW5lcmF0b3IuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7
CisKK3N0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYs
IFZlY3Rvcjx1aW50OF90PiYsIFdBU01GdW5jdGlvbkluZm9ybWF0aW9uLCB1bnNpZ25lZCBvcHRM
ZXZlbCA9IDEpOworCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZvcm1hdC5oCmluZGV4IGIzNjM0MTA1NjczYWJkNTg4NzViNDYxMmM5ZTNmNmE2YTE3MmE5
Y2IuLjQ1MWNmNmE3OTE1OTBhMDI1MDcwNDU3ODdmMzI4NDYxZDhhMmJlYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKQEAgLTUyLDE1ICs1MiwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSlNGdW5jdGlvbjsKIAotZW51bSBjbGFzcyBXQVNNVHlwZSA6IHVp
bnQ4X3QgeworZW51bSBjbGFzcyBXQVNNVmFsdWVUeXBlIDogdWludDhfdCB7CiAgICAgSTMyLAor
ICAgIEk2NCwKICAgICBGMzIsCiAgICAgRjY0LAogICAgIE51bWJlck9mVHlwZXMKIH07CiAKLWVu
dW0gY2xhc3MgV0FTTUV4cHJlc3Npb25UeXBlIDogdWludDhfdCB7CitlbnVtIGNsYXNzIFdBU01G
dW5jdGlvblJldHVyblR5cGUgOiB1aW50OF90IHsKICAgICBJMzIsCisgICAgSTY0LAogICAgIEYz
MiwKICAgICBGNjQsCiAgICAgVm9pZCwKQEAgLTY4LDggKzcwLDggQEAgZW51bSBjbGFzcyBXQVNN
RXhwcmVzc2lvblR5cGUgOiB1aW50OF90IHsKIH07CiAKIHN0cnVjdCBXQVNNU2lnbmF0dXJlIHsK
LSAgICBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZTsKLSAgICBWZWN0b3I8V0FTTVR5cGU+
IGFyZ3VtZW50czsKKyAgICBXQVNNRnVuY3Rpb25SZXR1cm5UeXBlIHJldHVyblR5cGU7CisgICAg
VmVjdG9yPFdBU01WYWx1ZVR5cGU+IGFyZ3VtZW50czsKIH07CiAKIHN0cnVjdCBXQVNNRnVuY3Rp
b25JbXBvcnQgewpAQCAtOTEsNiArOTMsMTEgQEAgc3RydWN0IFdBU01GdW5jdGlvblBvaW50ZXJU
YWJsZSB7CiAgICAgVmVjdG9yPEpTRnVuY3Rpb24qPiBmdW5jdGlvbnM7CiB9OwogCitzdHJ1Y3Qg
V0FTTUZ1bmN0aW9uSW5mb3JtYXRpb24geworICAgIHNpemVfdCBzdGFydDsKKyAgICBzaXplX3Qg
ZW5kOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rp
b25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFiMDZiMGUzMjAyOGJiNDNhYmUzZTAyNjk5YmI0OWFiNGMwYWY0NzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rp
b25QYXJzZXIuaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV0FTTVBhcnNlci5o
IgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbnRleHQ+CitjbGFzcyBXQVNNRnVuY3Rpb25QYXJzZXIgOiBwdWJsaWMgV0FTTVBhcnNlciB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBF
eHByZXNzaW9uVHlwZTsKKworICAgIFdBU01GdW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIsIGNvbnN0IFdBU01GdW5jdGlvbkluZm9ybWF0
aW9uJik7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOworCitwcml2YXRl
OgorICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlQmxvY2soKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUV4cHJlc3Npb24oV0FTTU9wVHlwZSk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gdW5pZnlDb250cm9sKFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCB1bnNpZ25lZCBsZXZlbCk7
CisKKyAgICBPcHRpb25hbDxWZWN0b3I8RXhwcmVzc2lvblR5cGU+PiYgc3RhY2tGb3JDb250cm9s
TGV2ZWwodW5zaWduZWQgbGV2ZWwpOworCisgICAgQ29udGV4dCYgbV9jb250ZXh0OworICAgIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4gbV9leHByZXNzaW9uU3RhY2s7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb250ZXh0PgorV0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpXQVNNRnVuY3Rp
b25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VC
dWZmZXIsIGNvbnN0IFdBU01GdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogV0FTTVBh
cnNlcihzb3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIFdBU01G
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKQoreworICAgIHVpbnQzMl90IGxvY2FsQ291
bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihsb2NhbENvdW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxvY2FsQ291bnQ7ICsraSkg
eworICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxvY2Fsc1dpdGhUeXBlOworICAgICAgICBpZiAo
IXBhcnNlVUludDMyKG51bWJlck9mTG9jYWxzV2l0aFR5cGUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIFdBU01WYWx1ZVR5cGUgdHlwZU9mTG9jYWw7CisgICAgICAgIGlm
ICghcGFyc2VWYWx1ZVR5cGUodHlwZU9mTG9jYWwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIG1fY29udGV4dC5hZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2Nh
bHNXaXRoVHlwZSk7CisgICAgfQorCisgICAgcmV0dXJuIHBhcnNlQmxvY2soKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wgV0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUJsb2NrKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB1aW50OF90IG9w
OworICAgICAgICBpZiAoIXBhcnNlVUludDcob3ApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICghcGFyc2VFeHByZXNzaW9uKHN0YXRpY19jYXN0PFdBU01PcFR5cGU+
KG9wKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiZmFpbGVkIHRvIHByb2Nlc3Mgb3A6Iiwgb3ApOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wID09IFdBU01PcFR5cGU6OkVuZCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlRXhwcmVzc2lvbihXQVNNT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyNkZWZp
bmUgQ1JFQVRFX0NBU0UobmFtZSwgdmFsdWUpIGNhc2UgbmFtZToKKyAgICBGT1JfRUFDSF9XQVNN
X0JJTkFSWV9PUChDUkVBVEVfQ0FTRSkgeworI3VuZGVmIENSRUFURV9DQVNFCisgICAgICAgIEV4
cHJlc3Npb25UeXBlIGxlZnQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOworICAgICAg
ICBFeHByZXNzaW9uVHlwZSByaWdodCA9IG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCk7Cisg
ICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuYmlu
YXJ5T3Aoc3RhdGljX2Nhc3Q8V0FTTUJpbmFyeU9wVHlwZT4ob3ApLCBsZWZ0LCByaWdodCwgcmVz
dWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNh
c2UgV0FTTU9wVHlwZTo6STMyQ29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7Cisg
ICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENv
bnN0YW50KFdBU01WYWx1ZVR5cGU6OkkzMiwgY29uc3RhbnQpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY2FzZSBXQVNNT3BUeXBlOjpCbG9jazogeworICAgICAgICBpZiAo
IW1fY29udGV4dC5hZGRCbG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gcGFyc2VCbG9jaygpOworICAgIH0KKworICAgIGNhc2UgV0FTTU9wVHlwZTo6UmV0
dXJuOiB7CisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAgIGlmICghcGFyc2VW
YXJVSW50MShyZXR1cm5Db3VudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gcmV0dXJuVmFsdWVzOworICAgICAgICBpZiAocmV0
dXJuQ291bnQpCisgICAgICAgICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKG1fZXhwcmVzc2lvblN0
YWNrLnRha2VMYXN0KCkpOworCisgICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkUmV0dXJuKHJl
dHVyblZhbHVlcyk7CisgICAgfQorCisgICAgY2FzZSBXQVNNT3BUeXBlOjpFbmQ6CisgICAgICAg
IHJldHVybiBtX2NvbnRleHQuZW5kQmxvY2sobV9leHByZXNzaW9uU3RhY2spOworCisgICAgfQor
CisgICAgLy8gVW5rbm93biBvcGNvZGUuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42OTc4ZGM5MmZlOWY4OWEwNmFjYWQzZWY4YjU0OWEwMGRhYTFk
ZThkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0FT
TU1vZHVsZVBhcnNlci5oIgorCisjaW5jbHVkZSAiV0FTTUZvcm1hdC5oIgorI2luY2x1ZGUgIldB
U01PcHMuaCIKKyNpbmNsdWRlICJXQVNNU2VjdGlvbnMuaCIKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitib29sIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
KCkKK3sKKyAgICBpZiAobV9zb3VyY2VMZW5ndGggPCA4KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFtYXRjaENoYXJhY3RlcigwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbWF0Y2hTdHJpbmcoImFzbSIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBTa2lwIHRoZSB2ZXJzaW9uIG51bWJlciBmb3Igbm93IHNpbmNlIHdlIGRvbid0IGRvIGFueXRo
aW5nIHdpdGggaXQuCisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlcjsKKyAgICBpZiAoIXBhcnNl
VUludDMyKHZlcnNpb25OdW1iZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
dmVyc2lvbk51bWJlciAhPSBtYWdpY051bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJQYXNzZWQgcHJvY2Vzc2luZyBo
ZWFkZXIuIik7CisKKyAgICBXQVNNU2VjdGlvbnM6OlNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0g
V0FTTVNlY3Rpb25zOjpTZWN0aW9uOjpVbmtub3duOworICAgIHdoaWxlIChtX29mZnNldCA8IG1f
c291cmNlTGVuZ3RoKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
Z0xuKCJTdGFydGluZyB0byBwYXJzZSBuZXh0IHNlY3Rpb24gYXQgb2Zmc2V0OiAiLCBtX29mZnNl
dCk7CisgICAgICAgIHVpbnQzMl90IHNlY3Rpb25OYW1lTGVuZ3RoOworICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIHJlYWQgdXAgdG8gdGhlIHNlY3Rpb24n
cyBzaXplLgorICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIG1heExF
QkJ5dGVMZW5ndGggPj0gbV9zb3VyY2VMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgV0FTTVNlY3Rpb25zOjpTZWN0aW9uIHNlY3Rpb24gPSBXQVNNU2VjdGlvbnM6
Omxvb2t1cChtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCwgc2VjdGlvbk5hbWVMZW5ndGgpOwor
ICAgICAgICBpZiAoIVdBU01TZWN0aW9uczo6dmFsaWRhdGVPcmRlcihwcmV2aW91c1NlY3Rpb24s
IHNlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX29mZnNldCAr
PSBzZWN0aW9uTmFtZUxlbmd0aDsKKworICAgICAgICB1aW50MzJfdCBzZWN0aW9uTGVuZ3RoOwor
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlv
bkxlbmd0aDsKKworICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXQVNN
U2VjdGlvbnM6OlNlY3Rpb246OkVuZDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIGNhc2UgV0FTTVNlY3Rpb25zOjpTZWN0aW9uOjpGdW5jdGlvblR5cGVzOiB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgdHlw
ZXMuIik7CisgICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb25UeXBlcygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OlNpZ25hdHVyZXM6IHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5j
dGlvbiBzaWduYXR1cmVzLiIpOworICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0
dXJlcygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OkRlZmlu
aXRpb25zOiB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIlBhcnNpbmcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIik7CisgICAgICAgICAgICBpZiAo
IXBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBXQVNNU2Vj
dGlvbnM6OlNlY3Rpb246OlVua25vd246IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiVW5rbm93biBzZWN0aW9uLCBza2lwcGluZy4iKTsKKyAg
ICAgICAgICAgIG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nTG4oIkZpbmlzaGVkIHBhcnNpbmcgc2VjdGlvbi4iKTsKKworICAgICAgICBpZiAo
ZW5kICE9IG1fb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHBy
ZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247CisgICAgfQorCisgICAgLy8gVE9ETworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygp
Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nTG4oImNvdW50OiAiLCBjb3VudCk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICB1aW50OF90IHR5cGU7CisgICAgICAgIGlmICghcGFyc2VV
SW50Nyh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHR5cGUg
IT0gMHg0MCkgLy8gRnVuY3Rpb24gdHlwZSBjb25zdGFudC4KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiR290
IGZ1bmN0aW9uIHR5cGUuIik7CisKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKKyAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dM
bigiYXJndW1lbnRDb3VudDogIiwgYXJndW1lbnRDb3VudCk7CisKKyAgICAgICAgVmVjdG9yPFdB
U01WYWx1ZVR5cGU+IGFyZ3VtZW50VHlwZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VVSW50Nyh0
eXBlKSB8fCB0eXBlID49IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYWx1ZVR5cGU6Ok51bWJl
ck9mVHlwZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGFy
Z3VtZW50VHlwZXMuYXBwZW5kKHN0YXRpY19jYXN0PFdBU01WYWx1ZVR5cGU+KHR5cGUpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MSh0eXBlKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgV0FTTUZ1bmN0aW9uUmV0dXJuVHlwZSByZXR1cm5UeXBl
OworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKHR5cGUpOwor
CisgICAgICAgIGlmICh0eXBlKSB7CisgICAgICAgICAgICBXQVNNVmFsdWVUeXBlIHZhbHVlOwor
ICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZSh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFdBU01G
dW5jdGlvblJldHVyblR5cGU+KHZhbHVlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy
ZXR1cm5UeXBlID0gV0FTTUZ1bmN0aW9uUmV0dXJuVHlwZTo6Vm9pZDsKKworICAgICAgICAvLyBU
T0RPOiBBY3R1YWxseSBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGRhdGEuLi4KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblNp
Z25hdHVyZXMoKQoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50
MzIoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Z1bmN0aW9ucy5yZXNp
emUoY291bnQpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mih0eXBlTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVm
aW5pdGlvbnMoKQoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50
MzIoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY291bnQgIT0gbV9m
dW5jdGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNp
emU7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5m
byA9IG1fZnVuY3Rpb25zW2ldOworICAgICAgICBpbmZvLnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAg
ICAgIGluZm8uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAgICAgIG1fb2Zmc2V0
ID0gaW5mby5lbmQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdBU00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxl
UGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2UzNjJjMGMyZDEwMGJlZDkzN2I2YjRjY2RmOTZjMDU5MmU4ZWJkYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJz
ZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXQVNNT3BzLmgiCisjaW5jbHVk
ZSAiV0FTTVBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY2xh
c3MgV0FTTU1vZHVsZVBhcnNlciA6IHB1YmxpYyBXQVNNUGFyc2VyIHsKK3B1YmxpYzoKKworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYWdpY051bWJlciA9IDB4YzsKKworICAgIFdBU01Nb2R1
bGVQYXJzZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIpCisgICAgICAgIDog
V0FTTVBhcnNlcihzb3VyY2VCdWZmZXIsIDAsIHNvdXJjZUJ1ZmZlci5zaXplKCkpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CisKKyAgICBjb25z
dCBWZWN0b3I8V0FTTUZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbkluZm9ybWF0aW9uKCkg
eyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKworcHJpdmF0ZToKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUZ1bmN0aW9uVHlwZXMoKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKHVpbnQzMl90IG51bWJlcik7CisgICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VCbG9jaygpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlRXhwcmVzc2lvbihXQVNNT3BUeXBlKTsKKworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25J
bmZvcm1hdGlvbj4gbV9mdW5jdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4N2E4ZjYxZGM1OGI2YzFmMzFk
ZDQ4NzViZTc2ZDk1OWYwMWI1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNT3BzLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCisjZGVm
aW5lIEZPUl9FQUNIX1dBU01fU1BFQ0lBTF9PUChtYWNybykgXAorICAgIG1hY3JvKEkzMkNvbnN0
LCAweDEwKQorCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKG1hY3JvKSBc
CisgICAgbWFjcm8oQmxvY2ssIDB4MDEpIFwKKyAgICBtYWNybyhSZXR1cm4sIDB4MDkpIFwKKyAg
ICBtYWNybyhFbmQsIDB4MGYpCisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChtYWNy
bykKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykgXAorICAgIG1hY3Jv
KEkzMkFkZCwgMHg0MCkKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX09QKG1hY3JvKSBcCisgICAg
Rk9SX0VBQ0hfV0FTTV9TUEVDSUFMX09QKG1hY3JvKSBcCisgICAgRk9SX0VBQ0hfV0FTTV9DT05U
Uk9MX0ZMT1dfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKSBc
CisgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AobWFjcm8pCisKKyNkZWZpbmUgQ1JFQVRFX0VO
VU1fVkFMVUUobmFtZSwgaWQpIG5hbWUgPSBpZCwKKworZW51bSBXQVNNT3BUeXBlIDogdWludDhf
dCB7CisgICAgRk9SX0VBQ0hfV0FTTV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKK307CisKKworCitl
bnVtIGNsYXNzIFdBU01CaW5hcnlPcFR5cGUgOiB1aW50OF90IHsKKyAgICBGT1JfRUFDSF9XQVNN
X0JJTkFSWV9PUChDUkVBVEVfRU5VTV9WQUxVRSkKK307CisKK30gLy8gbmFtZXNwYWNlIFdBU00K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyN1bmRlZiBDUkVBVEVfRU5VTV9WQUxVRQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBh
cnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg3ZjZmYzNmZmJkNjU1MjQyNjM2Y2JkZjY5OTZlNmQwNGFmMDhh
NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGFy
c2VyLmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKKyNpbmNs
dWRlICJXQVNNT3BzLmgiCisjaW5jbHVkZSAiV0FTTVNlY3Rpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0xFQkRlY29kZXIuaD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY2xhc3MgV0FTTVBhcnNlciB7Citwcm90ZWN0ZWQ6
CisgICAgV0FTTVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBzaXplX3Qgc3RhcnQsIHNp
emVfdCBlbmQpOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gbWF0Y2hDaGFyYWN0ZXIo
Y2hhcik7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gbWF0Y2hTdHJpbmcoY29uc3QgY2hh
ciopOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90
JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhf
dCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50
MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQz
Mih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBkZWNvZGVVSW50MzIobV9zb3VyY2UuZGF0YSgp
LCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KKworCisgICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUoV0FTTVZhbHVlVHlwZSYgcmVzdWx0KTsKKwor
ICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbV9zb3VyY2U7CisgICAgc2l6ZV90IG1fc291cmNl
TGVuZ3RoOworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK0FMV0FZU19JTkxJTkUgV0FTTVBh
cnNlcjo6V0FTTVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlciwgc2l6
ZV90IHN0YXJ0LCBzaXplX3QgZW5kKQorICAgIDogbV9zb3VyY2Uoc291cmNlQnVmZmVyKQorICAg
ICwgbV9zb3VyY2VMZW5ndGgoZW5kKQorICAgICwgbV9vZmZzZXQoc3RhcnQpCit7CisgICAgQVNT
RVJUKGVuZCA8PSBzb3VyY2VCdWZmZXIuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc3RhcnQgPCBlbmQp
OworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6bWF0Y2hDaGFyYWN0ZXIoY2hh
ciBjKQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChjID09IG1fc291cmNlW21fb2Zmc2V0XSkgeworICAgICAgICBt
X29mZnNldCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6bWF0Y2hTdHJpbmcoY29uc3Qg
Y2hhciogc3RyKQoreworICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgc3RyW2ldOyBpKyspIHsKKyAgICAgICAgaWYgKCFtYXRjaENoYXJhY3Rl
cihzdHJbaV0pKSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0OworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitB
TFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3Vs
dCkKK3sKKyAgICBpZiAobV9vZmZzZXQgKyA0ID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMy
X3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7CisgICAgbV9vZmZzZXQgKz0gNDsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6OnBhcnNl
VUludDcodWludDhfdCYgcmVzdWx0KQoreworICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IG1fc291cmNlW21fb2Zm
c2V0KytdOworICAgIHJldHVybiByZXN1bHQgPCAweDgwOworfQorCitBTFdBWVNfSU5MSU5FIGJv
b2wgV0FTTVBhcnNlcjo6cGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpCit7CisgICAgdWlu
dDMyX3QgdGVtcDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKHRlbXApKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odGVtcCk7CisgICAg
cmV0dXJuIHRlbXAgPD0gMTsKK30KKworQUxXQVlTX0lOTElORSBib29sIFdBU01QYXJzZXI6OnBh
cnNlVmFsdWVUeXBlKFdBU01WYWx1ZVR5cGUmIHJlc3VsdCkKK3sKKyAgICB1aW50OF90IHZhbHVl
OworICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTVZhbHVlVHlwZTo6TnVtYmVy
T2ZUeXBlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxXQVNNVmFsdWVUeXBlPih2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdBU00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWQyOWI5ZWU5YTc5YzhiNzM2ZDVhNjkyOTliNzA5M2Q5NTcwZGIwNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QbGFuLmNwcApAQCAtMCwwICsx
LDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldBU01QbGFuLmgiCisKKyNpbmNsdWRlICJCM0Nv
bXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV0FTTUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJX
QVNNTW9kdWxlUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKwor
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQbGFuOjpQbGFuKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOworICAgIFdBU01Nb2R1bGVQYXJzZXIgbW9kdWxlUGFy
c2VyKHNvdXJjZSk7CisgICAgaWYgKCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgeworICAgICAgICBk
YXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oIlBhcnNlZCBtb2R1bGUu
Iik7CisKKyAgICBmb3IgKGNvbnN0IFdBU01GdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvIDogbW9k
dWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jaW9uIHN0YXJ0aW5nIGF0OiAi
LCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIHNvdXJjZSwgaW5mbykpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE3Yzc3NDNjZDA1ZjliZjNjODcwMzAzZTkyMTFkZGNlOTM0ZjNjNDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5oCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBK
U0MgeworCituYW1lc3BhY2UgQjMgeworY2xhc3MgQ29tcGlsYXRpb247Cit9IC8vIG5hbWVzcGFj
ZSBCMworCituYW1lc3BhY2UgV0FTTSB7CisKKy8vIFRPRE86IFRoaXMgc2hvdWxkIGNyZWF0ZSBh
IFdBU00gTW9kdWxlIG5vdCBhIGxpc3Qgb2YgZnVuY3Rpb25zLgorY2xhc3MgUGxhbiB7CitwdWJs
aWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2UpOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+PiByZXN1
bHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01TZWN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg3NjNjYzliZTMzNGQ5MmVmYTBkZjdiYWQ1
YzMxMTkwYTBhNmFlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01TZWN0aW9ucy5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXQVNNU2VjdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVz
cGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK3N0cnVjdCBTZWN0aW9uRGF0YSB7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIG5hbWU7Cit9OworCitzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzZWN0
aW9uRGF0YUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXQVNNU2VjdGlvbnM6OlNlY3Rp
b246OlVua25vd24pOworc3RhdGljIGNvbnN0IFNlY3Rpb25EYXRhIHNlY3Rpb25EYXRhW3NlY3Rp
b25EYXRhTGVuZ3RoXSB7CisjZGVmaW5lIENSRUFURV9TRUNUSU9OX0RBVEEobmFtZSwgc3RyKSB7
IHNpemVvZihzdHIpIC0gMSwgc3RyIH0sCisgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OX1RZUEUo
Q1JFQVRFX1NFQ1RJT05fREFUQSkKKyN1bmRlZiBDUkVBVEVfU0VDVElPTl9EQVRBCit9OworCitX
QVNNU2VjdGlvbnM6OlNlY3Rpb24gV0FTTVNlY3Rpb25zOjpsb29rdXAoY29uc3QgdWludDhfdCog
bmFtZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nTG4oIkRlY29kaW5nIHNlY3Rpb24gd2l0aCBuYW1lOiAiLCBTdHJpbmcobmFtZSwgbGVuZ3Ro
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlY3Rpb25EYXRhTGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgaWYgKHNlY3Rpb25EYXRhW2ldLmxlbmd0aCAhPSBsZW5ndGgpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFtZW1jbXAobmFtZSwgc2VjdGlvbkRhdGFbaV0u
bmFtZSwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXQVNNU2VjdGlv
bnM6OlNlY3Rpb24+KGkpOworICAgIH0KKyAgICByZXR1cm4gV0FTTVNlY3Rpb25zOjpTZWN0aW9u
OjpVbmtub3duOworfQorCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNU2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTA2YTJmYTA3N2YxMTI3NDczZGU2Zjlj
YzgxMzZhMTE2MjhkMTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTVNlY3Rpb25zLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCisvLyBU
aGVzZSBzaG91bGQgYmUgaW4gdGhlIG9yZGVyIHRoYXQgd2UgZXhwZWN0IHRoZW0gdG8gYmUgaW4g
dGhlIGJpbmFyeS4KKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OX1RZUEUobWFjcm8pIFwK
KyAgICBtYWNybyhGdW5jdGlvblR5cGVzLCAidHlwZSIpIFwKKyAgICBtYWNybyhTaWduYXR1cmVz
LCAiZnVuY3Rpb24iKSBcCisgICAgbWFjcm8oRGVmaW5pdGlvbnMsICJjb2RlIikgXAorICAgIG1h
Y3JvKEVuZCwgImVuZCIpCisKK3N0cnVjdCBXQVNNU2VjdGlvbnMgeworICAgIGVudW0gY2xhc3Mg
U2VjdGlvbiB7CisjZGVmaW5lIENSRUFURV9TRUNUSU9OX0VOVU0obmFtZSwgc3RyKSBuYW1lLAor
ICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT05fVFlQRShDUkVBVEVfU0VDVElPTl9FTlVNKQor
I3VuZGVmIENSRUFURV9TRUNUSU9OX0VOVU0KKyAgICAgICAgVW5rbm93bgorICAgIH07CisgICAg
c3RhdGljIFNlY3Rpb24gbG9va3VwKGNvbnN0IHVpbnQ4X3QqLCB1bnNpZ25lZCk7CisgICAgc3Rh
dGljIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9uIHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCisg
ICAgeworICAgICAgICAvLyBUaGlzIGFsbG93cyB1bmtub3duIHNlY3Rpb25zIGFmdGVyIEVuZCwg
d2hpY2ggSSBkb3VidCB3aWxsIGV2ZXIgYmUgc3VwcG9ydGVkIGJ1dAorICAgICAgICAvLyB0aGVy
ZSBpcyBubyByZWFzb24gdG8gcG90ZW50aWFsbHkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGFiaWxp
dHkuCisgICAgICAgIGlmIChwcmV2aW91cyA9PSBTZWN0aW9uOjpVbmtub3duKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBwcmV2aW91cyA8IG5leHQ7CisgICAgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RhdGFM
b2cuaCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAppbmRleCAxM2UzZWRjYTMwYjVlNjNhYTBi
MGVkYjRjMjc1YjJkMDE2MTM0ZDg5Li5jMmVmNTc2NTUxNDQzODc3MmM5ZjI3MTMzODIxYmMwOGEy
ZmY3ZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKKysrIGIvU291cmNl
L1dURi93dGYvRGF0YUxvZy5oCkBAIC00NSw5ICs0NSwxNiBAQCB2b2lkIGRhdGFMb2coY29uc3Qg
VHlwZXMmLi4uIHZhbHVlcykKICAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLik7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgordm9pZCBkYXRhTG9nTG4oY29uc3QgVHlwZXMm
Li4uIHZhbHVlcykKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlcy4uLiwgIlxuIik7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmRhdGFMb2c7Cit1c2luZyBXVEY6
OmRhdGFMb2dMbjsKIHVzaW5nIFdURjo6ZGF0YUxvZ0Y7CiB1c2luZyBXVEY6OmRhdGFMb2dGU3Ry
aW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9MRUJEZWNvZGVyLmgKaW5kZXggMWIyMDIxZWIxZDg3Y2I1Yjc3NmE5ZTA3NjA2ODJj
N2ExMzNlMGY1OC4uMzZkY2NhMmRiMGM0NmFmYmUzMWM4YzEwODhjZTNhOGFjZTIxMWJjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0xFQkRlY29kZXIuaApAQCAtMjYsMjMgKzI2LDIwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkNvbXBpbGVyLmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCi0jaW5jbHVkZSAiRGF0YUxvZy5oIgotCiAvLyBUaGlzIGZpbGUgY29udGFpbnMgYSBidW5j
aCBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciBkZWNvZGluZyBMRUIgbnVtYmVycy4KIC8vIFNlZSBo
dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MRUIxMjggZm9yIG1vcmUgaW5mb3JtYXRpb24g
YWJvdXQgdGhlCiAvLyBMRUIgZm9ybWF0LgogCiBjb25zdCBzaXplX3QgbWF4TEVCQnl0ZUxlbmd0
aCA9IDU7CiAKLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50MzIoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBieXRlcywgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90JiByZXN1
bHQpCitpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludDMyKGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgdWludDMyX3QmIHJl
c3VsdCkKIHsKLSAgICBBU1NFUlQoYnl0ZXMuc2l6ZSgpID4gb2Zmc2V0KTsKKyAgICBBU1NFUlQo
bGVuZ3RoID4gb2Zmc2V0KTsKICAgICByZXN1bHQgPSAwOwogICAgIHVuc2lnbmVkIHNoaWZ0ID0g
MDsKLSAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExFQkJ5dGVMZW5ndGgsIGJ5dGVzLnNp
emUoKSAtIG9mZnNldCAtIDEpOworICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4TEVCQnl0
ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0IC0gMSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
dHJ1ZTsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IGJ5dGVzW29mZnNldCsrXTsKICAg
ICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7CkBAIC01NiwxMiArNTMsMTIg
QEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJbnQzMihjb25zdCBWZWN0
b3I8dWludDhfdD4mIGJ5dGVzLCBzaXplX3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5l
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludDMyKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgYnl0ZXMsIHNpemVfdCYgb2Zmc2V0LCBpbnQzMl90JiByZXN1bHQpCitpbmxpbmUgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVf
dCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBpbnQzMl90JiByZXN1bHQpCiB7Ci0gICAgQVNTRVJU
KGJ5dGVzLnNpemUoKSA+IG9mZnNldCk7CisgICAgQVNTRVJUKGxlbmd0aCA+IG9mZnNldCk7CiAg
ICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgc2l6ZV90IGxhc3Qg
PSBzdGQ6Om1pbihtYXhMRUJCeXRlTGVuZ3RoLCBieXRlcy5zaXplKCkgLSBvZmZzZXQgLSAxKTsK
KyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExFQkJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9m
ZnNldCAtIDEpOwogICAgIHVpbnQ4X3QgYnl0ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB0
cnVlOyArK2kpIHsKICAgICAgICAgYnl0ZSA9IGJ5dGVzW29mZnNldCsrXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286059</attachid>
            <date>2016-08-15 09:29:35 -0700</date>
            <delta_ts>2016-08-15 14:36:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160681-20160815092751.patch</filename>
            <type>text/plain</type>
            <size>75189</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWY3YzM2ZmQzZWE2MjZkOGNkOGI2MzRmYWU0NmNiMDMwMTQ4NTAzLi5lMTk2M2I3MjgyMmVjNTdi
YjU1ZjY2MmI0OWQ2MjE3MWEwYzlmY2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5OSBAQAorMjAxNi0wOC0xNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV0FTTSBQYXJzZXIgYW5kIEIzIElSIGdlbmVyYXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjgx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRoZSBza2VsZXRvbiBmb3IgYSBXZWJBc3NlbWJseSBwaXBlbGluZS4gVGhlCisg
ICAgICAgIHBpcGVsaW5lIGlzIGRlc2lnbmVkIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzeSB0byBo
YXZlIGFzIG11Y2ggb2YKKyAgICAgICAgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdGhyZWFkZWQg
YXMgcG9zc2libGUuIFRoZSBmbG93IG9mIHRoZQorICAgICAgICBwaXBlbGluZSByb3VnaGx5IGdv
ZXMgYXMgZm9sbG93czoKKworICAgICAgICAxKSBDcmVhdGUgYSBXQVNNUGxhbiB3aXRoIHRoZSBW
TSBhbmQgYSBWZWN0b3Igb2YgdGhlCisgICAgICAgIGFzc2VtYmx5LiBDdXJyZW50bHkgdGhlIHBs
YW4gd2lsbCBwcm9jZXNzIGFsbCB0aGUgd29yaworICAgICAgICBzeW5jaHJvbm91c2x5LCBob3dl
dmVyLCBpbiB0aGUgZnV0dXJlIHRoaXMgY2FuIGJlIG9mZmxvYWRlZCB0bworICAgICAgICBvdGhl
ciB0aHJlYWRzLgorCisgICAgICAgIDIpIFRoZSBwbGFuIHdpbGwgcnVuIHRoZSBXQVNNTW9kdWxl
UGFyc2VyLCB3aGljaCBjb2xsYXRlcyBhbGwgdGhlCisgICAgICAgIGluZm9ybWF0aW9uIG5lZWRl
ZCB0byBjb21waWxlIGVhY2ggbW9kdWxlIGZ1bmN0aW9uCisgICAgICAgIGluZGVwZW5kZW50bHku
IFNpbmNlLCB3ZSBhcmUgc3RpbGwgaW4gdGhlIGVhcmx5IHBoYXNlcywgdGhlIG9ubHkKKyAgICAg
ICAgaW5mb3JtYXRpb24gaXMgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgYnl0ZSBvZiB0aGUgZnVu
Y3Rpb24ncworICAgICAgICBib2R5LiBUaGUgbW9kdWxlIHBhcnNlciwgaG93ZXZlciwgc3RpbGwg
c2NhbnMgYm90aCBhbmQKKyAgICAgICAgc2VtaS12YWxpZGF0ZXMgdGhlIHR5cGUgYW5kIHRoZSBm
dW5jdGlvbiBzZWN0aW9ucy4KKworICAgICAgICAzKSBFYWNoIGZ1bmN0aW9uIGlzIGRlY29kZWQg
YW5kIGNvbXBpbGVkLiBJbiB0aGUgZnV0dXJlIHRoaXMKKyAgICAgICAgc2hvdWxkIGFsc28gaW5j
bHVkZSBhIG9wY29kZSB2YWxpZGF0aW9uIHBoYXNlLiBUaGUKKyAgICAgICAgV0FTTUZ1bmN0aW9u
UGFyc2VyIGlzIHRlbXBsYXRpemVkIHNvIHRoYXQgYSB2YWxpZGF0b3Igc2hvdWxkIGJlCisgICAg
ICAgIGFibGUgdG8gdXNlIG1vc3Qgb2YgdGhlIHNhbWUgY29kZSB0aGUgQjMgSVIgZ2VuZXJhdG9y
IGRvZXMuCisKKyAgICAgICAgNCkgV2hlbiB0aGUgcGxhbiBoYXMgZmluaXNoZWQgaXQgd2lsbCBm
aWxsIGEgVmVjdG9yIG9mCisgICAgICAgIEIzOjpDb21waWxhdGlvbiBvYmplY3RzIHRoYXQgY29y
cmVzcG9uZCB0byB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbgorICAgICAgICBpbiB0aGUgV0FTTSBt
b2R1bGUuCisKKworICAgICAgICBUaGUgY3VycmVudCB0ZXN0aW5nIHBsYW4gZm9yIHRoZSBtb2R1
bGVzIGlzIHRvIGlubGluZSB0aGUgdGhlCisgICAgICAgIGJpbmFyeSBnZW5lcmF0ZWQgYnkgdGhl
IHNwZWMncyBPQ2FtbCBwcm90b3R5cGUuIFRoZSBpbmxpbmVkIGJpbmFyeQorICAgICAgICBpcyBw
YXNzZWQgdG8gYSBXQVNNUGxhbiB0aGVuIGludm9rZWQgdG8gY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGUKKyAgICAgICAgZnVuY3Rpb24uIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGFkZCBhIG1vcmUg
cm9idXN0IHRlc3RpbmcKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHRlc3RXQVNN
LmNwcDoKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExp
bmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKGludm9rZSk6CisgICAgICAgIChydW5XQVNN
VGVzdHMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd2FzbS9KU1dBU01Nb2R1bGUuaDoK
KyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpnbG9iYWxWYXJpYWJsZVR5cGVzKToKKyAgICAg
ICAgKiB3YXNtL1dBU01CM0lSR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldB
U006OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXQVNNOjpC
M0lSR2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6OldBU006OkIzSVJHZW5lcmF0
b3I6OmJpbmFyeU9wKToKKyAgICAgICAgKEpTQzo6V0FTTTo6QjNJUkdlbmVyYXRvcjo6YWRkQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM0lSR2VuZXJhdG9yOjphZGRCbG9jayk6Cisg
ICAgICAgIChKU0M6OldBU006OkIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V0FTTTo6QjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V0FTTTo6
QjNJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM0lSR2VuZXJhdG9y
Ojppbml0aWFsaXplSW5jb21taW5nVHlwZXMpOgorICAgICAgICAoSlNDOjpXQVNNOjpCM0lSR2Vu
ZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6OldBU006OkIzSVJH
ZW5lcmF0b3I6OnN0YWNrRm9yQ29udHJvbExldmVsKToKKyAgICAgICAgKEpTQzo6V0FTTTo6QjNJ
UkdlbmVyYXRvcjo6YmxvY2tGb3JDb250cm9sTGV2ZWwpOgorICAgICAgICAoSlNDOjpXQVNNOjpw
YXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV0FTTUIzSVJHZW5lcmF0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvRGF0YUxvZy5oLgorICAgICAgICAqIHdhc20vV0FTTUZv
cm1hdC5oOgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OldBU01GdW5jdGlv
blBhcnNlcik6CisgICAgICAgIChKU0M6OldBU006OldBU01GdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFy
c2VyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldBU006OldBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
blR5cGVzKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvblNpZ25hdHVyZXMpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMpOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmguCisgICAgICAgIChKU0M6
OldBU006OldBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIpOgorICAgICAgICAoSlND
OjpXQVNNOjpXQVNNTW9kdWxlUGFyc2VyOjpmdW5jdGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAg
KiB3YXNtL1dBU01PcHMuaDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvRGF0YUxvZy5oLgor
ICAgICAgICAqIHdhc20vV0FTTVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6
V0FTTVBhcnNlcjo6cGFyc2VWYXJVSW50MzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFy
c2VyOjpXQVNNUGFyc2VyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FTTVBhcnNlcjo6Y29uc3Vt
ZUNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OmNvbnN1bWVTdHJp
bmcpOgorICAgICAgICAoSlNDOjpXQVNNOjpXQVNNUGFyc2VyOjpwYXJzZVVJbnQzMik6CisgICAg
ICAgIChKU0M6OldBU006OldBU01QYXJzZXI6OnBhcnNlVUludDcpOgorICAgICAgICAoSlNDOjpX
QVNNOjpXQVNNUGFyc2VyOjpwYXJzZVZhclVJbnQxKToKKyAgICAgICAgKEpTQzo6V0FTTTo6V0FT
TVBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUpOgorICAgICAgICAqIHdhc20vV0FTTVBsYW4uY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmguCisgICAgICAgIChKU0M6OldBU006
OlBsYW46OlBsYW4pOgorICAgICAgICAqIHdhc20vV0FTTVBsYW4uaDogQ29waWVkIGZyb20gU291
cmNlL1dURi93dGYvRGF0YUxvZy5oLgorICAgICAgICAqIHdhc20vV0FTTVNlY3Rpb25zLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dURi93dGYvRGF0YUxvZy5oLgorICAgICAgICAoSlNDOjpXQVNN
OjpXQVNNU2VjdGlvbnM6Omxvb2t1cCk6CisgICAgICAgICogd2FzbS9XQVNNU2VjdGlvbnMuaDog
Q29waWVkIGZyb20gU291cmNlL1dURi93dGYvRGF0YUxvZy5oLgorICAgICAgICAoSlNDOjpXQVNN
OjpXQVNNU2VjdGlvbnM6OnZhbGlkYXRlT3JkZXIpOgorCiAyMDE2LTA4LTA4ICBCcmlhbiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNsZWFuIHVwIHBy
ZWZpeGluZyBvZiBBdXRvbWF0aW9uIHByb3RvY29sIGdlbmVyYXRlZCBmaWxlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmMjZi
MmViZmZlMmNhZGEzN2NjZGFlM2NlZGY2ZWZjODUzYjYxNmIxLi41YTNlMTAzNjgxZTUyZDc2ZDBl
ZGRlN2IxMDE1Y2NhYjY4NTNiYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA4LTE1ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBXQVNNIFBhcnNlciBhbmQgQjMgSVIgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9EYXRhTG9nLmg6CisgICAgICAgIChXVEY6
OmRhdGFMb2dMbik6IEFkZCBhIG5ldyBkYXRhTG9nIGZ1bmN0aW9uLCBkYXRhTG9nTG4gdGhhdAor
ICAgICAgICBhdXRvbWFnaWNhbGx5IGluY2x1ZGVzIGEgbmV3IGxpbmUgYXQgdGhlIGVuZCBvZiB0
aGUgcHJpbnQuCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoKKyAgICAgICAgKGRlY29kZVVJ
bnQzMik6CisgICAgICAgIChkZWNvZGVJbnQzMik6IENoYW5nZSB0aGUgTEVCRGVjb2RlciB0byB0
YWtlIGEgcG9pbnRlciBhbmQgbGVuZ3RoCisgICAgICAgIHJhdGhlciB0aGFuIGEgVmVjdG9yLgor
CiAyMDE2LTA4LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV1RG
IG5lZWRzIGEgdmFyaWFudCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBlMzBkYzllNGQwMjAzNjIwYjE0Y2EyMjhiNGViMmJiNGZkZWNlZjBkLi5hNzc1Zjgy
YWFkNDAyNjJhM2I2NDZjM2EzODJkNzIxMDVhOTRkMTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTE3NCw2ICsxMTc0LDggQEAKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJCNzE5QTI4
OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2Zp
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIz
ODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBC
IC8qIFdBU01QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCAqLzsgfTsKKwkJNTMx
Mzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBX
QVNNUGxhbi5jcHAgKi87IH07CiAJCTUzNDg2QkI3MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NDg2QkI2MUMxNzk1QzMwMEY2RjNBRiAvKiBKU1R5cGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNB
RiAvKiBKU1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FGIC8qIEpTVHlwZWRBcnJheS5jcHAg
Ki87IH07CiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0OTAyODIx
QzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi87IH07CkBAIC0xMTg3LDYg
KzExODksMTUgQEAKIAkJNTM5RUIwN0ExRDU1NjA3MDAwQzgyRUY3IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTUzOUVCMDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V0FTTS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUzREY4
MDBDODJFRjcgLyogdGVzdFdBU00uY3BwICovOyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBG
QTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5o
ICovOyB9OworCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThG
OTc3MDA5OUExQjYgLyogV0FTTVNlY3Rpb25zLmggKi87IH07CisJCTUzRjQwRTg3MUQ1OEY5RDYw
MDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFODYxRDU4RjlENjAwOTlBMUI2IC8qIFdBU01TZWN0aW9u
cy5jcHAgKi87IH07CisJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25Q
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKKwkJ
NTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdBU01QYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAv
KiBXQVNNUGFyc2VyLmggKi87IH07CisJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNN
QjNJUkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuY3Bw
ICovOyB9OworCQk1M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTAxRDU5MDMwMjAw
OTlBMUI2IC8qIFdBU01PcHMuaCAqLzsgfTsKKyAgICAgICAgICAgICAgICA1M0Y0MEU5MzFENUE0
QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNN
QjNJUkdlbmVyYXRvci5oICovOyB9OworCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV0FT
TU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsg
fTsKKwkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTYxRDVB
N0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovOyB9OwogCQk1M0Y2QkY2RDFD
M0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y2QkY2QzFDM0Yw
NjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGQTJBRTExQ0Yz
N0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
QTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUzRkEyQUUzMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi87IH07CkBAIC0zMzQy
LDYgKzMzNTMsOCBAQAogCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVBsYW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01QbGFuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQjYxQzE3OTVDMzAwRjZGM0FGIC8qIEpTVHlw
ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0ODZCQkExQzE4RTg0NTAwRjZGM0FG
IC8qIEpTVHlwZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1R5cGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzQ5MDI4
MjFDNzI0MkM4MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFR5cGVkQXJyYXlDVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVz
dHMvVHlwZWRBcnJheUNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMz
NTksNiArMzM3MiwxNSBAQAogCQk1MzlFQjA4MDFENTU2MDcwMDBDODJFRjcgLyogdGVzdFdBU00g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RXQVNN
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzlGQjhCOTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNBcnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
MjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0FTTVNlY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTg2
MUQ1OEY5RDYwMDk5QTFCNiAvKiBXQVNNU2VjdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0FTTVNlY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRnVuY3Rpb25QYXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8q
IFdBU01QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVBhcnNl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUEx
QjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisgICAgICAgICAgICAgICAgNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01CM0lSR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5
QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdBU01Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNG
NDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzEx
RCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU1MjUsNyArNTU0NywxOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJN0I5OEQxMzQxQjYw
Q0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8sCiAJCQkJN0I5OEQxMzUxQjYwQ0Q1
QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovLAorCQkJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5
QTFCNiAvKiBXQVNNT3BzLmggKi8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdB
U01Gb3JtYXQuaCAqLywKKwkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV0FTTUIzSVJH
ZW5lcmF0b3IuY3BwICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1M0Y0MEU5
MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLywKKwkJCQk1M0Y0MEU4
QTFENTkwMUJCMDA5OUExQjYgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8sCisJCQkJNTNGNDBF
OTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAorCQkJCTUzRjQw
RTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCisJCQkJNTMxMzc0
QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNwcCAqLywKKwkJCQk1MzEzNzRCQzFENUNF
Njc2MDBBRjdBMEIgLyogV0FTTVBsYW4uaCAqLywKKwkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUEx
QjYgLyogV0FTTVBhcnNlci5oICovLAorCQkJCTUzRjQwRTg2MUQ1OEY5RDYwMDk5QTFCNiAvKiBX
QVNNU2VjdGlvbnMuY3BwICovLAorCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXQVNN
U2VjdGlvbnMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC03MTkwLDYgKzcyMjMsNyBAQAogCQkJCTBGNEM5MTY2MUMyOUY0RjIwMDQz
NDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyog
V0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAw
OThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNF
QTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzUs
NiArNzMwOSw3IEBACiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2Fs
bEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QUQyQ0I0RDE5QjkxNDAxMDAwNjU3MTkgLyog
RGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjExODJCN0Ew
NDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdBU01TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJREM5QTBDMUYxRDJEOUNCMTAwODUxMjRFIC8qIEIzQ2FzZUNvbGxlY3Rpb25JbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJT
Y29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERl
ZmVyR0MuaCBpbiBIZWFkZXJzICovLApAQCAtNzQxNyw2ICs3NDUyLDcgQEAKIAkJCQkwRjcwMjVB
QTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0Y0MEU4RDFENTkwMUYyMDA5
OUExQjYgLyogV0FTTVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTgxQzQ5N0Y3
NDAwQTU3N0ZBIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2MjM3OTgxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTcxLDYgKzc2MDcsNyBAQAogCQkJCTBGMkI2
NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NkFFMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNG
IC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdBU01QbGFuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCQkQ5ODFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU0RThFQjAxOEJGRkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXkuaCBp
biBIZWFkZXJzICovLApAQCAtNzc4Miw2ICs3ODE5LDcgQEAKIAkJCQkwRjJCNjZGNjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNGNDBFOEIxRDU5
MDFCQjAwOTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0Eg
LyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDEs
NiArNzg3OSw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVm
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxMjIwMjcxQkU3RjU4QzAwMzlFNkYyIC8q
IEpJVEFkZEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAw
NEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzRjQwRTkxMUQ1OTAzMDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRl
cnMgKi8sCkBAIC03ODg5LDYgKzc5MjgsNyBAQAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4
OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAw
QjAxQkQ1OTk0RTAwRjQ1NzVDIC8qIGxhenl3cml0ZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQzMTBFMTZGNUNEMDBCMzQ0NjAgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FT
TUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTJFMEUxNkZDRTEwMEIz
NDQ2MCAvKiBMZXhlci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRjNENTZCMUNEMjk0NzIw
MDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRTE4N0EwMjFCRkJFNTYxMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg5MjEsNiArODk2MSw3IEBACiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJDNUU4
IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5n
Q29udmVudGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0Y0MEU4NzFENThGOUQ2MDA5OUEx
QjYgLyogV0FTTVNlY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkw
QTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3
MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzMzhFMTIxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTkxMzMsNiArOTE3NCw3IEBACiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5
MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1
QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTMxMzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdBU01QbGFuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1Q0ExODVGOTYyNDAwN0U5
NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTg0
MEUyMDE4N0I3Qjg2MDA4NDNCMTAgLyogSW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC05NTA5LDYgKzk1NTEsNyBAQAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIz
NCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0Mg
LyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMTg3QTAxMUJGQkU1NUUw
MDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNGNDBF
OEYxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NFMDAwNEE0
RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NTE4LDYgKzk1NjEsNyBA
QAogCQkJCUE3Q0EzQUUzMTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMzhERjkxQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FFQjE3REE1MTY4MDA2NTM4QUYgLyog
V2Vha01hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNGNDBFOTcxRDVBN0JFQzAwOTlB
MUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTNBRTUx
N0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FT
TS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCmluZGV4IDAwMjI1Mjc3
NmJiNGE1YTM0MmY5MzZlNWRlNzhmNDc3NDYxM2ViZTQuLjA3YTIwZjk1MDkxNmNhMWMxNjI3NzEx
MzIxOTg2NDkzNTQ3Yzc5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
V0FTTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNNLmNwcApAQCAtMjUs
NyArMjUsMTEgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJKU1N0
cmluZy5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV0FTTVBsYW4uaCIKICNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9MRUJEZWNvZGVyLmg+CiAKQEAgLTM4LDYg
KzQyLDcgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFN0cmluZz4gbV9hcmd1bWVudHM7CiAgICAg
Ym9vbCBtX3J1bkxFQlRlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcnVuV0FTTVRlc3RzIHsg
ZmFsc2UgfTsKIAogICAgIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50LCBjaGFyKiopOwogfTsKQEAg
LTQ3LDYgKzUyLDcgQEAgc3RhdGljIE5PX1JFVFVSTiB2b2lkIHByaW50VXNhZ2VTdGF0ZW1lbnQo
Ym9vbCBoZWxwID0gZmFsc2UpCiAgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogdGVzdFdBU00g
W29wdGlvbnNdXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWh8LS1oZWxwICBQcmludHMg
dGhpcyBoZWxwIG1lc3NhZ2VcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiICAtbHwtLWxlYiAg
IFJ1bnMgdGhlIExFQiBkZWNvZGVyIHRlc3RzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAg
LXd8LS13ZWIgICBSdW4gdGhlIFdBU00gdGVzdHNcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAi
XG4iKTsKIAogICAgIGV4aXQoaGVscCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7CkBA
IC02Myw2ICs2OSw5IEBAIHZvaWQgQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdj
LCBjaGFyKiogYXJndikKIAogICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItbCIpIHx8ICFzdHJj
bXAoYXJnLCAiLS1sZWIiKSkKICAgICAgICAgICAgIG1fcnVuTEVCVGVzdHMgPSB0cnVlOworCisg
ICAgICAgIGlmICghc3RyY21wKGFyZywgIi13IikgfHwgIXN0cmNtcChhcmcsICItLXdlYiIpKQor
ICAgICAgICAgICAgbV9ydW5XQVNNVGVzdHMgPSB0cnVlOwogICAgIH0KIAogICAgIGZvciAoOyBp
IDwgYXJnYzsgKytpKQpAQCAtMTA5LDcgKzExOCw3IEBAIHZvaWQgQ29tbWFuZExpbmU6OnBhcnNl
QXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBcCiAgICAgICAgIHNpemVfdCBvZmZzZXQg
PSBzdGFydE9mZnNldDsgXAogICAgICAgICB1aW50MzJfdCByZXN1bHQ7IFwKLSAgICAgICAgYm9v
bCBzdGF0dXMgPSBkZWNvZGVVSW50MzIodmVjdG9yLCBvZmZzZXQsIHJlc3VsdCk7IFwKKyAgICAg
ICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVVSW50MzIodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUo
KSwgb2Zmc2V0LCByZXN1bHQpOyBcCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXR1cyA9PSBl
eHBlY3RlZFN0YXR1cyk7IFwKICAgICAgICAgaWYgKGV4cGVjdGVkU3RhdHVzKSB7IFwKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBleHBlY3RlZFJlc3VsdCk7IFwKQEAgLTE1
Nyw3ICsxNjYsNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSBWZWN0b3I8dWlu
dDhfdD4gaW5pdDsgXAogICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc3RhcnRPZmZzZXQ7IFwKICAg
ICAgICAgaW50MzJfdCByZXN1bHQ7IFwKLSAgICAgICAgYm9vbCBzdGF0dXMgPSBkZWNvZGVJbnQz
Mih2ZWN0b3IsIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBib29sIHN0YXR1cyA9IGRlY29k
ZUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0dXMgPT0gZXhwZWN0ZWRTdGF0dXMpOyBcCiAgICAg
ICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBcCiAgICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVk
ID0gZXhwZWN0ZWRSZXN1bHQ7IFwKQEAgLTE3Myw2ICsxODIsMTE3IEBAIHN0YXRpYyB2b2lkIHJ1
bkxFQlRlc3RzKCkKICAgICBGT1JfRUFDSF9TSUdORURfTEVCX1RFU1QoVEVTVF9TSUdORURfTEVC
X0RFQ09ERSkKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworc3RhdGljIEpTQzo6Vk0q
IHZtOworCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIFdBU007Cit1c2lu
ZyBuYW1lc3BhY2UgQjM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KK1QgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCit7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9j
YXN0PFQoKikoQXJndW1lbnRzLi4uKT4ocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJl
dHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGludm9rZShjb25zdCBDb21waWxhdGlvbiYgY29kZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29k
ZSgpLCBhcmd1bWVudHMuLi4pOworfQorCisvLyBGb3Igbm93IHdlIGlubGluZSB0aGUgdGVzdCBm
aWxlcy4KK3N0YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCit7CisgICAgeworICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAicmV0dXJuLWkzMiIgKHJlc3VsdCBpMzIpIChy
ZXR1cm4gKGkzMi5jb25zdCA1KSkpICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9
IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDQsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4ODUsIDB4ODAsIDB4ODAsCisg
ICAgICAgICAgICAweDAwLCAweDAxLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA4LCAweDY2
LCAweDc1LCAweDZlLCAweDYzLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDgyLAorICAgICAg
ICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHg2NSwgMHg3OCwgMHg3
MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHg4ZCwgMHg4MCwgMHg4MCwgMHgwMCwKKyAgICAgICAgICAg
IDB4MDEsIDB4MDAsIDB4MGEsIDB4NzIsIDB4NjUsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4
MmQsIDB4NjksIDB4MzMsIDB4MzIsIDB4MDQsIDB4NjMsIDB4NmYsCisgICAgICAgICAgICAweDY0
LCAweDY1LCAweDhiLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAw
eDAwLCAweDAwLCAweDEwLCAweDA1LCAweDA5LCAweDAxLAorICAgICAgICAgICAgMHgwZgorICAg
ICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdKSA9PSA1KTsKKyAgICB9CisKKworICAgIHsKKyAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206
IChtb2R1bGUgKGZ1bmMgInJldHVybi1pMzIiIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRk
IChpMzIuY29uc3QgNSkgKGkzMi5jb25zdCA2KSkpKSApCisgICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDA0LCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDg1LCAweDgw
LCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwg
MHgwOCwgMHg2NiwgMHg3NSwgMHg2ZSwgMHg2MywgMHg3NCwgMHg2OSwgMHg2ZiwgMHg2ZSwgMHg4
MiwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjUs
IDB4NzgsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4OGQsIDB4ODAsIDB4ODAsIDB4MDAsCisg
ICAgICAgICAgICAweDAxLCAweDAwLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcy
LCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDA0LCAweDYzLCAweDZmLAorICAgICAg
ICAgICAgMHg2NCwgMHg2NSwgMHg4ZSwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4OSwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwNiwKKyAgICAgICAgICAg
IDB4NDAsIDB4MDksIDB4MDEsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBs
YW4ucmVzdWx0WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8g
Y29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXSkgPT0gMTEpOworICAgIH0KKyAgICAKKyAg
ICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jICJyZXR1cm4taTMy
IiAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAoaTMyLmFkZCAoaTMyLmNvbnN0IDUpIChp
MzIuY29uc3QgMykpIChpMzIuY29uc3QgMykpKSkgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4g
dmVjdG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHg4NSwgMHg4MCwg
MHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDgsIDB4NjYsIDB4NzUsIDB4NmUsIDB4NjMsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4ODIs
CisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA2LCAweDY1LCAw
eDc4LCAweDcwLCAweDZmLCAweDcyLCAweDc0LCAweDhkLCAweDgwLCAweDgwLCAweDAwLAorICAg
ICAgICAgICAgMHgwMSwgMHgwMCwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwgMHg3NSwgMHg3Miwg
MHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwNCwgMHg2MywgMHg2ZiwKKyAgICAgICAg
ICAgIDB4NjQsIDB4NjUsIDB4OTEsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4MTAsIDB4MDMsCisgICAgICAgICAgICAw
eDQwLCAweDEwLCAweDAzLCAweDQwLCAweDA5LCAweDAxLCAweDBmCisgICAgICAgIH07CisKKyAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNp
emUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJN
b2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0pID09IDExKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5j
ICJyZXR1cm4taTMyIiAocmVzdWx0IGkzMikgKGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5h
ZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0IDMpKSAoaTMyLmNvbnN0IDMpKSkpKSApCisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAwLCAweDYxLCAw
eDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDc0LCAweDc5LCAweDcw
LCAweDY1LCAweDg1LCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHg0MCwg
MHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwgMHg2NiwgMHg3NSwgMHg2ZSwgMHg2MywgMHg3NCwgMHg2
OSwgMHg2ZiwgMHg2ZSwgMHg4MiwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDAsIDB4MDYsIDB4NjUsIDB4NzgsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4OGQsIDB4
ODAsIDB4ODAsIDB4MDAsCisgICAgICAgICAgICAweDAxLCAweDAwLCAweDBhLCAweDcyLCAweDY1
LCAweDc0LCAweDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDA0LCAw
eDYzLCAweDZmLAorICAgICAgICAgICAgMHg2NCwgMHg2NSwgMHg5MywgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHg4ZSwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwNSwg
MHgxMCwKKyAgICAgICAgICAgIDB4MDMsIDB4NDAsIDB4MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4
MDEsIDB4MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOworICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBj
b3JyZWN0bHkuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXSkgPT0gMTEpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpA
QCAtMTgxLDYgKzMwMSwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
aWYgKG9wdGlvbnMubV9ydW5MRUJUZXN0cykKICAgICAgICAgcnVuTEVCVGVzdHMoKTsKIAorCisg
ICAgaWYgKG9wdGlvbnMubV9ydW5XQVNNVGVzdHMpIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgICAgICB2bSA9ICZKU0M6
OlZNOjpjcmVhdGUoSlNDOjpMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICAgICAgcnVuV0FTTVRl
c3RzKCk7CisjZWxzZQorICAgICAgICBkYXRhTG9nTG4oIldBU00gaXMgbm90IGVuYWJsZWQhIik7
CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQorICAgIH0KKwogICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKaW5kZXggMmQxNjc5MWNjNTQ3YTgyZTMzMTY3
NGJjMWUzZDQ2OTQ4ZWY1MDE3MS4uNjFkZjlmNTNmYmIzMzQwNDFhNzgzMDcxZTlhMjliYjQwY2Q4
NDk4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKQEAgLTc5
LDcgKzc5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxXQVNNU2lnbmF0dXJlPiYgc2lnbmF0dXJl
cygpIHsgcmV0dXJuIG1fc2lnbmF0dXJlczsgfQogICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBv
cnQ+JiBmdW5jdGlvbkltcG9ydHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0czsgfQogICAg
IFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1cmU+JiBmdW5jdGlvbkltcG9ydFNpZ25h
dHVyZXMoKSB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0U2lnbmF0dXJlczsgfQotICAgIFZlY3Rv
cjxXQVNNVHlwZT4mIGdsb2JhbFZhcmlhYmxlVHlwZXMoKSB7IHJldHVybiBtX2dsb2JhbFZhcmlh
YmxlVHlwZXM7IH0KKyAgICBWZWN0b3I8V0FTTVZhbHVlVHlwZT4mIGdsb2JhbFZhcmlhYmxlVHlw
ZXMoKSB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7IH0KICAgICBWZWN0b3I8V0FTTUZ1
bmN0aW9uRGVjbGFyYXRpb24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWNsYXJhdGlvbnM7IH0KICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxl
PiYgZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkgeyByZXR1cm4gbV9mdW5jdGlvblBvaW50ZXJUYWJs
ZXM7IH0KIApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXQVNNU2lnbmF0
dXJlPiBtX3NpZ25hdHVyZXM7CiAgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydD4gbV9mdW5j
dGlvbkltcG9ydHM7CiAgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4gbV9m
dW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7Ci0gICAgVmVjdG9yPFdBU01UeXBlPiBtX2dsb2JhbFZh
cmlhYmxlVHlwZXM7CisgICAgVmVjdG9yPFdBU01WYWx1ZVR5cGU+IG1fZ2xvYmFsVmFyaWFibGVU
eXBlczsKICAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24+IG1fZnVuY3Rpb25EZWNs
YXJhdGlvbnM7CiAgICAgVmVjdG9yPFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZT4gbV9mdW5jdGlv
blBvaW50ZXJUYWJsZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01C
M0lSR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzZjZmQwZDJjMDQ1ZGI3ZTcxNjYxOTFmODlm
YzM5ZjdlMWY3NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldBU01CM0lSR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxl
LmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9u
UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBCMzsKKworY2xhc3MgQjNJUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBWYWx1ZSogRXhwcmVzc2lvblR5cGU7CisKKyAgICBCM0lSR2VuZXJhdG9yKFByb2NlZHVyZSYp
OworCisgICAgdm9pZCBhZGRMb2NhbChXQVNNVmFsdWVUeXBlLCB1aW50MzJfdCk7CisgICAgRXhw
cmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoV0FTTVZhbHVlVHlwZSwgdWludDY0X3QpOworCisgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5T3AoV0FTTUJpbmFyeU9wVHlwZSwgRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soKTsKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBleHBy
ZXNzaW9uU3RhY2spOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+JiByZXR1cm5WYWx1ZXMpOworCitwcml2YXRlOgor
ICAgIE9wdGlvbmFsPFZlY3RvcjxWYXJpYWJsZSo+PiYgc3RhY2tGb3JDb250cm9sTGV2ZWwodW5z
aWduZWQpOworICAgIEJhc2ljQmxvY2sqIGJsb2NrRm9yQ29udHJvbExldmVsKHVuc2lnbmVkKTsK
KyAgICB2b2lkIHVuaWZ5KFZhcmlhYmxlKiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNv
dXJjZSk7CisgICAgVmVjdG9yPFZhcmlhYmxlKj4gaW5pdGlhbGl6ZUluY29tbWluZ1R5cGVzKEJh
c2ljQmxvY2sqLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+Jik7CisgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhMZXZlbChjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiByZXN1bHRTdGFj
aywgdW5zaWduZWQpOworCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2s7CisgICAgLy8gVGhpcyBpcyBhIHBhaXIgb2YgdGhlIGNvbnRpbnVhdGlv
biBhbmQgdGhlIHR5cGVzIGV4cGVjdGVkIG9uIHRoZSBzdGFjayBmb3IgdGhhdCBjb250aW51YXRp
b24uCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgT3B0aW9uYWw8VmVjdG9yPFZh
cmlhYmxlKj4+Pj4gbV9jb250cm9sU3RhY2s7Cit9OworCitCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgIDogbV9wcm9jKHByb2NlZHVyZSkKK3sK
KyAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworfQorCit2b2lkIEIzSVJH
ZW5lcmF0b3I6OmFkZExvY2FsKFdBU01WYWx1ZVR5cGUsIHVpbnQzMl90KQoreworICAgIC8vIFRP
RE86IEFkZCBsb2NhbHMuCit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6YmluYXJ5T3AoV0FTTUJp
bmFyeU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2Ug
V0FTTUJpbmFyeU9wVHlwZTo6STMyQWRkOiB7CisgICAgICAgIEFTU0VSVChsZWZ0LT50eXBlKCkg
PT0gQjM6OkludDMyICYmIHJpZ2h0LT50eXBlKCkgPT0gQjM6OkludDMyKTsKKyAgICAgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9Cit9
CisKK0IzSVJHZW5lcmF0b3I6OkV4cHJlc3Npb25UeXBlIEIzSVJHZW5lcmF0b3I6OmFkZENvbnN0
YW50KFdBU01WYWx1ZVR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBXQVNNVmFsdWVUeXBlOjpJMzI6CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKKyAgICBjYXNlIFdBU01WYWx1ZVR5cGU6Okk2NDoK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPiht
X3Byb2MsIE9yaWdpbigpLCB2YWx1ZSk7CisgICAgY2FzZSBXQVNNVmFsdWVUeXBlOjpGMzI6Cisg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0RmxvYXRWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQzMl90
Pih2YWx1ZSkpKTsKKyAgICBjYXNlIFdBU01WYWx1ZVR5cGU6OkY2NDoKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9Cit9CisKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soKQoreworICAgIG1fY29u
dHJvbFN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtX3Byb2MuYWRkQmxvY2soKSwgTnVsbG9w
dCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2Nr
KFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2UgYXJlIGV4aXRpbmcgdGhlIGZ1bmN0aW9uLgorICAgIGlmICghbV9jb250
cm9sU3RhY2suc2l6ZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyByZXF1aXJl
IHRoZSBzdGFjayBpcyBlbXB0eT8gSXQncyBub3QgY2xlYXIgZnJvbSB0aGUgY3VycmVudCBzcGVj
LgorICAgICAgICByZXR1cm4gIWV4cHJlc3Npb25TdGFjay5zaXplKCk7CisgICAgfQorCisgICAg
dW5pZnlWYWx1ZXNXaXRoTGV2ZWwoZXhwcmVzc2lvblN0YWNrLCAwKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKS5maXJzdDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgVmVjdG9yPEV4cHJl
c3Npb25UeXBlLCAxPiYgcmV0dXJuVmFsdWVzKQoreworICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMu
c2l6ZSgpIDw9IDEpOworICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKQorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3Jp
Z2luKCksIHJldHVyblZhbHVlc1swXSk7CisgICAgZWxzZQorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OlJldHVybiwgT3JpZ2luKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OnVuaWZ5KFZhcmlhYmxl
KiB2YXJpYWJsZSwgRXhwcmVzc2lvblR5cGUgc291cmNlKQoreworICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCB2YXJpYWJs
ZSwgc291cmNlKTsKK30KKworVmVjdG9yPFZhcmlhYmxlKj4gQjNJUkdlbmVyYXRvcjo6aW5pdGlh
bGl6ZUluY29tbWluZ1R5cGVzKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBzb3VyY2UpCit7CisgICAgVmVjdG9yPFZhcmlhYmxlKj4gcmVzdWx0OworICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvdXJjZS5zaXplKCkpOworICAgIGZvciAo
RXhwcmVzc2lvblR5cGUgZXhwciA6IHNvdXJjZSkgeworICAgICAgICBBU1NFUlQoZXhwci0+dHlw
ZSgpICE9IFZvaWQpOworICAgICAgICBWYXJpYWJsZSogdmFyID0gbV9wcm9jLmFkZFZhcmlhYmxl
KGV4cHItPnR5cGUoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodmFyKTsKKyAgICAgICAgYmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIE9yaWdpbigpLCB2
YXIpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQjNJUkdlbmVyYXRv
cjo6dW5pZnlWYWx1ZXNXaXRoTGV2ZWwoY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgcmVz
dWx0U3RhY2ssIHVuc2lnbmVkIGxldmVsKQoreworICAgIEFTU0VSVChsZXZlbCA8IG1fY29udHJv
bFN0YWNrLnNpemUoKSk7CisKKyAgICBPcHRpb25hbDxWZWN0b3I8VmFyaWFibGUqPj4mIGV4cGVj
dGVkU3RhY2sgPSBzdGFja0ZvckNvbnRyb2xMZXZlbChsZXZlbCk7CisgICAgaWYgKCFleHBlY3Rl
ZFN0YWNrKSB7CisgICAgICAgIGV4cGVjdGVkU3RhY2sgPSBpbml0aWFsaXplSW5jb21taW5nVHlw
ZXMoYmxvY2tGb3JDb250cm9sTGV2ZWwobGV2ZWwpLCByZXN1bHRTdGFjayk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZXhwZWN0ZWRTdGFjay52YWx1ZSgpLnNpemUoKSAh
PSByZXN1bHRTdGFjay5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1
bHRTdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnkoZXhwZWN0ZWRTdGFjay52YWx1ZSgp
W2ldLCByZXN1bHRTdGFja1tpXSk7Cit9CisgICAgCitPcHRpb25hbDxWZWN0b3I8VmFyaWFibGUq
Pj4mIEIzSVJHZW5lcmF0b3I6OnN0YWNrRm9yQ29udHJvbExldmVsKHVuc2lnbmVkIGxldmVsKQor
eworICAgIHJldHVybiBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0g
bGV2ZWxdLnNlY29uZDsKK30KKworQmFzaWNCbG9jayogQjNJUkdlbmVyYXRvcjo6YmxvY2tGb3JD
b250cm9sTGV2ZWwodW5zaWduZWQgbGV2ZWwpCit7CisgICAgcmV0dXJuIG1fY29udHJvbFN0YWNr
W21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBsZXZlbF0uZmlyc3Q7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxDb21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgVmVjdG9yPHVpbnQ4
X3Q+JiBzb3VyY2UsIFdBU01GdW5jdGlvbkluZm9ybWF0aW9uIGluZm8sIHVuc2lnbmVkIG9wdExl
dmVsKQoreworICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQjNJUkdlbmVyYXRvciBjb250
ZXh0KHByb2NlZHVyZSk7CisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBh
cnNlcihjb250ZXh0LCBzb3VyY2UsIGluZm8pOworICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lS
R2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ1MTk2MTQ3MGRhNGYwZjlkZmZmODI1ODI3Njc5Mjc3
NDdhNjc5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01CM0lSR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQjNDb21w
aWxhdGlvbi5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV0FTTUZvcm1hdC5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdB
U00geworCitzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUo
Vk0mLCBWZWN0b3I8dWludDhfdD4mLCBXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbiwgdW5zaWduZWQg
b3B0TGV2ZWwgPSAxKTsKKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01Gb3JtYXQuaAppbmRleCBiMzYzNDEwNTY3M2FiZDU4ODc1YjQ2MTJjOWUzZjZhNmEx
NzJhOWNiLi40NTFjZjZhNzkxNTkwYTAyNTA3MDQ1Nzg3ZjMyODQ2MWQ4YTJiZWJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBAIC01MiwxNSArNTIsMTcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTRnVuY3Rpb247CiAKLWVudW0gY2xhc3MgV0FTTVR5cGUg
OiB1aW50OF90IHsKK2VudW0gY2xhc3MgV0FTTVZhbHVlVHlwZSA6IHVpbnQ4X3QgewogICAgIEkz
MiwKKyAgICBJNjQsCiAgICAgRjMyLAogICAgIEY2NCwKICAgICBOdW1iZXJPZlR5cGVzCiB9Owog
Ci1lbnVtIGNsYXNzIFdBU01FeHByZXNzaW9uVHlwZSA6IHVpbnQ4X3QgeworZW51bSBjbGFzcyBX
QVNNRnVuY3Rpb25SZXR1cm5UeXBlIDogdWludDhfdCB7CiAgICAgSTMyLAorICAgIEk2NCwKICAg
ICBGMzIsCiAgICAgRjY0LAogICAgIFZvaWQsCkBAIC02OCw4ICs3MCw4IEBAIGVudW0gY2xhc3Mg
V0FTTUV4cHJlc3Npb25UeXBlIDogdWludDhfdCB7CiB9OwogCiBzdHJ1Y3QgV0FTTVNpZ25hdHVy
ZSB7Ci0gICAgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGU7Ci0gICAgVmVjdG9yPFdBU01U
eXBlPiBhcmd1bWVudHM7CisgICAgV0FTTUZ1bmN0aW9uUmV0dXJuVHlwZSByZXR1cm5UeXBlOwor
ICAgIFZlY3RvcjxXQVNNVmFsdWVUeXBlPiBhcmd1bWVudHM7CiB9OwogCiBzdHJ1Y3QgV0FTTUZ1
bmN0aW9uSW1wb3J0IHsKQEAgLTkxLDYgKzkzLDExIEBAIHN0cnVjdCBXQVNNRnVuY3Rpb25Qb2lu
dGVyVGFibGUgewogICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwogfTsKIAorc3Ry
dWN0IFdBU01GdW5jdGlvbkluZm9ybWF0aW9uIHsKKyAgICBzaXplX3Qgc3RhcnQ7CisgICAgc2l6
ZV90IGVuZDsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1
bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Q
YXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYjA2YjBlMzIwMjhiYjQzYWJlM2UwMjY5OWJiNDlhYjRjMGFm
NDcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1
bmN0aW9uUGFyc2VyLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldBU01QYXJz
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb250ZXh0PgorY2xhc3MgV0FTTUZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFdBU01QYXJz
ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvblR5
cGUgRXhwcmVzc2lvblR5cGU7CisKKyAgICBXQVNNRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBXQVNNRnVuY3Rpb25JbmZv
cm1hdGlvbiYpOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJsb2NrKCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VFeHByZXNzaW9uKFdBU01PcFR5cGUpOworICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2
ZWwpOworCisgICAgT3B0aW9uYWw8VmVjdG9yPEV4cHJlc3Npb25UeXBlPj4mIHN0YWNrRm9yQ29u
dHJvbExldmVsKHVuc2lnbmVkIGxldmVsKTsKKworICAgIENvbnRleHQmIG1fY29udGV4dDsKKyAg
ICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IG1fZXhwcmVzc2lvblN0YWNrOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ29udGV4dD4KK1dBU01GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6V0FTTUZ1
bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291
cmNlQnVmZmVyLCBjb25zdCBXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbykKKyAgICA6IFdB
U01QYXJzZXIoc291cmNlQnVmZmVyLCBpbmZvLnN0YXJ0LCBpbmZvLmVuZCkKKyAgICAsIG1fY29u
dGV4dChjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBX
QVNNRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkKK3sKKyAgICB1aW50MzJfdCBsb2Nh
bENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIobG9jYWxDb3VudCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbENvdW50OyAr
K2kpIHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHNXaXRoVHlwZTsKKyAgICAgICAg
aWYgKCFwYXJzZVVJbnQzMihudW1iZXJPZkxvY2Fsc1dpdGhUeXBlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBXQVNNVmFsdWVUeXBlIHR5cGVPZkxvY2FsOworICAgICAg
ICBpZiAoIXBhcnNlVmFsdWVUeXBlKHR5cGVPZkxvY2FsKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBtX2NvbnRleHQuYWRkTG9jYWwodHlwZU9mTG9jYWwsIG51bWJlck9m
TG9jYWxzV2l0aFR5cGUpOworICAgIH0KKworICAgIHJldHVybiBwYXJzZUJsb2NrKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Citib29sIFdBU01GdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VCbG9jaygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludDhf
dCBvcDsKKyAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoIXBhcnNlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxXQVNNT3BU
eXBlPihvcCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oImZhaWxlZCB0byBwcm9jZXNzIG9wOiIsIG9wKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcCA9PSBXQVNNT3BUeXBlOjpFbmQp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wgV0FTTUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24oV0FTTU9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7Cisj
ZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIHZhbHVlKSBjYXNlIG5hbWU6CisgICAgRk9SX0VBQ0hf
V0FTTV9CSU5BUllfT1AoQ1JFQVRFX0NBU0UpIHsKKyN1bmRlZiBDUkVBVEVfQ0FTRQorICAgICAg
ICBFeHByZXNzaW9uVHlwZSBsZWZ0ID0gbV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKTsKKyAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmlnaHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgp
OworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0
LmJpbmFyeU9wKHN0YXRpY19jYXN0PFdBU01CaW5hcnlPcFR5cGU+KG9wKSwgbGVmdCwgcmlnaHQs
IHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBjYXNlIFdBU01PcFR5cGU6OkkzMkNvbnN0OiB7CisgICAgICAgIHVpbnQzMl90IGNvbnN0YW50
OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvbnN0YW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5h
ZGRDb25zdGFudChXQVNNVmFsdWVUeXBlOjpJMzIsIGNvbnN0YW50KSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGNhc2UgV0FTTU9wVHlwZTo6QmxvY2s6IHsKKyAgICAgICAg
aWYgKCFtX2NvbnRleHQuYWRkQmxvY2soKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTsKKyAgICB9CisKKyAgICBjYXNlIFdBU01PcFR5cGU6
OlJldHVybjogeworICAgICAgICB1aW50OF90IHJldHVybkNvdW50OworICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDEocmV0dXJuQ291bnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IHJldHVyblZhbHVlczsKKyAgICAgICAgaWYg
KHJldHVybkNvdW50KQorICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChtX2V4cHJlc3Np
b25TdGFjay50YWtlTGFzdCgpKTsKKworICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZFJldHVy
bihyZXR1cm5WYWx1ZXMpOworICAgIH0KKworICAgIGNhc2UgV0FTTU9wVHlwZTo6RW5kOgorICAg
ICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKG1fZXhwcmVzc2lvblN0YWNrKTsKKworICAg
IH0KKworICAgIC8vIFVua25vd24gb3Bjb2RlLgorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVs
ZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E2NjdmYjdmNGQ1YTVkYzg4Y2M3ZjY0YTBhOTA2YmU0
ZTk4YTg0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Nb2R1bGVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldBU01Nb2R1bGVQYXJzZXIuaCIKKworI2luY2x1ZGUgIldBU01Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJXQVNNT3BzLmgiCisjaW5jbHVkZSAiV0FTTVNlY3Rpb25zLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK3N0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworYm9vbCBXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZSgpCit7CisgICAgaWYgKG1fc291cmNlTGVuZ3RoIDwgOCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghY29uc3VtZUNoYXJhY3RlcigwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghY29uc3VtZVN0cmluZygiYXNtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3Qg
ZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOworICAgIGlm
ICghcGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oIlBhc3NlZCBwcm9j
ZXNzaW5nIGhlYWRlci4iKTsKKworICAgIFdBU01TZWN0aW9uczo6U2VjdGlvbiBwcmV2aW91c1Nl
Y3Rpb24gPSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OlVua25vd247CisgICAgd2hpbGUgKG1fb2Zm
c2V0IDwgbV9zb3VyY2VMZW5ndGgpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nTG4oIlN0YXJ0aW5nIHRvIHBhcnNlIG5leHQgc2VjdGlvbiBhdCBvZmZzZXQ6ICIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgdWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7CisgICAgICAg
IGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbk5hbWVMZW5ndGgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUg
c2VjdGlvbidzIHNpemUuCisgICAgICAgIGlmIChtX29mZnNldCArIHNlY3Rpb25OYW1lTGVuZ3Ro
ICsgbWF4TEVCQnl0ZUxlbmd0aCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBXQVNNU2VjdGlvbnM6OlNlY3Rpb24gc2VjdGlvbiA9IFdBU01T
ZWN0aW9uczo6bG9va3VwKG1fc291cmNlLmRhdGEoKSArIG1fb2Zmc2V0LCBzZWN0aW9uTmFtZUxl
bmd0aCk7CisgICAgICAgIGlmICghV0FTTVNlY3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3Vz
U2VjdGlvbiwgc2VjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25OYW1lTGVuZ3RoOworCisgICAgICAgIHVpbnQzMl90IHNlY3Rpb25M
ZW5ndGg7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbkxlbmd0aCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9vZmZzZXQg
KyBzZWN0aW9uTGVuZ3RoOworCisgICAgICAgIHN3aXRjaCAoc2VjdGlvbikgeworICAgICAgICBj
YXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgY2FzZSBXQVNNU2VjdGlvbnM6OlNlY3Rpb246OkZ1bmN0aW9uVHlwZXM6IHsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFy
c2luZyB0eXBlcy4iKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblR5cGVzKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlvbjo6U2lnbmF0dXJlczogewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJz
aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIik7CisgICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rp
b25TaWduYXR1cmVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFdBU01TZWN0aW9uczo6U2VjdGlv
bjo6RGVmaW5pdGlvbnM6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4iKTsKKyAgICAgICAg
ICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IFdBU01TZWN0aW9uczo6U2VjdGlvbjo6VW5rbm93bjogeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5n
LiIpOworICAgICAgICAgICAgbV9vZmZzZXQgKz0gc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2dMbigiRmluaXNoZWQgcGFyc2luZyBzZWN0aW9uLiIpOworCisgICAg
ICAgIGlmIChlbmQgIT0gbV9vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgcHJldmlvdXNTZWN0aW9uID0gc2VjdGlvbjsKKyAgICB9CisKKyAgICAvLyBUT0RPCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
blR5cGVzKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRhdGFMb2dMbigiY291bnQ6ICIsIGNvdW50KTsKKworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYg
KCFwYXJzZVVJbnQ3KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAodHlwZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
Z0xuKCJHb3QgZnVuY3Rpb24gdHlwZS4iKTsKKworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENv
dW50OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKKworICAgICAgICBW
ZWN0b3I8V0FTTVZhbHVlVHlwZT4gYXJndW1lbnRUeXBlczsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKCFwYXJz
ZVVJbnQ3KHR5cGUpIHx8IHR5cGUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTVZhbHVlVHlw
ZTo6TnVtYmVyT2ZUeXBlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V0FTTVZhbHVlVHlwZT4odHlw
ZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXQVNNRnVuY3Rpb25SZXR1cm5UeXBlIHJl
dHVyblR5cGU7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4o
dHlwZSk7CisKKyAgICAgICAgaWYgKHR5cGUpIHsKKyAgICAgICAgICAgIFdBU01WYWx1ZVR5cGUg
dmFsdWU7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nh
c3Q8V0FTTUZ1bmN0aW9uUmV0dXJuVHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBXQVNNRnVuY3Rpb25SZXR1cm5UeXBlOjpWb2lkOworCisgICAg
ICAgIC8vIFRPRE86IEFjdHVhbGx5IGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgZGF0YS4uLgorICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uU2lnbmF0dXJlcygpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZnVuY3Rp
b25zLnJlc2l6ZShjb3VudCk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOworICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKHR5cGVOdW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVu
Y3Rpb25EZWZpbml0aW9ucygpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFwYXJz
ZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb3Vu
dCAhPSBtX2Z1bmN0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IGZ1
bmN0aW9uU2l6ZTsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdBU01GdW5jdGlvbkluZm9ybWF0
aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbaV07CisgICAgICAgIGluZm8uc3RhcnQgPSBtX29mZnNl
dDsKKyAgICAgICAgaW5mby5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKKyAgICAgICAg
bV9vZmZzZXQgPSBpbmZvLmVuZDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQ
YXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZTM2MmMwYzJkMTAwYmVkOTM3YjZiNGNjZGY5NmMwNTkyZThl
YmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldBU01PcHMuaCIK
KyNpbmNsdWRlICJXQVNNUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00g
eworCitjbGFzcyBXQVNNTW9kdWxlUGFyc2VyIDogcHVibGljIFdBU01QYXJzZXIgeworcHVibGlj
OgorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0gMHhjOworCisgICAg
V0FTTU1vZHVsZVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKKyAg
ICAgICAgOiBXQVNNUGFyc2VyKHNvdXJjZUJ1ZmZlciwgMCwgc291cmNlQnVmZmVyLnNpemUoKSkK
KyAgICB7CisgICAgfQorCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxXQVNNRnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQorCitwcml2YXRlOgorICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25UeXBlcygpOworICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCk7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCk7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odWludDMyX3QgbnVtYmVyKTsKKyAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJsb2NrKCk7CisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKFdBU01PcFR5cGUpOworCisgICAgVmVjdG9yPFdBU01G
dW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdB
U00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNT3BzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNT3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg3YThmNjFkYzU4
YjZjMWYzMWRkNDg3NWJlNzZkOTU5ZjAxYjUzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7
CisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TUEVDSUFMX09QKG1hY3JvKSBcCisgICAgbWFjcm8o
STMyQ29uc3QsIDB4MTApCisKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1Ao
bWFjcm8pIFwKKyAgICBtYWNybyhCbG9jaywgMHgwMSkgXAorICAgIG1hY3JvKFJldHVybiwgMHgw
OSkgXAorICAgIG1hY3JvKEVuZCwgMHgwZikKKworI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZ
X09QKG1hY3JvKQorCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKSBcCisg
ICAgbWFjcm8oSTMyQWRkLCAweDQwKQorCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fT1AobWFjcm8p
IFwKKyAgICBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8pIFwKKyAgICBGT1JfRUFDSF9X
QVNNX0NPTlRST0xfRkxPV19PUChtYWNybykgXAorICAgIEZPUl9FQUNIX1dBU01fVU5BUllfT1Ao
bWFjcm8pIFwKKyAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykKKworI2RlZmluZSBD
UkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCkgbmFtZSA9IGlkLAorCitlbnVtIFdBU01PcFR5cGUg
OiB1aW50OF90IHsKKyAgICBGT1JfRUFDSF9XQVNNX09QKENSRUFURV9FTlVNX1ZBTFVFKQorfTsK
KworCisKK2VudW0gY2xhc3MgV0FTTUJpbmFyeU9wVHlwZSA6IHVpbnQ4X3QgeworICAgIEZPUl9F
QUNIX1dBU01fQklOQVJZX09QKENSRUFURV9FTlVNX1ZBTFVFKQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV0FTTQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI3VuZGVmIENSRUFURV9FTlVNX1ZBTFVF
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVmMzhkZjkyNmE3NDA0MTM1NTg3NTA2MTRmNWJj
MTMzOWMyYzcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01QYXJzZXIuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiV0FTTUZvcm1hdC5o
IgorI2luY2x1ZGUgIldBU01PcHMuaCIKKyNpbmNsdWRlICJXQVNNU2VjdGlvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvTEVCRGVjb2Rlci5oPgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdBU00geworCitjbGFzcyBXQVNNUGFyc2VyIHsKK3By
b3RlY3RlZDoKKyAgICBXQVNNUGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCBz
dGFydCwgc2l6ZV90IGVuZCk7CisKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1l
Q2hhcmFjdGVyKGNoYXIpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJp
bmcoY29uc3QgY2hhciopOworCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJV
SW50MSh1aW50OF90JiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
VUludDcodWludDhfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBkZWNvZGVVSW50MzIobV9z
b3VyY2UuZGF0YSgpLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KKworCisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUoV0FTTVZhbHVlVHlwZSYg
cmVzdWx0KTsKKworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbV9zb3VyY2U7CisgICAgc2l6
ZV90IG1fc291cmNlTGVuZ3RoOworICAgIHNpemVfdCBtX29mZnNldDsKK307CisKK0FMV0FZU19J
TkxJTkUgV0FTTVBhcnNlcjo6V0FTTVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJj
ZUJ1ZmZlciwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKQorICAgIDogbV9zb3VyY2Uoc291cmNl
QnVmZmVyKQorICAgICwgbV9zb3VyY2VMZW5ndGgoZW5kKQorICAgICwgbV9vZmZzZXQoc3RhcnQp
Cit7CisgICAgQVNTRVJUKGVuZCA8PSBzb3VyY2VCdWZmZXIuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
c3RhcnQgPCBlbmQpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6Y29uc3Vt
ZUNoYXJhY3RlcihjaGFyIGMpCit7CisgICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGMgPT0gbV9zb3VyY2VbbV9vZmZzZXRd
KSB7CisgICAgICAgIG1fb2Zmc2V0Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBXQVNNUGFyc2VyOjpjb25z
dW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zm
c2V0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0cltpXTsgaSsrKSB7CisgICAgICAgIGlm
ICghY29uc3VtZUNoYXJhY3RlcihzdHJbaV0pKSB7CisgICAgICAgICAgICBtX29mZnNldCA9IHN0
YXJ0OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6cGFyc2VVSW50
MzIodWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICBpZiAobV9vZmZzZXQgKyA0ID49IG1fc291cmNl
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7CisgICAg
bV9vZmZzZXQgKz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSBib29s
IFdBU01QYXJzZXI6OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KQoreworICAgIGlmIChtX29m
ZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3Vs
dCA9IG1fc291cmNlW21fb2Zmc2V0KytdOworICAgIHJldHVybiByZXN1bHQgPCAweDgwOworfQor
CitBTFdBWVNfSU5MSU5FIGJvb2wgV0FTTVBhcnNlcjo6cGFyc2VWYXJVSW50MSh1aW50OF90JiBy
ZXN1bHQpCit7CisgICAgdWludDMyX3QgdGVtcDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKHRl
bXApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odGVtcCk7CisgICAgcmV0dXJuIHRlbXAgPD0gMTsKK30KKworQUxXQVlTX0lOTElORSBi
b29sIFdBU01QYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFdBU01WYWx1ZVR5cGUmIHJlc3VsdCkKK3sK
KyAgICB1aW50OF90IHZhbHVlOworICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FT
TVZhbHVlVHlwZTo6TnVtYmVyT2ZUeXBlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxXQVNNVmFsdWVUeXBlPih2YWx1ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdBU00KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
UGxhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQyOWI5ZWU5YTc5YzhiNzM2ZDVhNjkyOTliNzA5M2Q5NTcw
ZGIwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Q
bGFuLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldBU01QbGFuLmgi
CisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiV0FTTUIzSVJHZW5lcmF0
b3IuaCIKKyNpbmNsdWRlICJXQVNNTW9kdWxlUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFM
b2cuaD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisKK25h
bWVzcGFjZSBXQVNNIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitQ
bGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKK3sKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOworICAgIFdBU01Nb2R1
bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSk7CisgICAgaWYgKCFtb2R1bGVQYXJzZXIucGFy
c2UoKSkgeworICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZC4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
TG4oIlBhcnNlZCBtb2R1bGUuIik7CisKKyAgICBmb3IgKGNvbnN0IFdBU01GdW5jdGlvbkluZm9y
bWF0aW9uJiBpbmZvIDogbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkgeworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5j
aW9uIHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8u
ZW5kKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIHNvdXJjZSwg
aW5mbykpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNUGxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3Yzc3NDNjZDA1ZjliZjNjODcwMzAzZTkyMTFk
ZGNlOTM0ZjNjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNUGxhbi5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9u
UmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQjMgeworY2xhc3MgQ29tcGlsYXRp
b247Cit9IC8vIG5hbWVzcGFjZSBCMworCituYW1lc3BhY2UgV0FTTSB7CisKKy8vIFRPRE86IFRo
aXMgc2hvdWxkIGNyZWF0ZSBhIFdBU00gTW9kdWxlIG5vdCBhIGxpc3Qgb2YgZnVuY3Rpb25zLgor
Y2xhc3MgUGxhbiB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZl
Y3Rvcjx1aW50OF90PiBzb3VyY2UpOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCMzo6
Q29tcGlsYXRpb24+PiByZXN1bHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXQVNNCisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg3NjNjYzli
ZTMzNGQ5MmVmYTBkZjdiYWQ1YzMxMTkwYTBhNmFlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TZWN0aW9ucy5jcHAKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXQVNNU2VjdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7CisKK3N0cnVj
dCBTZWN0aW9uRGF0YSB7CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIG5h
bWU7Cit9OworCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBzZWN0aW9uRGF0YUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihX
QVNNU2VjdGlvbnM6OlNlY3Rpb246OlVua25vd24pOworc3RhdGljIGNvbnN0IFNlY3Rpb25EYXRh
IHNlY3Rpb25EYXRhW3NlY3Rpb25EYXRhTGVuZ3RoXSB7CisjZGVmaW5lIENSRUFURV9TRUNUSU9O
X0RBVEEobmFtZSwgc3RyKSB7IHNpemVvZihzdHIpIC0gMSwgc3RyIH0sCisgICAgRk9SX0VBQ0hf
V0FTTV9TRUNUSU9OX1RZUEUoQ1JFQVRFX1NFQ1RJT05fREFUQSkKKyN1bmRlZiBDUkVBVEVfU0VD
VElPTl9EQVRBCit9OworCitXQVNNU2VjdGlvbnM6OlNlY3Rpb24gV0FTTVNlY3Rpb25zOjpsb29r
dXAoY29uc3QgdWludDhfdCogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nTG4oIkRlY29kaW5nIHNlY3Rpb24gd2l0aCBuYW1lOiAiLCBT
dHJpbmcobmFtZSwgbGVuZ3RoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlY3Rp
b25EYXRhTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHNlY3Rpb25EYXRhW2ldLmxlbmd0aCAh
PSBsZW5ndGgpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFtZW1jbXAobmFt
ZSwgc2VjdGlvbkRhdGFbaV0ubmFtZSwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXQVNNU2VjdGlvbnM6OlNlY3Rpb24+KGkpOworICAgIH0KKyAgICByZXR1cm4gV0FT
TVNlY3Rpb25zOjpTZWN0aW9uOjpVbmtub3duOworfQorCit9IC8vIG5hbWVzcGFjZSBXQVNNCisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNU2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTA2YTJm
YTA3N2YxMTI3NDczZGU2ZjljYzgxMzZhMTE2MjhkMTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVNlY3Rpb25zLmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNw
YWNlIFdBU00geworCisvLyBUaGVzZSBzaG91bGQgYmUgaW4gdGhlIG9yZGVyIHRoYXQgd2UgZXhw
ZWN0IHRoZW0gdG8gYmUgaW4gdGhlIGJpbmFyeS4KKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TRUNU
SU9OX1RZUEUobWFjcm8pIFwKKyAgICBtYWNybyhGdW5jdGlvblR5cGVzLCAidHlwZSIpIFwKKyAg
ICBtYWNybyhTaWduYXR1cmVzLCAiZnVuY3Rpb24iKSBcCisgICAgbWFjcm8oRGVmaW5pdGlvbnMs
ICJjb2RlIikgXAorICAgIG1hY3JvKEVuZCwgImVuZCIpCisKK3N0cnVjdCBXQVNNU2VjdGlvbnMg
eworICAgIGVudW0gY2xhc3MgU2VjdGlvbiB7CisjZGVmaW5lIENSRUFURV9TRUNUSU9OX0VOVU0o
bmFtZSwgc3RyKSBuYW1lLAorICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT05fVFlQRShDUkVB
VEVfU0VDVElPTl9FTlVNKQorI3VuZGVmIENSRUFURV9TRUNUSU9OX0VOVU0KKyAgICAgICAgVW5r
bm93bgorICAgIH07CisgICAgc3RhdGljIFNlY3Rpb24gbG9va3VwKGNvbnN0IHVpbnQ4X3QqLCB1
bnNpZ25lZCk7CisgICAgc3RhdGljIGJvb2wgdmFsaWRhdGVPcmRlcihTZWN0aW9uIHByZXZpb3Vz
LCBTZWN0aW9uIG5leHQpCisgICAgeworICAgICAgICAvLyBUaGlzIGFsbG93cyB1bmtub3duIHNl
Y3Rpb25zIGFmdGVyIEVuZCwgd2hpY2ggSSBkb3VidCB3aWxsIGV2ZXIgYmUgc3VwcG9ydGVkIGJ1
dAorICAgICAgICAvLyB0aGVyZSBpcyBubyByZWFzb24gdG8gcG90ZW50aWFsbHkgYnJlYWsgYmFj
a3dhcmRzIGNvbXBhdGFiaWxpdHkuCisgICAgICAgIGlmIChwcmV2aW91cyA9PSBTZWN0aW9uOjpV
bmtub3duKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBwcmV2aW91
cyA8IG5leHQ7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV0FTTQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0RhdGFMb2cuaCBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAppbmRleCAx
M2UzZWRjYTMwYjVlNjNhYTBiMGVkYjRjMjc1YjJkMDE2MTM0ZDg5Li5jMmVmNTc2NTUxNDQzODc3
MmM5ZjI3MTMzODIxYmMwOGEyZmY3ZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9EYXRh
TG9nLmgKKysrIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCkBAIC00NSw5ICs0NSwxNiBAQCB2
b2lkIGRhdGFMb2coY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKICAgICBkYXRhRmlsZSgpLnByaW50
KHZhbHVlcy4uLik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgordm9pZCBkYXRh
TG9nTG4oY29uc3QgVHlwZXMmLi4uIHZhbHVlcykKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZh
bHVlcy4uLiwgIlxuIik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmRh
dGFMb2c7Cit1c2luZyBXVEY6OmRhdGFMb2dMbjsKIHVzaW5nIFdURjo6ZGF0YUxvZ0Y7CiB1c2lu
ZyBXVEY6OmRhdGFMb2dGU3RyaW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MRUJE
ZWNvZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKaW5kZXggMWIyMDIxZWIxZDg3
Y2I1Yjc3NmE5ZTA3NjA2ODJjN2ExMzNlMGY1OC4uMzZkY2NhMmRiMGM0NmFmYmUzMWM4YzEwODhj
ZTNhOGFjZTIxMWJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaApAQCAtMjYsMjMgKzI2LDIwIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbXBpbGVyLmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogCi0jaW5jbHVkZSAiRGF0YUxvZy5oIgotCiAvLyBUaGlzIGZp
bGUgY29udGFpbnMgYSBidW5jaCBvZiBoZWxwZXIgZnVuY3Rpb25zIGZvciBkZWNvZGluZyBMRUIg
bnVtYmVycy4KIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MRUIxMjggZm9y
IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAvLyBMRUIgZm9ybWF0LgogCiBjb25zdCBzaXpl
X3QgbWF4TEVCQnl0ZUxlbmd0aCA9IDU7CiAKLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBkZWNvZGVVSW50MzIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBieXRlcywgc2l6ZV90JiBvZmZz
ZXQsIHVpbnQzMl90JiByZXN1bHQpCitpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVj
b2RlVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9m
ZnNldCwgdWludDMyX3QmIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQoYnl0ZXMuc2l6ZSgpID4gb2Zm
c2V0KTsKKyAgICBBU1NFUlQobGVuZ3RoID4gb2Zmc2V0KTsKICAgICByZXN1bHQgPSAwOwogICAg
IHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExFQkJ5
dGVMZW5ndGgsIGJ5dGVzLnNpemUoKSAtIG9mZnNldCAtIDEpOworICAgIHNpemVfdCBsYXN0ID0g
c3RkOjptaW4obWF4TEVCQnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0IC0gMSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgdHJ1ZTsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IGJ5
dGVzW29mZnNldCsrXTsKICAgICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7
CkBAIC01NiwxMiArNTMsMTIgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29k
ZVVJbnQzMihjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ5dGVzLCBzaXplX3QKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludDMyKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgYnl0ZXMsIHNpemVfdCYgb2Zmc2V0LCBpbnQzMl90JiByZXN1
bHQpCitpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50MzIoY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBpbnQzMl90JiByZXN1
bHQpCiB7Ci0gICAgQVNTRVJUKGJ5dGVzLnNpemUoKSA+IG9mZnNldCk7CisgICAgQVNTRVJUKGxl
bmd0aCA+IG9mZnNldCk7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlmdCA9IDA7
Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhMRUJCeXRlTGVuZ3RoLCBieXRlcy5zaXpl
KCkgLSBvZmZzZXQgLSAxKTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExFQkJ5dGVM
ZW5ndGgsIGxlbmd0aCAtIG9mZnNldCAtIDEpOwogICAgIHVpbnQ4X3QgYnl0ZTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyB0cnVlOyArK2kpIHsKICAgICAgICAgYnl0ZSA9IGJ5dGVzW29mZnNl
dCsrXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>